Commit 9e0df402 authored by Ian Armstrong's avatar Ian Armstrong Committed by Mauro Carvalho Chehab

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: default avatarIan Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 59fc7f52
...@@ -116,7 +116,7 @@ static int dec_yuv_buffers = IVTV_DEFAULT_DEC_YUV_BUFFERS; ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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) ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment