hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
 * VPIF display header file
 *
 * Copyright (C) 2009 Texas Instruments Incorporated - https://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation version 2.
 *
 * This program is distributed .as is. WITHOUT ANY WARRANTY of any
 * kind, whether express or implied; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
 
#ifndef VPIF_DISPLAY_H
#define VPIF_DISPLAY_H
 
/* Header files */
#include <media/videobuf2-dma-contig.h>
#include <media/v4l2-device.h>
 
#include "vpif.h"
 
/* Macros */
#define VPIF_DISPLAY_VERSION    "0.0.2"
 
#define VPIF_VALID_FIELD(field) \
   (((V4L2_FIELD_ANY == field) || (V4L2_FIELD_NONE == field)) || \
   (((V4L2_FIELD_INTERLACED == field) || (V4L2_FIELD_SEQ_TB == field)) || \
   (V4L2_FIELD_SEQ_BT == field)))
 
#define VPIF_DISPLAY_MAX_DEVICES    (2)
#define VPIF_SLICED_BUF_SIZE        (256)
#define VPIF_SLICED_MAX_SERVICES    (3)
#define VPIF_VIDEO_INDEX        (0)
#define VPIF_VBI_INDEX            (1)
#define VPIF_HBI_INDEX            (2)
 
/* Setting it to 1 as HBI/VBI support yet to be added , else 3*/
#define VPIF_NUMOBJECTS    (1)
 
/* Macros */
#define ISALIGNED(a)    (0 == ((a) & 7))
 
/* enumerated data types */
/* Enumerated data type to give id to each device per channel */
enum vpif_channel_id {
   VPIF_CHANNEL2_VIDEO = 0,    /* Channel2 Video */
   VPIF_CHANNEL3_VIDEO,        /* Channel3 Video */
};
 
/* structures */
 
struct video_obj {
   enum v4l2_field buf_field;
   u32 latest_only;        /* indicate whether to return
                    * most recent displayed frame only */
   v4l2_std_id stdid;        /* Currently selected or default
                    * standard */
   struct v4l2_dv_timings dv_timings;
};
 
struct vpif_disp_buffer {
   struct vb2_v4l2_buffer vb;
   struct list_head list;
};
 
struct common_obj {
   struct vpif_disp_buffer *cur_frm;    /* Pointer pointing to current
                        * vb2_buffer */
   struct vpif_disp_buffer *next_frm;    /* Pointer pointing to next
                        * vb2_buffer */
   struct v4l2_format fmt;            /* Used to store the format */
   struct vb2_queue buffer_queue;        /* Buffer queue used in
                        * video-buf */
 
   struct list_head dma_queue;        /* Queue of filled frames */
   spinlock_t irqlock;            /* Used in video-buf */
 
   /* channel specific parameters */
   struct mutex lock;            /* lock used to access this
                        * structure */
   u32 ytop_off;                /* offset of Y top from the
                        * starting of the buffer */
   u32 ybtm_off;                /* offset of Y bottom from the
                        * starting of the buffer */
   u32 ctop_off;                /* offset of C top from the
                        * starting of the buffer */
   u32 cbtm_off;                /* offset of C bottom from the
                        * starting of the buffer */
   /* Function pointer to set the addresses */
   void (*set_addr)(unsigned long, unsigned long,
               unsigned long, unsigned long);
   u32 height;
   u32 width;
};
 
struct channel_obj {
   /* V4l2 specific parameters */
   struct video_device video_dev;    /* Identifies video device for
                    * this channel */
   u32 field_id;            /* Indicates id of the field
                    * which is being displayed */
   u8 initialized;            /* flag to indicate whether
                    * encoder is initialized */
   u32 output_idx;            /* Current output index */
   struct v4l2_subdev *sd;        /* Current output subdev(may be NULL) */
 
   enum vpif_channel_id channel_id;/* Identifies channel */
   struct vpif_params vpifparams;
   struct common_obj common[VPIF_NUMOBJECTS];
   struct video_obj video;
};
 
/* vpif device structure */
struct vpif_device {
   struct v4l2_device v4l2_dev;
   struct channel_obj *dev[VPIF_DISPLAY_NUM_CHANNELS];
   struct v4l2_subdev **sd;
   struct v4l2_async_notifier notifier;
   struct vpif_display_config *config;
};
 
#endif                /* VPIF_DISPLAY_H */