Lines Matching refs:dev

102 	struct vivid_dev *dev = vb2_get_drv_priv(vq);  in vid_cap_queue_setup()  local
103 unsigned buffers = tpg_g_buffers(&dev->tpg); in vid_cap_queue_setup()
104 unsigned h = dev->fmt_cap_rect.height; in vid_cap_queue_setup()
107 if (dev->field_cap == V4L2_FIELD_ALTERNATE) { in vid_cap_queue_setup()
116 if (dev->queue_setup_error) { in vid_cap_queue_setup()
121 dev->queue_setup_error = false; in vid_cap_queue_setup()
140 vfmt = vivid_get_format(dev, mp->pixelformat); in vid_cap_queue_setup()
143 if (sizes[p] < tpg_g_line_width(&dev->tpg, p) * h + in vid_cap_queue_setup()
149 sizes[p] = tpg_g_line_width(&dev->tpg, p) * h + in vid_cap_queue_setup()
150 dev->fmt_cap->data_offset[p]; in vid_cap_queue_setup()
163 dprintk(dev, 1, "%s: count=%d\n", __func__, *nbuffers); in vid_cap_queue_setup()
165 dprintk(dev, 1, "%s: size[%u]=%u\n", __func__, p, sizes[p]); in vid_cap_queue_setup()
172 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in vid_cap_buf_prepare() local
174 unsigned buffers = tpg_g_buffers(&dev->tpg); in vid_cap_buf_prepare()
177 dprintk(dev, 1, "%s\n", __func__); in vid_cap_buf_prepare()
179 if (WARN_ON(NULL == dev->fmt_cap)) in vid_cap_buf_prepare()
182 if (dev->buf_prepare_error) { in vid_cap_buf_prepare()
187 dev->buf_prepare_error = false; in vid_cap_buf_prepare()
191 size = tpg_g_line_width(&dev->tpg, p) * dev->fmt_cap_rect.height + in vid_cap_buf_prepare()
192 dev->fmt_cap->data_offset[p]; in vid_cap_buf_prepare()
195 dprintk(dev, 1, "%s data will not fit into plane %u (%lu < %lu)\n", in vid_cap_buf_prepare()
201 vb->v4l2_planes[p].data_offset = dev->fmt_cap->data_offset[p]; in vid_cap_buf_prepare()
209 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in vid_cap_buf_finish() local
214 if (!vivid_is_sdtv_cap(dev)) in vid_cap_buf_finish()
222 if (dev->std_cap & V4L2_STD_525_60) in vid_cap_buf_finish()
234 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in vid_cap_buf_queue() local
237 dprintk(dev, 1, "%s\n", __func__); in vid_cap_buf_queue()
239 spin_lock(&dev->slock); in vid_cap_buf_queue()
240 list_add_tail(&buf->list, &dev->vid_cap_active); in vid_cap_buf_queue()
241 spin_unlock(&dev->slock); in vid_cap_buf_queue()
246 struct vivid_dev *dev = vb2_get_drv_priv(vq); in vid_cap_start_streaming() local
250 if (vb2_is_streaming(&dev->vb_vid_out_q)) in vid_cap_start_streaming()
251 dev->can_loop_video = vivid_vid_can_loop(dev); in vid_cap_start_streaming()
253 if (dev->kthread_vid_cap) in vid_cap_start_streaming()
256 dev->vid_cap_seq_count = 0; in vid_cap_start_streaming()
257 dprintk(dev, 1, "%s\n", __func__); in vid_cap_start_streaming()
259 dev->must_blank[i] = tpg_g_perc_fill(&dev->tpg) < 100; in vid_cap_start_streaming()
260 if (dev->start_streaming_error) { in vid_cap_start_streaming()
261 dev->start_streaming_error = false; in vid_cap_start_streaming()
264 err = vivid_start_generating_vid_cap(dev, &dev->vid_cap_streaming); in vid_cap_start_streaming()
269 list_for_each_entry_safe(buf, tmp, &dev->vid_cap_active, list) { in vid_cap_start_streaming()
280 struct vivid_dev *dev = vb2_get_drv_priv(vq); in vid_cap_stop_streaming() local
282 dprintk(dev, 1, "%s\n", __func__); in vid_cap_stop_streaming()
283 vivid_stop_generating_vid_cap(dev, &dev->vid_cap_streaming); in vid_cap_stop_streaming()
284 dev->can_loop_video = false; in vid_cap_stop_streaming()
303 void vivid_update_quality(struct vivid_dev *dev) in vivid_update_quality() argument
307 if (dev->loop_video && (vivid_is_svid_cap(dev) || vivid_is_hdmi_cap(dev))) { in vivid_update_quality()
312 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); in vivid_update_quality()
315 if (vivid_is_hdmi_cap(dev) && VIVID_INVALID_SIGNAL(dev->dv_timings_signal_mode)) { in vivid_update_quality()
316 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); in vivid_update_quality()
319 if (vivid_is_sdtv_cap(dev) && VIVID_INVALID_SIGNAL(dev->std_signal_mode)) { in vivid_update_quality()
320 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); in vivid_update_quality()
323 if (!vivid_is_tv_cap(dev)) { in vivid_update_quality()
324 tpg_s_quality(&dev->tpg, TPG_QUAL_COLOR, 0); in vivid_update_quality()
334 freq_modulus = (dev->tv_freq - 676 /* (43.25-1) * 16 */) % (6 * 16); in vivid_update_quality()
336 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, in vivid_update_quality()
337 next_pseudo_random32(dev->tv_freq ^ 0x55) & 0x3f); in vivid_update_quality()
341 tpg_s_quality(&dev->tpg, TPG_QUAL_GRAY, 0); in vivid_update_quality()
343 tpg_s_quality(&dev->tpg, TPG_QUAL_COLOR, 0); in vivid_update_quality()
349 static enum tpg_quality vivid_get_quality(struct vivid_dev *dev, s32 *afc) in vivid_get_quality() argument
355 if (tpg_g_quality(&dev->tpg) == TPG_QUAL_COLOR || in vivid_get_quality()
356 tpg_g_quality(&dev->tpg) == TPG_QUAL_NOISE) in vivid_get_quality()
357 return tpg_g_quality(&dev->tpg); in vivid_get_quality()
365 freq_modulus = (dev->tv_freq - 676 /* (43.25-1) * 16 */) % (6 * 16); in vivid_get_quality()
371 enum tpg_video_aspect vivid_get_video_aspect(const struct vivid_dev *dev) in vivid_get_video_aspect() argument
373 if (vivid_is_sdtv_cap(dev)) in vivid_get_video_aspect()
374 return dev->std_aspect_ratio; in vivid_get_video_aspect()
376 if (vivid_is_hdmi_cap(dev)) in vivid_get_video_aspect()
377 return dev->dv_timings_aspect_ratio; in vivid_get_video_aspect()
382 static enum tpg_pixel_aspect vivid_get_pixel_aspect(const struct vivid_dev *dev) in vivid_get_pixel_aspect() argument
384 if (vivid_is_sdtv_cap(dev)) in vivid_get_pixel_aspect()
385 return (dev->std_cap & V4L2_STD_525_60) ? in vivid_get_pixel_aspect()
388 if (vivid_is_hdmi_cap(dev) && in vivid_get_pixel_aspect()
389 dev->src_rect.width == 720 && dev->src_rect.height <= 576) in vivid_get_pixel_aspect()
390 return dev->src_rect.height == 480 ? in vivid_get_pixel_aspect()
400 void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls) in vivid_update_format_cap() argument
402 struct v4l2_bt_timings *bt = &dev->dv_timings_cap.bt; in vivid_update_format_cap()
405 switch (dev->input_type[dev->input]) { in vivid_update_format_cap()
408 dev->src_rect.width = webcam_sizes[dev->webcam_size_idx].width; in vivid_update_format_cap()
409 dev->src_rect.height = webcam_sizes[dev->webcam_size_idx].height; in vivid_update_format_cap()
410 dev->timeperframe_vid_cap = webcam_intervals[dev->webcam_ival_idx]; in vivid_update_format_cap()
411 dev->field_cap = V4L2_FIELD_NONE; in vivid_update_format_cap()
412 tpg_s_rgb_range(&dev->tpg, V4L2_DV_RGB_RANGE_AUTO); in vivid_update_format_cap()
416 dev->field_cap = dev->tv_field_cap; in vivid_update_format_cap()
417 dev->src_rect.width = 720; in vivid_update_format_cap()
418 if (dev->std_cap & V4L2_STD_525_60) { in vivid_update_format_cap()
419 dev->src_rect.height = 480; in vivid_update_format_cap()
420 dev->timeperframe_vid_cap = (struct v4l2_fract) { 1001, 30000 }; in vivid_update_format_cap()
421 dev->service_set_cap = V4L2_SLICED_CAPTION_525; in vivid_update_format_cap()
423 dev->src_rect.height = 576; in vivid_update_format_cap()
424 dev->timeperframe_vid_cap = (struct v4l2_fract) { 1000, 25000 }; in vivid_update_format_cap()
425 dev->service_set_cap = V4L2_SLICED_WSS_625 | V4L2_SLICED_TELETEXT_B; in vivid_update_format_cap()
427 tpg_s_rgb_range(&dev->tpg, V4L2_DV_RGB_RANGE_AUTO); in vivid_update_format_cap()
430 dev->src_rect.width = bt->width; in vivid_update_format_cap()
431 dev->src_rect.height = bt->height; in vivid_update_format_cap()
433 dev->timeperframe_vid_cap = (struct v4l2_fract) { in vivid_update_format_cap()
437 dev->field_cap = V4L2_FIELD_ALTERNATE; in vivid_update_format_cap()
439 dev->field_cap = V4L2_FIELD_NONE; in vivid_update_format_cap()
445 if (keep_controls || !dev->colorspace) in vivid_update_format_cap()
449 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); in vivid_update_format_cap()
451 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_709); in vivid_update_format_cap()
452 v4l2_ctrl_s_ctrl(dev->real_rgb_range_cap, 1); in vivid_update_format_cap()
454 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); in vivid_update_format_cap()
455 v4l2_ctrl_s_ctrl(dev->real_rgb_range_cap, 0); in vivid_update_format_cap()
457 tpg_s_rgb_range(&dev->tpg, v4l2_ctrl_g_ctrl(dev->rgb_range_cap)); in vivid_update_format_cap()
460 vivid_update_quality(dev); in vivid_update_format_cap()
461 tpg_reset_source(&dev->tpg, dev->src_rect.width, dev->src_rect.height, dev->field_cap); in vivid_update_format_cap()
462 dev->crop_cap = dev->src_rect; in vivid_update_format_cap()
463 dev->crop_bounds_cap = dev->src_rect; in vivid_update_format_cap()
464 dev->compose_cap = dev->crop_cap; in vivid_update_format_cap()
465 if (V4L2_FIELD_HAS_T_OR_B(dev->field_cap)) in vivid_update_format_cap()
466 dev->compose_cap.height /= 2; in vivid_update_format_cap()
467 dev->fmt_cap_rect = dev->compose_cap; in vivid_update_format_cap()
468 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); in vivid_update_format_cap()
469 tpg_s_pixel_aspect(&dev->tpg, vivid_get_pixel_aspect(dev)); in vivid_update_format_cap()
470 tpg_update_mv_step(&dev->tpg); in vivid_update_format_cap()
474 static enum v4l2_field vivid_field_cap(struct vivid_dev *dev, enum v4l2_field field) in vivid_field_cap() argument
476 if (vivid_is_sdtv_cap(dev)) { in vivid_field_cap()
491 if (vivid_is_hdmi_cap(dev)) in vivid_field_cap()
492 return dev->dv_timings_cap.bt.interlaced ? V4L2_FIELD_ALTERNATE : in vivid_field_cap()
497 static unsigned vivid_colorspace_cap(struct vivid_dev *dev) in vivid_colorspace_cap() argument
499 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) in vivid_colorspace_cap()
500 return tpg_g_colorspace(&dev->tpg); in vivid_colorspace_cap()
501 return dev->colorspace_out; in vivid_colorspace_cap()
504 static unsigned vivid_ycbcr_enc_cap(struct vivid_dev *dev) in vivid_ycbcr_enc_cap() argument
506 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) in vivid_ycbcr_enc_cap()
507 return tpg_g_ycbcr_enc(&dev->tpg); in vivid_ycbcr_enc_cap()
508 return dev->ycbcr_enc_out; in vivid_ycbcr_enc_cap()
511 static unsigned vivid_quantization_cap(struct vivid_dev *dev) in vivid_quantization_cap() argument
513 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) in vivid_quantization_cap()
514 return tpg_g_quantization(&dev->tpg); in vivid_quantization_cap()
515 return dev->quantization_out; in vivid_quantization_cap()
521 struct vivid_dev *dev = video_drvdata(file); in vivid_g_fmt_vid_cap() local
525 mp->width = dev->fmt_cap_rect.width; in vivid_g_fmt_vid_cap()
526 mp->height = dev->fmt_cap_rect.height; in vivid_g_fmt_vid_cap()
527 mp->field = dev->field_cap; in vivid_g_fmt_vid_cap()
528 mp->pixelformat = dev->fmt_cap->fourcc; in vivid_g_fmt_vid_cap()
529 mp->colorspace = vivid_colorspace_cap(dev); in vivid_g_fmt_vid_cap()
530 mp->ycbcr_enc = vivid_ycbcr_enc_cap(dev); in vivid_g_fmt_vid_cap()
531 mp->quantization = vivid_quantization_cap(dev); in vivid_g_fmt_vid_cap()
532 mp->num_planes = dev->fmt_cap->buffers; in vivid_g_fmt_vid_cap()
534 mp->plane_fmt[p].bytesperline = tpg_g_bytesperline(&dev->tpg, p); in vivid_g_fmt_vid_cap()
536 tpg_g_line_width(&dev->tpg, p) * mp->height + in vivid_g_fmt_vid_cap()
537 dev->fmt_cap->data_offset[p]; in vivid_g_fmt_vid_cap()
547 struct vivid_dev *dev = video_drvdata(file); in vivid_try_fmt_vid_cap() local
554 fmt = vivid_get_format(dev, mp->pixelformat); in vivid_try_fmt_vid_cap()
556 dprintk(dev, 1, "Fourcc format (0x%08x) unknown.\n", in vivid_try_fmt_vid_cap()
559 fmt = vivid_get_format(dev, mp->pixelformat); in vivid_try_fmt_vid_cap()
562 mp->field = vivid_field_cap(dev, mp->field); in vivid_try_fmt_vid_cap()
563 if (vivid_is_webcam(dev)) { in vivid_try_fmt_vid_cap()
569 } else if (vivid_is_sdtv_cap(dev)) { in vivid_try_fmt_vid_cap()
571 h = (dev->std_cap & V4L2_STD_525_60) ? 480 : 576; in vivid_try_fmt_vid_cap()
573 w = dev->src_rect.width; in vivid_try_fmt_vid_cap()
574 h = dev->src_rect.height; in vivid_try_fmt_vid_cap()
578 if (vivid_is_webcam(dev) || in vivid_try_fmt_vid_cap()
579 (!dev->has_scaler_cap && !dev->has_crop_cap && !dev->has_compose_cap)) { in vivid_try_fmt_vid_cap()
587 if (dev->has_scaler_cap && !dev->has_compose_cap) { in vivid_try_fmt_vid_cap()
591 } else if (!dev->has_scaler_cap && dev->has_crop_cap && !dev->has_compose_cap) { in vivid_try_fmt_vid_cap()
592 rect_set_max_size(&r, &dev->src_rect); in vivid_try_fmt_vid_cap()
593 } else if (!dev->has_scaler_cap && !dev->has_crop_cap) { in vivid_try_fmt_vid_cap()
594 rect_set_min_size(&r, &dev->src_rect); in vivid_try_fmt_vid_cap()
613 pfmt[p].sizeimage = tpg_calc_line_width(&dev->tpg, p, pfmt[p].bytesperline) * in vivid_try_fmt_vid_cap()
617 mp->colorspace = vivid_colorspace_cap(dev); in vivid_try_fmt_vid_cap()
618 mp->ycbcr_enc = vivid_ycbcr_enc_cap(dev); in vivid_try_fmt_vid_cap()
619 mp->quantization = vivid_quantization_cap(dev); in vivid_try_fmt_vid_cap()
628 struct vivid_dev *dev = video_drvdata(file); in vivid_s_fmt_vid_cap() local
629 struct v4l2_rect *crop = &dev->crop_cap; in vivid_s_fmt_vid_cap()
630 struct v4l2_rect *compose = &dev->compose_cap; in vivid_s_fmt_vid_cap()
631 struct vb2_queue *q = &dev->vb_vid_cap_q; in vivid_s_fmt_vid_cap()
641 dprintk(dev, 1, "%s device busy\n", __func__); in vivid_s_fmt_vid_cap()
645 if (dev->overlay_cap_owner && dev->fb_cap.fmt.pixelformat != mp->pixelformat) { in vivid_s_fmt_vid_cap()
646 dprintk(dev, 1, "overlay is active, can't change pixelformat\n"); in vivid_s_fmt_vid_cap()
650 dev->fmt_cap = vivid_get_format(dev, mp->pixelformat); in vivid_s_fmt_vid_cap()
656 if (!vivid_is_webcam(dev) && in vivid_s_fmt_vid_cap()
657 (dev->has_scaler_cap || dev->has_crop_cap || dev->has_compose_cap)) { in vivid_s_fmt_vid_cap()
660 if (dev->has_scaler_cap) { in vivid_s_fmt_vid_cap()
661 if (dev->has_compose_cap) in vivid_s_fmt_vid_cap()
665 if (dev->has_crop_cap && !dev->has_compose_cap) { in vivid_s_fmt_vid_cap()
679 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_s_fmt_vid_cap()
680 } else if (dev->has_crop_cap) { in vivid_s_fmt_vid_cap()
694 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_s_fmt_vid_cap()
696 } else if (dev->has_crop_cap && !dev->has_compose_cap) { in vivid_s_fmt_vid_cap()
699 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_s_fmt_vid_cap()
703 } else if (!dev->has_crop_cap) { in vivid_s_fmt_vid_cap()
708 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_s_fmt_vid_cap()
716 } else if (vivid_is_webcam(dev)) { in vivid_s_fmt_vid_cap()
722 dev->webcam_size_idx = i; in vivid_s_fmt_vid_cap()
723 if (dev->webcam_ival_idx >= 2 * (3 - i)) in vivid_s_fmt_vid_cap()
724 dev->webcam_ival_idx = 2 * (3 - i) - 1; in vivid_s_fmt_vid_cap()
725 vivid_update_format_cap(dev, false); in vivid_s_fmt_vid_cap()
734 dev->fmt_cap_rect.width = mp->width; in vivid_s_fmt_vid_cap()
735 dev->fmt_cap_rect.height = mp->height; in vivid_s_fmt_vid_cap()
736 tpg_s_buf_height(&dev->tpg, mp->height); in vivid_s_fmt_vid_cap()
737 tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc); in vivid_s_fmt_vid_cap()
738 for (p = 0; p < tpg_g_buffers(&dev->tpg); p++) in vivid_s_fmt_vid_cap()
739 tpg_s_bytesperline(&dev->tpg, p, mp->plane_fmt[p].bytesperline); in vivid_s_fmt_vid_cap()
740 dev->field_cap = mp->field; in vivid_s_fmt_vid_cap()
741 if (dev->field_cap == V4L2_FIELD_ALTERNATE) in vivid_s_fmt_vid_cap()
742 tpg_s_field(&dev->tpg, V4L2_FIELD_TOP, true); in vivid_s_fmt_vid_cap()
744 tpg_s_field(&dev->tpg, dev->field_cap, false); in vivid_s_fmt_vid_cap()
745 tpg_s_crop_compose(&dev->tpg, &dev->crop_cap, &dev->compose_cap); in vivid_s_fmt_vid_cap()
746 if (vivid_is_sdtv_cap(dev)) in vivid_s_fmt_vid_cap()
747 dev->tv_field_cap = mp->field; in vivid_s_fmt_vid_cap()
748 tpg_update_mv_step(&dev->tpg); in vivid_s_fmt_vid_cap()
755 struct vivid_dev *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap_mplane() local
757 if (!dev->multiplanar) in vidioc_g_fmt_vid_cap_mplane()
765 struct vivid_dev *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap_mplane() local
767 if (!dev->multiplanar) in vidioc_try_fmt_vid_cap_mplane()
775 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap_mplane() local
777 if (!dev->multiplanar) in vidioc_s_fmt_vid_cap_mplane()
785 struct vivid_dev *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
787 if (dev->multiplanar) in vidioc_g_fmt_vid_cap()
795 struct vivid_dev *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
797 if (dev->multiplanar) in vidioc_try_fmt_vid_cap()
805 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
807 if (dev->multiplanar) in vidioc_s_fmt_vid_cap()
815 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_g_selection() local
817 if (!dev->has_crop_cap && !dev->has_compose_cap) in vivid_vid_cap_g_selection()
821 if (vivid_is_webcam(dev)) in vivid_vid_cap_g_selection()
827 if (!dev->has_crop_cap) in vivid_vid_cap_g_selection()
829 sel->r = dev->crop_cap; in vivid_vid_cap_g_selection()
833 if (!dev->has_crop_cap) in vivid_vid_cap_g_selection()
835 sel->r = dev->src_rect; in vivid_vid_cap_g_selection()
838 if (!dev->has_compose_cap) in vivid_vid_cap_g_selection()
843 if (!dev->has_compose_cap) in vivid_vid_cap_g_selection()
845 sel->r = dev->compose_cap; in vivid_vid_cap_g_selection()
848 if (!dev->has_compose_cap) in vivid_vid_cap_g_selection()
850 sel->r = dev->fmt_cap_rect; in vivid_vid_cap_g_selection()
860 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_s_selection() local
861 struct v4l2_rect *crop = &dev->crop_cap; in vivid_vid_cap_s_selection()
862 struct v4l2_rect *compose = &dev->compose_cap; in vivid_vid_cap_s_selection()
863 unsigned factor = V4L2_FIELD_HAS_T_OR_B(dev->field_cap) ? 2 : 1; in vivid_vid_cap_s_selection()
866 if (!dev->has_crop_cap && !dev->has_compose_cap) in vivid_vid_cap_s_selection()
870 if (vivid_is_webcam(dev)) in vivid_vid_cap_s_selection()
875 if (!dev->has_crop_cap) in vivid_vid_cap_s_selection()
881 rect_set_max_size(&s->r, &dev->src_rect); in vivid_vid_cap_s_selection()
882 rect_map_inside(&s->r, &dev->crop_bounds_cap); in vivid_vid_cap_s_selection()
885 if (dev->has_scaler_cap) { in vivid_vid_cap_s_selection()
886 struct v4l2_rect fmt = dev->fmt_cap_rect; in vivid_vid_cap_s_selection()
899 if (!dev->has_compose_cap) in vivid_vid_cap_s_selection()
901 if (!rect_same_size(&dev->fmt_cap_rect, &fmt) && in vivid_vid_cap_s_selection()
902 vb2_is_busy(&dev->vb_vid_cap_q)) in vivid_vid_cap_s_selection()
904 if (dev->has_compose_cap) { in vivid_vid_cap_s_selection()
908 dev->fmt_cap_rect = fmt; in vivid_vid_cap_s_selection()
909 tpg_s_buf_height(&dev->tpg, fmt.height); in vivid_vid_cap_s_selection()
910 } else if (dev->has_compose_cap) { in vivid_vid_cap_s_selection()
911 struct v4l2_rect fmt = dev->fmt_cap_rect; in vivid_vid_cap_s_selection()
914 if (!rect_same_size(&dev->fmt_cap_rect, &fmt) && in vivid_vid_cap_s_selection()
915 vb2_is_busy(&dev->vb_vid_cap_q)) in vivid_vid_cap_s_selection()
917 dev->fmt_cap_rect = fmt; in vivid_vid_cap_s_selection()
918 tpg_s_buf_height(&dev->tpg, fmt.height); in vivid_vid_cap_s_selection()
920 rect_map_inside(compose, &dev->fmt_cap_rect); in vivid_vid_cap_s_selection()
922 if (!rect_same_size(&s->r, &dev->fmt_cap_rect) && in vivid_vid_cap_s_selection()
923 vb2_is_busy(&dev->vb_vid_cap_q)) in vivid_vid_cap_s_selection()
925 rect_set_size_to(&dev->fmt_cap_rect, &s->r); in vivid_vid_cap_s_selection()
927 rect_map_inside(compose, &dev->fmt_cap_rect); in vivid_vid_cap_s_selection()
928 tpg_s_buf_height(&dev->tpg, dev->fmt_cap_rect.height); in vivid_vid_cap_s_selection()
935 if (!dev->has_compose_cap) in vivid_vid_cap_s_selection()
941 rect_set_max_size(&s->r, &dev->fmt_cap_rect); in vivid_vid_cap_s_selection()
942 if (dev->has_scaler_cap) { in vivid_vid_cap_s_selection()
945 dev->src_rect.width * MAX_ZOOM, in vivid_vid_cap_s_selection()
946 (dev->src_rect.height / factor) * MAX_ZOOM in vivid_vid_cap_s_selection()
950 if (dev->has_crop_cap) { in vivid_vid_cap_s_selection()
964 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_vid_cap_s_selection()
966 } else if (dev->has_crop_cap) { in vivid_vid_cap_s_selection()
969 rect_set_max_size(&s->r, &dev->src_rect); in vivid_vid_cap_s_selection()
971 rect_map_inside(crop, &dev->crop_bounds_cap); in vivid_vid_cap_s_selection()
975 rect_set_size_to(&s->r, &dev->src_rect); in vivid_vid_cap_s_selection()
978 rect_map_inside(&s->r, &dev->fmt_cap_rect); in vivid_vid_cap_s_selection()
979 if (dev->bitmap_cap && (compose->width != s->r.width || in vivid_vid_cap_s_selection()
981 kfree(dev->bitmap_cap); in vivid_vid_cap_s_selection()
982 dev->bitmap_cap = NULL; in vivid_vid_cap_s_selection()
990 tpg_s_crop_compose(&dev->tpg, crop, compose); in vivid_vid_cap_s_selection()
997 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_cropcap() local
1002 switch (vivid_get_pixel_aspect(dev)) { in vivid_vid_cap_cropcap()
1022 struct vivid_dev *dev = video_drvdata(file); in vidioc_enum_fmt_vid_overlay() local
1025 if (dev->multiplanar) in vidioc_enum_fmt_vid_overlay()
1041 struct vivid_dev *dev = video_drvdata(file); in vidioc_g_fmt_vid_overlay() local
1042 const struct v4l2_rect *compose = &dev->compose_cap; in vidioc_g_fmt_vid_overlay()
1046 if (dev->multiplanar) in vidioc_g_fmt_vid_overlay()
1049 win->w.top = dev->overlay_cap_top; in vidioc_g_fmt_vid_overlay()
1050 win->w.left = dev->overlay_cap_left; in vidioc_g_fmt_vid_overlay()
1053 win->field = dev->overlay_cap_field; in vidioc_g_fmt_vid_overlay()
1054 win->clipcount = dev->clipcount_cap; in vidioc_g_fmt_vid_overlay()
1055 if (clipcount > dev->clipcount_cap) in vidioc_g_fmt_vid_overlay()
1056 clipcount = dev->clipcount_cap; in vidioc_g_fmt_vid_overlay()
1057 if (dev->bitmap_cap == NULL) in vidioc_g_fmt_vid_overlay()
1060 if (copy_to_user(win->bitmap, dev->bitmap_cap, in vidioc_g_fmt_vid_overlay()
1065 if (copy_to_user(win->clips, dev->clips_cap, in vidioc_g_fmt_vid_overlay()
1066 clipcount * sizeof(dev->clips_cap[0]))) in vidioc_g_fmt_vid_overlay()
1075 struct vivid_dev *dev = video_drvdata(file); in vidioc_try_fmt_vid_overlay() local
1076 const struct v4l2_rect *compose = &dev->compose_cap; in vidioc_try_fmt_vid_overlay()
1080 if (dev->multiplanar) in vidioc_try_fmt_vid_overlay()
1084 -dev->fb_cap.fmt.width, dev->fb_cap.fmt.width); in vidioc_try_fmt_vid_overlay()
1086 -dev->fb_cap.fmt.height, dev->fb_cap.fmt.height); in vidioc_try_fmt_vid_overlay()
1098 if (copy_from_user(dev->try_clips_cap, win->clips, in vidioc_try_fmt_vid_overlay()
1099 win->clipcount * sizeof(dev->clips_cap[0]))) in vidioc_try_fmt_vid_overlay()
1102 struct v4l2_rect *r = &dev->try_clips_cap[i].c; in vidioc_try_fmt_vid_overlay()
1104 r->top = clamp_t(s32, r->top, 0, dev->fb_cap.fmt.height - 1); in vidioc_try_fmt_vid_overlay()
1105 r->height = clamp_t(s32, r->height, 1, dev->fb_cap.fmt.height - r->top); in vidioc_try_fmt_vid_overlay()
1106 r->left = clamp_t(u32, r->left, 0, dev->fb_cap.fmt.width - 1); in vidioc_try_fmt_vid_overlay()
1107 r->width = clamp_t(u32, r->width, 1, dev->fb_cap.fmt.width - r->left); in vidioc_try_fmt_vid_overlay()
1114 struct v4l2_rect *r1 = &dev->try_clips_cap[i].c; in vidioc_try_fmt_vid_overlay()
1117 struct v4l2_rect *r2 = &dev->try_clips_cap[j].c; in vidioc_try_fmt_vid_overlay()
1123 if (copy_to_user(win->clips, dev->try_clips_cap, in vidioc_try_fmt_vid_overlay()
1124 win->clipcount * sizeof(dev->clips_cap[0]))) in vidioc_try_fmt_vid_overlay()
1133 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_fmt_vid_overlay() local
1134 const struct v4l2_rect *compose = &dev->compose_cap; in vidioc_s_fmt_vid_overlay()
1138 unsigned clips_size = win->clipcount * sizeof(dev->clips_cap[0]); in vidioc_s_fmt_vid_overlay()
1155 dev->overlay_cap_top = win->w.top; in vidioc_s_fmt_vid_overlay()
1156 dev->overlay_cap_left = win->w.left; in vidioc_s_fmt_vid_overlay()
1157 dev->overlay_cap_field = win->field; in vidioc_s_fmt_vid_overlay()
1158 vfree(dev->bitmap_cap); in vidioc_s_fmt_vid_overlay()
1159 dev->bitmap_cap = new_bitmap; in vidioc_s_fmt_vid_overlay()
1160 dev->clipcount_cap = win->clipcount; in vidioc_s_fmt_vid_overlay()
1161 if (dev->clipcount_cap) in vidioc_s_fmt_vid_overlay()
1162 memcpy(dev->clips_cap, dev->try_clips_cap, clips_size); in vidioc_s_fmt_vid_overlay()
1168 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_overlay() local
1170 if (dev->multiplanar) in vivid_vid_cap_overlay()
1173 if (i && dev->fb_vbase_cap == NULL) in vivid_vid_cap_overlay()
1176 if (i && dev->fb_cap.fmt.pixelformat != dev->fmt_cap->fourcc) { in vivid_vid_cap_overlay()
1177 dprintk(dev, 1, "mismatch between overlay and video capture pixelformats\n"); in vivid_vid_cap_overlay()
1181 if (dev->overlay_cap_owner && dev->overlay_cap_owner != fh) in vivid_vid_cap_overlay()
1183 dev->overlay_cap_owner = i ? fh : NULL; in vivid_vid_cap_overlay()
1190 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_g_fbuf() local
1192 if (dev->multiplanar) in vivid_vid_cap_g_fbuf()
1195 *a = dev->fb_cap; in vivid_vid_cap_g_fbuf()
1208 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_s_fbuf() local
1211 if (dev->multiplanar) in vivid_vid_cap_s_fbuf()
1217 if (dev->overlay_cap_owner) in vivid_vid_cap_s_fbuf()
1221 dev->fb_cap.base = NULL; in vivid_vid_cap_s_fbuf()
1222 dev->fb_vbase_cap = NULL; in vivid_vid_cap_s_fbuf()
1228 fmt = vivid_get_format(dev, a->fmt.pixelformat); in vivid_vid_cap_s_fbuf()
1236 dev->fb_vbase_cap = phys_to_virt((unsigned long)a->base); in vivid_vid_cap_s_fbuf()
1237 dev->fb_cap = *a; in vivid_vid_cap_s_fbuf()
1238 dev->overlay_cap_left = clamp_t(int, dev->overlay_cap_left, in vivid_vid_cap_s_fbuf()
1239 -dev->fb_cap.fmt.width, dev->fb_cap.fmt.width); in vivid_vid_cap_s_fbuf()
1240 dev->overlay_cap_top = clamp_t(int, dev->overlay_cap_top, in vivid_vid_cap_s_fbuf()
1241 -dev->fb_cap.fmt.height, dev->fb_cap.fmt.height); in vivid_vid_cap_s_fbuf()
1253 struct vivid_dev *dev = video_drvdata(file); in vidioc_enum_input() local
1255 if (inp->index >= dev->num_inputs) in vidioc_enum_input()
1259 switch (dev->input_type[inp->index]) { in vidioc_enum_input()
1262 dev->input_name_counter[inp->index]); in vidioc_enum_input()
1267 dev->input_name_counter[inp->index]); in vidioc_enum_input()
1270 if (dev->has_audio_inputs) in vidioc_enum_input()
1276 dev->input_name_counter[inp->index]); in vidioc_enum_input()
1278 if (dev->has_audio_inputs) in vidioc_enum_input()
1284 dev->input_name_counter[inp->index]); in vidioc_enum_input()
1286 if (dev->edid_blocks == 0 || in vidioc_enum_input()
1287 dev->dv_timings_signal_mode == NO_SIGNAL) in vidioc_enum_input()
1289 else if (dev->dv_timings_signal_mode == NO_LOCK || in vidioc_enum_input()
1290 dev->dv_timings_signal_mode == OUT_OF_RANGE) in vidioc_enum_input()
1294 if (dev->sensor_hflip) in vidioc_enum_input()
1296 if (dev->sensor_vflip) in vidioc_enum_input()
1298 if (dev->input == inp->index && vivid_is_sdtv_cap(dev)) { in vidioc_enum_input()
1299 if (dev->std_signal_mode == NO_SIGNAL) { in vidioc_enum_input()
1301 } else if (dev->std_signal_mode == NO_LOCK) { in vidioc_enum_input()
1303 } else if (vivid_is_tv_cap(dev)) { in vidioc_enum_input()
1304 switch (tpg_g_quality(&dev->tpg)) { in vidioc_enum_input()
1321 struct vivid_dev *dev = video_drvdata(file); in vidioc_g_input() local
1323 *i = dev->input; in vidioc_g_input()
1329 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_input() local
1330 struct v4l2_bt_timings *bt = &dev->dv_timings_cap.bt; in vidioc_s_input()
1333 if (i >= dev->num_inputs) in vidioc_s_input()
1336 if (i == dev->input) in vidioc_s_input()
1339 if (vb2_is_busy(&dev->vb_vid_cap_q) || vb2_is_busy(&dev->vb_vbi_cap_q)) in vidioc_s_input()
1342 dev->input = i; in vidioc_s_input()
1343 dev->vid_cap_dev.tvnorms = 0; in vidioc_s_input()
1344 if (dev->input_type[i] == TV || dev->input_type[i] == SVID) { in vidioc_s_input()
1345 dev->tv_audio_input = (dev->input_type[i] == TV) ? 0 : 1; in vidioc_s_input()
1346 dev->vid_cap_dev.tvnorms = V4L2_STD_ALL; in vidioc_s_input()
1348 dev->vbi_cap_dev.tvnorms = dev->vid_cap_dev.tvnorms; in vidioc_s_input()
1349 vivid_update_format_cap(dev, false); in vidioc_s_input()
1351 if (dev->colorspace) { in vidioc_s_input()
1352 switch (dev->input_type[i]) { in vidioc_s_input()
1354 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); in vidioc_s_input()
1358 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); in vidioc_s_input()
1362 if (dev->src_rect.width == 720 && dev->src_rect.height <= 576) in vidioc_s_input()
1363 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); in vidioc_s_input()
1365 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_709); in vidioc_s_input()
1367 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); in vidioc_s_input()
1380 brightness = 128 * i + dev->input_brightness[i]; in vidioc_s_input()
1381 v4l2_ctrl_modify_range(dev->brightness, in vidioc_s_input()
1383 v4l2_ctrl_s_ctrl(dev->brightness, brightness); in vidioc_s_input()
1397 struct vivid_dev *dev = video_drvdata(file); in vidioc_g_audio() local
1399 if (!vivid_is_sdtv_cap(dev)) in vidioc_g_audio()
1401 *vin = vivid_audio_inputs[dev->tv_audio_input]; in vidioc_g_audio()
1407 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_audio() local
1409 if (!vivid_is_sdtv_cap(dev)) in vidioc_s_audio()
1413 dev->tv_audio_input = vin->index; in vidioc_s_audio()
1419 struct vivid_dev *dev = video_drvdata(file); in vivid_video_g_frequency() local
1423 vf->frequency = dev->tv_freq; in vivid_video_g_frequency()
1429 struct vivid_dev *dev = video_drvdata(file); in vivid_video_s_frequency() local
1433 dev->tv_freq = clamp_t(unsigned, vf->frequency, MIN_TV_FREQ, MAX_TV_FREQ); in vivid_video_s_frequency()
1434 if (vivid_is_tv_cap(dev)) in vivid_video_s_frequency()
1435 vivid_update_quality(dev); in vivid_video_s_frequency()
1441 struct vivid_dev *dev = video_drvdata(file); in vivid_video_s_tuner() local
1447 dev->tv_audmode = vt->audmode; in vivid_video_s_tuner()
1453 struct vivid_dev *dev = video_drvdata(file); in vivid_video_g_tuner() local
1461 vt->audmode = dev->tv_audmode; in vivid_video_g_tuner()
1464 qual = vivid_get_quality(dev, &vt->afc); in vivid_video_g_tuner()
1476 unsigned channel_nr = dev->tv_freq / (6 * 16); in vivid_video_g_tuner()
1477 unsigned options = (dev->std_cap & V4L2_STD_NTSC_M) ? 4 : 3; in vivid_video_g_tuner()
1487 if (dev->std_cap & V4L2_STD_NTSC_M) in vivid_video_g_tuner()
1543 struct vivid_dev *dev = video_drvdata(file); in vidioc_querystd() local
1545 if (!vivid_is_sdtv_cap(dev)) in vidioc_querystd()
1547 if (dev->std_signal_mode == NO_SIGNAL || in vidioc_querystd()
1548 dev->std_signal_mode == NO_LOCK) { in vidioc_querystd()
1552 if (vivid_is_tv_cap(dev) && tpg_g_quality(&dev->tpg) == TPG_QUAL_NOISE) { in vidioc_querystd()
1554 } else if (dev->std_signal_mode == CURRENT_STD) { in vidioc_querystd()
1555 *id = dev->std_cap; in vidioc_querystd()
1556 } else if (dev->std_signal_mode == SELECTED_STD) { in vidioc_querystd()
1557 *id = dev->query_std; in vidioc_querystd()
1559 *id = vivid_standard[dev->query_std_last]; in vidioc_querystd()
1560 dev->query_std_last = (dev->query_std_last + 1) % ARRAY_SIZE(vivid_standard); in vidioc_querystd()
1568 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_s_std() local
1570 if (!vivid_is_sdtv_cap(dev)) in vivid_vid_cap_s_std()
1572 if (dev->std_cap == id) in vivid_vid_cap_s_std()
1574 if (vb2_is_busy(&dev->vb_vid_cap_q) || vb2_is_busy(&dev->vb_vbi_cap_q)) in vivid_vid_cap_s_std()
1576 dev->std_cap = id; in vivid_vid_cap_s_std()
1577 vivid_update_format_cap(dev, false); in vivid_vid_cap_s_std()
1643 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_s_dv_timings() local
1645 if (!vivid_is_hdmi_cap(dev)) in vivid_vid_cap_s_dv_timings()
1652 if (v4l2_match_dv_timings(timings, &dev->dv_timings_cap, 0)) in vivid_vid_cap_s_dv_timings()
1654 if (vb2_is_busy(&dev->vb_vid_cap_q)) in vivid_vid_cap_s_dv_timings()
1657 dev->dv_timings_cap = *timings; in vivid_vid_cap_s_dv_timings()
1658 vivid_update_format_cap(dev, false); in vivid_vid_cap_s_dv_timings()
1665 struct vivid_dev *dev = video_drvdata(file); in vidioc_query_dv_timings() local
1667 if (!vivid_is_hdmi_cap(dev)) in vidioc_query_dv_timings()
1669 if (dev->dv_timings_signal_mode == NO_SIGNAL || in vidioc_query_dv_timings()
1670 dev->edid_blocks == 0) in vidioc_query_dv_timings()
1672 if (dev->dv_timings_signal_mode == NO_LOCK) in vidioc_query_dv_timings()
1674 if (dev->dv_timings_signal_mode == OUT_OF_RANGE) { in vidioc_query_dv_timings()
1678 if (dev->dv_timings_signal_mode == CURRENT_DV_TIMINGS) { in vidioc_query_dv_timings()
1679 *timings = dev->dv_timings_cap; in vidioc_query_dv_timings()
1680 } else if (dev->dv_timings_signal_mode == SELECTED_DV_TIMINGS) { in vidioc_query_dv_timings()
1681 *timings = v4l2_dv_timings_presets[dev->query_dv_timings]; in vidioc_query_dv_timings()
1683 *timings = v4l2_dv_timings_presets[dev->query_dv_timings_last]; in vidioc_query_dv_timings()
1684 dev->query_dv_timings_last = (dev->query_dv_timings_last + 1) % in vidioc_query_dv_timings()
1685 dev->query_dv_timings_size; in vidioc_query_dv_timings()
1693 struct vivid_dev *dev = video_drvdata(file); in vidioc_s_edid() local
1696 if (edid->pad >= dev->num_inputs) in vidioc_s_edid()
1698 if (dev->input_type[edid->pad] != HDMI || edid->start_block) in vidioc_s_edid()
1701 dev->edid_blocks = 0; in vidioc_s_edid()
1704 if (edid->blocks > dev->edid_max_blocks) { in vidioc_s_edid()
1705 edid->blocks = dev->edid_max_blocks; in vidioc_s_edid()
1708 dev->edid_blocks = edid->blocks; in vidioc_s_edid()
1709 memcpy(dev->edid, edid->edid, edid->blocks * 128); in vidioc_s_edid()
1716 struct vivid_dev *dev = video_drvdata(file); in vidioc_enum_framesizes() local
1718 if (!vivid_is_webcam(dev) && !dev->has_scaler_cap) in vidioc_enum_framesizes()
1720 if (vivid_get_format(dev, fsize->pixel_format) == NULL) in vidioc_enum_framesizes()
1722 if (vivid_is_webcam(dev)) { in vidioc_enum_framesizes()
1745 struct vivid_dev *dev = video_drvdata(file); in vidioc_enum_frameintervals() local
1749 fmt = vivid_get_format(dev, fival->pixel_format); in vidioc_enum_frameintervals()
1753 if (!vivid_is_webcam(dev)) { in vidioc_enum_frameintervals()
1761 fival->discrete = dev->timeperframe_vid_cap; in vidioc_enum_frameintervals()
1781 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_g_parm() local
1783 if (parm->type != (dev->multiplanar ? in vivid_vid_cap_g_parm()
1789 parm->parm.capture.timeperframe = dev->timeperframe_vid_cap; in vivid_vid_cap_g_parm()
1800 struct vivid_dev *dev = video_drvdata(file); in vivid_vid_cap_s_parm() local
1801 unsigned ival_sz = 2 * (3 - dev->webcam_size_idx); in vivid_vid_cap_s_parm()
1805 if (parm->type != (dev->multiplanar ? in vivid_vid_cap_s_parm()
1809 if (!vivid_is_webcam(dev)) in vivid_vid_cap_s_parm()
1821 dev->webcam_ival_idx = i; in vivid_vid_cap_s_parm()
1822 tpf = webcam_intervals[dev->webcam_ival_idx]; in vivid_vid_cap_s_parm()
1827 dev->cap_seq_resync = true; in vivid_vid_cap_s_parm()
1828 dev->timeperframe_vid_cap = tpf; in vivid_vid_cap_s_parm()