]>
Commit | Line | Data |
---|---|---|
622897da MH |
1 | /* |
2 | * Copyright (C) 2012 Texas Instruments Inc | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU General Public License as | |
6 | * published by the Free Software Foundation version 2. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, | |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | * GNU General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License | |
14 | * along with this program; if not, write to the Free Software | |
15 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
16 | * | |
17 | * Contributors: | |
18 | * Manjunath Hadli <manjunath.hadli@ti.com> | |
19 | * Prabhakar Lad <prabhakar.lad@ti.com> | |
20 | */ | |
21 | ||
22 | #ifndef _DAVINCI_VPFE_VIDEO_H | |
23 | #define _DAVINCI_VPFE_VIDEO_H | |
24 | ||
2d700715 | 25 | #include <media/videobuf2-v4l2.h> |
622897da MH |
26 | #include <media/videobuf2-dma-contig.h> |
27 | ||
28 | struct vpfe_device; | |
29 | ||
30 | /* | |
31 | * struct vpfe_video_operations - VPFE video operations | |
32 | * @queue: Resume streaming when a buffer is queued. Called on VIDIOC_QBUF | |
33 | * if there was no buffer previously queued. | |
34 | */ | |
35 | struct vpfe_video_operations { | |
a0ecdf06 | 36 | int (*queue)(struct vpfe_device *vpfe_dev, unsigned long addr); |
622897da MH |
37 | }; |
38 | ||
39 | enum vpfe_pipeline_stream_state { | |
40 | VPFE_PIPELINE_STREAM_STOPPED = 0, | |
41 | VPFE_PIPELINE_STREAM_CONTINUOUS = 1, | |
42 | VPFE_PIPELINE_STREAM_SINGLESHOT = 2, | |
43 | }; | |
44 | ||
45 | enum vpfe_video_state { | |
46 | /* indicates that buffer is not queued */ | |
47 | VPFE_VIDEO_BUFFER_NOT_QUEUED = 0, | |
48 | /* indicates that buffer is queued */ | |
49 | VPFE_VIDEO_BUFFER_QUEUED = 1, | |
50 | }; | |
51 | ||
52 | struct vpfe_pipeline { | |
53 | /* media pipeline */ | |
54 | struct media_pipeline *pipe; | |
20b85227 | 55 | struct media_graph graph; |
622897da MH |
56 | /* state of the pipeline, continuous, |
57 | * single-shot or stopped | |
58 | */ | |
59 | enum vpfe_pipeline_stream_state state; | |
60 | /* number of active input video entities */ | |
61 | unsigned int input_num; | |
62 | /* number of active output video entities */ | |
63 | unsigned int output_num; | |
64 | /* input video nodes in case of single-shot mode */ | |
65 | struct vpfe_video_device *inputs[10]; | |
66 | /* capturing video nodes */ | |
67 | struct vpfe_video_device *outputs[10]; | |
68 | }; | |
69 | ||
70 | #define to_vpfe_pipeline(__e) \ | |
71 | container_of((__e)->pipe, struct vpfe_pipeline, pipe) | |
72 | ||
73 | #define to_vpfe_video(vdev) \ | |
74 | container_of(vdev, struct vpfe_video_device, video_dev) | |
75 | ||
76 | struct vpfe_cap_buffer { | |
2d700715 | 77 | struct vb2_v4l2_buffer vb; |
622897da MH |
78 | struct list_head list; |
79 | }; | |
80 | ||
81 | struct vpfe_video_device { | |
82 | /* vpfe device */ | |
83 | struct vpfe_device *vpfe_dev; | |
84 | /* video dev */ | |
85 | struct video_device video_dev; | |
86 | /* media pad of video entity */ | |
87 | struct media_pad pad; | |
88 | /* video operations supported by video device */ | |
89 | const struct vpfe_video_operations *ops; | |
90 | /* type of the video buffers used by user */ | |
91 | enum v4l2_buf_type type; | |
92 | /* Indicates id of the field which is being captured */ | |
93 | u32 field_id; | |
94 | /* pipeline for which video device is part of */ | |
95 | struct vpfe_pipeline pipe; | |
96 | /* Indicates whether streaming started */ | |
97 | u8 started; | |
98 | /* Indicates state of the stream */ | |
99 | unsigned int state; | |
100 | /* current input at the sub device */ | |
101 | int current_input; | |
102 | /* | |
103 | * This field keeps track of type of buffer exchange mechanism | |
104 | * user has selected | |
105 | */ | |
106 | enum v4l2_memory memory; | |
622897da MH |
107 | /* number of open instances of the channel */ |
108 | u32 usrs; | |
109 | /* flag to indicate whether decoder is initialized */ | |
110 | u8 initialized; | |
111 | /* skip frame count */ | |
112 | u8 skip_frame_count; | |
113 | /* skip frame count init value */ | |
114 | u8 skip_frame_count_init; | |
115 | /* time per frame for skipping */ | |
116 | struct v4l2_fract timeperframe; | |
117 | /* ptr to currently selected sub device */ | |
118 | struct vpfe_ext_subdev_info *current_ext_subdev; | |
119 | /* Pointer pointing to current vpfe_cap_buffer */ | |
120 | struct vpfe_cap_buffer *cur_frm; | |
121 | /* Pointer pointing to next vpfe_cap_buffer */ | |
122 | struct vpfe_cap_buffer *next_frm; | |
123 | /* Used to store pixel format */ | |
124 | struct v4l2_format fmt; | |
125 | struct vb2_queue buffer_queue; | |
622897da MH |
126 | /* Queue of filled frames */ |
127 | struct list_head dma_queue; | |
128 | spinlock_t irqlock; | |
129 | /* IRQ lock for DMA queue */ | |
130 | spinlock_t dma_queue_lock; | |
131 | /* lock used to access this structure */ | |
132 | struct mutex lock; | |
133 | /* number of users performing IO */ | |
134 | u32 io_usrs; | |
135 | /* Currently selected or default standard */ | |
136 | v4l2_std_id stdid; | |
137 | /* | |
138 | * offset where second field starts from the starting of the | |
d88fe15b | 139 | * buffer for field separated YCbCr formats |
622897da MH |
140 | */ |
141 | u32 field_off; | |
142 | }; | |
143 | ||
144 | int vpfe_video_is_pipe_ready(struct vpfe_pipeline *pipe); | |
145 | void vpfe_video_unregister(struct vpfe_video_device *video); | |
146 | int vpfe_video_register(struct vpfe_video_device *video, | |
147 | struct v4l2_device *vdev); | |
148 | int vpfe_video_init(struct vpfe_video_device *video, const char *name); | |
149 | void vpfe_video_process_buffer_complete(struct vpfe_video_device *video); | |
150 | void vpfe_video_schedule_bottom_field(struct vpfe_video_device *video); | |
151 | void vpfe_video_schedule_next_buffer(struct vpfe_video_device *video); | |
152 | ||
153 | #endif /* _DAVINCI_VPFE_VIDEO_H */ |