[media] vivid: add support for reduced frame rate in video capture

With this patch, vivid capture thread can now generate a video with
frame rate reduced by a factor of 1000 / 1001. This option can be
selected using a control Reduced Framerate from gui.

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>
This commit is contained in:
Prashant Laddha 2015-09-22 11:27:31 -03:00 committed by Mauro Carvalho Chehab
parent c79aa6aead
commit a41f9b419c
1 changed files with 9 additions and 1 deletions

View File

@ -405,6 +405,7 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)
{
struct v4l2_bt_timings *bt = &dev->dv_timings_cap.bt;
unsigned size;
u64 pixelclock;
switch (dev->input_type[dev->input]) {
case WEBCAM:
@ -434,8 +435,15 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)
dev->src_rect.width = bt->width;
dev->src_rect.height = bt->height;
size = V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt);
if (dev->reduced_fps && can_reduce_fps(bt)) {
pixelclock = div_u64(bt->pixelclock * 1000, 1001);
bt->flags |= V4L2_DV_FL_REDUCED_FPS;
} else {
pixelclock = bt->pixelclock;
bt->flags &= ~V4L2_DV_FL_REDUCED_FPS;
}
dev->timeperframe_vid_cap = (struct v4l2_fract) {
size / 100, (u32)bt->pixelclock / 100
size / 100, (u32)pixelclock / 100
};
if (bt->interlaced)
dev->field_cap = V4L2_FIELD_ALTERNATE;