Lines Matching refs:dev

54 static void vivid_thread_vid_out_tick(struct vivid_dev *dev)
59 dprintk(dev, 1, "Video Output Thread Tick\n");
62 if (dev->perc_dropped_buffers &&
63 prandom_u32_max(100) < dev->perc_dropped_buffers)
66 spin_lock(&dev->slock);
71 if (!list_empty(&dev->vid_out_active) &&
72 !list_is_singular(&dev->vid_out_active)) {
73 vid_out_buf = list_entry(dev->vid_out_active.next,
77 if (!list_empty(&dev->vbi_out_active) &&
78 (dev->field_out != V4L2_FIELD_ALTERNATE ||
79 (dev->vbi_out_seq_count & 1))) {
80 vbi_out_buf = list_entry(dev->vbi_out_active.next,
84 spin_unlock(&dev->slock);
90 vid_out_buf->vb.v4l2_buf.sequence = dev->vid_out_seq_count;
91 if (dev->field_out == V4L2_FIELD_ALTERNATE) {
99 vid_out_buf->vb.v4l2_buf.timestamp.tv_sec += dev->time_wrap_offset;
100 vb2_buffer_done(&vid_out_buf->vb, dev->dqbuf_error ?
102 dprintk(dev, 2, "vid_out buffer %d done\n",
107 if (dev->stream_sliced_vbi_out)
108 vivid_sliced_vbi_out_process(dev, vbi_out_buf);
110 vbi_out_buf->vb.v4l2_buf.sequence = dev->vbi_out_seq_count;
112 vbi_out_buf->vb.v4l2_buf.timestamp.tv_sec += dev->time_wrap_offset;
113 vb2_buffer_done(&vbi_out_buf->vb, dev->dqbuf_error ?
115 dprintk(dev, 2, "vbi_out buffer %d done\n",
118 dev->dqbuf_error = false;
123 struct vivid_dev *dev = data;
133 dprintk(dev, 1, "Video Output Thread Start\n");
138 dev->out_seq_offset = 0;
139 if (dev->seq_wrap)
140 dev->out_seq_count = 0xffffff80U;
141 dev->jiffies_vid_out = jiffies;
142 dev->vid_out_seq_start = dev->vbi_out_seq_start = 0;
143 dev->out_seq_resync = false;
150 mutex_lock(&dev->mutex);
152 if (dev->out_seq_resync) {
153 dev->jiffies_vid_out = cur_jiffies;
154 dev->out_seq_offset = dev->out_seq_count + 1;
155 dev->out_seq_count = 0;
156 dev->out_seq_resync = false;
158 numerator = dev->timeperframe_vid_out.numerator;
159 denominator = dev->timeperframe_vid_out.denominator;
161 if (dev->field_out == V4L2_FIELD_ALTERNATE)
165 jiffies_since_start = cur_jiffies - dev->jiffies_vid_out;
178 dev->jiffies_vid_out = cur_jiffies;
179 dev->out_seq_offset = buffers_since_start;
182 dev->out_seq_count = buffers_since_start + dev->out_seq_offset;
183 dev->vid_out_seq_count = dev->out_seq_count - dev->vid_out_seq_start;
184 dev->vbi_out_seq_count = dev->out_seq_count - dev->vbi_out_seq_start;
186 vivid_thread_vid_out_tick(dev);
187 mutex_unlock(&dev->mutex);
196 jiffies_since_start = jiffies - dev->jiffies_vid_out;
214 dprintk(dev, 1, "Video Output Thread End\n");
218 static void vivid_grab_controls(struct vivid_dev *dev, bool grab)
220 v4l2_ctrl_grab(dev->ctrl_has_crop_out, grab);
221 v4l2_ctrl_grab(dev->ctrl_has_compose_out, grab);
222 v4l2_ctrl_grab(dev->ctrl_has_scaler_out, grab);
223 v4l2_ctrl_grab(dev->ctrl_tx_mode, grab);
224 v4l2_ctrl_grab(dev->ctrl_tx_rgb_range, grab);
227 int vivid_start_generating_vid_out(struct vivid_dev *dev, bool *pstreaming)
229 dprintk(dev, 1, "%s\n", __func__);
231 if (dev->kthread_vid_out) {
232 u32 seq_count = dev->out_seq_count + dev->seq_wrap * 128;
234 if (pstreaming == &dev->vid_out_streaming)
235 dev->vid_out_seq_start = seq_count;
237 dev->vbi_out_seq_start = seq_count;
243 dev->jiffies_vid_out = jiffies;
244 dev->vid_out_seq_start = dev->seq_wrap * 128;
245 dev->vbi_out_seq_start = dev->seq_wrap * 128;
247 dev->kthread_vid_out = kthread_run(vivid_thread_vid_out, dev,
248 "%s-vid-out", dev->v4l2_dev.name);
250 if (IS_ERR(dev->kthread_vid_out)) {
251 v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n");
252 return PTR_ERR(dev->kthread_vid_out);
255 vivid_grab_controls(dev, true);
257 dprintk(dev, 1, "returning from %s\n", __func__);
261 void vivid_stop_generating_vid_out(struct vivid_dev *dev, bool *pstreaming)
263 dprintk(dev, 1, "%s\n", __func__);
265 if (dev->kthread_vid_out == NULL)
269 if (pstreaming == &dev->vid_out_streaming) {
271 while (!list_empty(&dev->vid_out_active)) {
274 buf = list_entry(dev->vid_out_active.next,
278 dprintk(dev, 2, "vid_out buffer %d done\n",
283 if (pstreaming == &dev->vbi_out_streaming) {
284 while (!list_empty(&dev->vbi_out_active)) {
287 buf = list_entry(dev->vbi_out_active.next,
291 dprintk(dev, 2, "vbi_out buffer %d done\n",
296 if (dev->vid_out_streaming || dev->vbi_out_streaming)
300 vivid_grab_controls(dev, false);
301 mutex_unlock(&dev->mutex);
302 kthread_stop(dev->kthread_vid_out);
303 dev->kthread_vid_out = NULL;
304 mutex_lock(&dev->mutex);