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