V4L/DVB (5438): Fix ivtv yuv threshold handling
Modifies automatic mode selection for yuv playback. Behaviour is now that source video with a vertical resolution below that of the currently set broadcast mode will be treated as progressive. Video with a vertical resolution greater or equal to the current broadcast mode (up to 576 lines) will be treated as interlaced. Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
59fc7f5289
commit
9e0df402e6
@ -116,7 +116,7 @@ static int dec_yuv_buffers = IVTV_DEFAULT_DEC_YUV_BUFFERS;
|
|||||||
static int dec_vbi_buffers = IVTV_DEFAULT_DEC_VBI_BUFFERS;
|
static int dec_vbi_buffers = IVTV_DEFAULT_DEC_VBI_BUFFERS;
|
||||||
|
|
||||||
static int ivtv_yuv_mode = 0;
|
static int ivtv_yuv_mode = 0;
|
||||||
static int ivtv_yuv_threshold=480;
|
static int ivtv_yuv_threshold=-1;
|
||||||
static int ivtv_pci_latency = 1;
|
static int ivtv_pci_latency = 1;
|
||||||
|
|
||||||
int ivtv_debug = 0;
|
int ivtv_debug = 0;
|
||||||
|
@ -606,7 +606,6 @@ struct yuv_playback_info
|
|||||||
|
|
||||||
int lace_mode;
|
int lace_mode;
|
||||||
int lace_threshold;
|
int lace_threshold;
|
||||||
int lace_threshold_last;
|
|
||||||
int lace_sync_field;
|
int lace_sync_field;
|
||||||
|
|
||||||
atomic_t next_dma_frame;
|
atomic_t next_dma_frame;
|
||||||
|
@ -613,16 +613,19 @@ static void ivtv_yuv_handle_vertical(struct ivtv *itv, struct yuv_frame_info *wi
|
|||||||
}
|
}
|
||||||
|
|
||||||
itv->yuv_info.frame_interlaced_last = itv->yuv_info.frame_interlaced;
|
itv->yuv_info.frame_interlaced_last = itv->yuv_info.frame_interlaced;
|
||||||
itv->yuv_info.lace_threshold_last = itv->yuv_info.lace_threshold;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Modify the supplied coordinate information to fit the visible osd area */
|
/* Modify the supplied coordinate information to fit the visible osd area */
|
||||||
static u32 ivtv_yuv_window_setup (struct ivtv *itv, struct yuv_frame_info *window)
|
static u32 ivtv_yuv_window_setup (struct ivtv *itv, struct yuv_frame_info *window)
|
||||||
{
|
{
|
||||||
int osd_crop;
|
int osd_crop, lace_threshold;
|
||||||
u32 osd_scale;
|
u32 osd_scale;
|
||||||
u32 yuv_update = 0;
|
u32 yuv_update = 0;
|
||||||
|
|
||||||
|
lace_threshold = itv->yuv_info.lace_threshold;
|
||||||
|
if (lace_threshold < 0)
|
||||||
|
lace_threshold = itv->yuv_info.decode_height - 1;
|
||||||
|
|
||||||
/* Work out the lace settings */
|
/* Work out the lace settings */
|
||||||
switch (itv->yuv_info.lace_mode) {
|
switch (itv->yuv_info.lace_mode) {
|
||||||
case IVTV_YUV_MODE_PROGRESSIVE: /* Progressive mode */
|
case IVTV_YUV_MODE_PROGRESSIVE: /* Progressive mode */
|
||||||
@ -639,7 +642,7 @@ static u32 ivtv_yuv_window_setup (struct ivtv *itv, struct yuv_frame_info *windo
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IVTV_YUV_MODE_AUTO:
|
case IVTV_YUV_MODE_AUTO:
|
||||||
if (window->tru_h <= itv->yuv_info.lace_threshold || window->tru_h > 576 || window->tru_w > 720){
|
if (window->tru_h <= lace_threshold || window->tru_h > 576 || window->tru_w > 720){
|
||||||
itv->yuv_info.frame_interlaced = 0;
|
itv->yuv_info.frame_interlaced = 0;
|
||||||
if ((window->tru_h < 512) ||
|
if ((window->tru_h < 512) ||
|
||||||
(window->tru_h > 576 && window->tru_h < 1021) ||
|
(window->tru_h > 576 && window->tru_h < 1021) ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user