|
@@ -224,6 +224,7 @@ void vivid_update_format_out(struct vivid_dev *dev)
|
|
|
{
|
|
|
struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt;
|
|
|
unsigned size, p;
|
|
|
+ u64 pixelclock;
|
|
|
|
|
|
switch (dev->output_type[dev->output]) {
|
|
|
case SVID:
|
|
@@ -245,8 +246,14 @@ void vivid_update_format_out(struct vivid_dev *dev)
|
|
|
dev->sink_rect.width = bt->width;
|
|
|
dev->sink_rect.height = bt->height;
|
|
|
size = V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt);
|
|
|
+
|
|
|
+ if (can_reduce_fps(bt) && (bt->flags & V4L2_DV_FL_REDUCED_FPS))
|
|
|
+ pixelclock = div_u64(bt->pixelclock * 1000, 1001);
|
|
|
+ else
|
|
|
+ pixelclock = bt->pixelclock;
|
|
|
+
|
|
|
dev->timeperframe_vid_out = (struct v4l2_fract) {
|
|
|
- size / 100, (u32)bt->pixelclock / 100
|
|
|
+ size / 100, (u32)pixelclock / 100
|
|
|
};
|
|
|
if (bt->interlaced)
|
|
|
dev->field_out = V4L2_FIELD_ALTERNATE;
|