[media] vivid: add support for reduced fps in video out
authorPrashant Laddha <prladdha@cisco.com>
Tue, 22 Sep 2015 14:27:29 +0000 (11:27 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 17 Nov 2015 17:05:40 +0000 (15:05 -0200)
If reduced fps flag is set then check if other necessary conditions
are true for the given bt timing. If yes, then reduce the frame rate.
For vivid transmitter, timeperframe_vid_out controls the frame rate.
Adjusting the timeperframe_vid_out by scaling down pixel clock by
factor of 1000 / 1001.

Signed-off-by: Prashant Laddha <prladdha@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/vivid/vivid-vid-out.c

index b77acb6..db645ab 100644 (file)
@@ -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;