vlc | branch: master | Laurent Aimar <[email protected]> | Fri May 25 16:38:01 2012 +0200| [67e3c15bda9f3cf3be729771a7b24ff12f9ff3b1] | committer: Laurent Aimar
Use the same algo for I420 and I422 way when deinterlacing using 'discard' mode. The code used for I422 was a mix of a simplified bob (luma) and discard (chroma). > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=67e3c15bda9f3cf3be729771a7b24ff12f9ff3b1 --- modules/video_filter/deinterlace/algo_basic.c | 50 +++--------------------- modules/video_filter/deinterlace/algo_basic.h | 4 +- modules/video_filter/deinterlace/deinterlace.c | 13 +++--- modules/video_filter/deinterlace/deinterlace.h | 4 +- 4 files changed, 12 insertions(+), 59 deletions(-) diff --git a/modules/video_filter/deinterlace/algo_basic.c b/modules/video_filter/deinterlace/algo_basic.c index 3436356..3dd9097 100644 --- a/modules/video_filter/deinterlace/algo_basic.c +++ b/modules/video_filter/deinterlace/algo_basic.c @@ -42,8 +42,7 @@ * RenderDiscard: only keep TOP or BOTTOM field, discard the other. *****************************************************************************/ -void RenderDiscard( filter_t *p_filter, - picture_t *p_outpic, picture_t *p_pic, int i_field ) +void RenderDiscard( picture_t *p_outpic, picture_t *p_pic, int i_field ) { int i_plane; @@ -51,7 +50,6 @@ void RenderDiscard( filter_t *p_filter, for( i_plane = 0 ; i_plane < p_pic->i_planes ; i_plane++ ) { uint8_t *p_in, *p_out_end, *p_out; - int i_increment; p_in = p_pic->p[i_plane].p_pixels + i_field * p_pic->p[i_plane].i_pitch; @@ -60,50 +58,12 @@ void RenderDiscard( filter_t *p_filter, p_out_end = p_out + p_outpic->p[i_plane].i_pitch * p_outpic->p[i_plane].i_visible_lines; - switch( p_filter->fmt_in.video.i_chroma ) + for( ; p_out < p_out_end ; ) { - case VLC_CODEC_I420: - case VLC_CODEC_J420: - case VLC_CODEC_YV12: - - for( ; p_out < p_out_end ; ) - { - vlc_memcpy( p_out, p_in, p_pic->p[i_plane].i_pitch ); - - p_out += p_outpic->p[i_plane].i_pitch; - p_in += 2 * p_pic->p[i_plane].i_pitch; - } - break; - - case VLC_CODEC_I422: - case VLC_CODEC_J422: - - i_increment = 2 * p_pic->p[i_plane].i_pitch; - - if( i_plane == Y_PLANE ) - { - for( ; p_out < p_out_end ; ) - { - vlc_memcpy( p_out, p_in, p_pic->p[i_plane].i_pitch ); - p_out += p_outpic->p[i_plane].i_pitch; - vlc_memcpy( p_out, p_in, p_pic->p[i_plane].i_pitch ); - p_out += p_outpic->p[i_plane].i_pitch; - p_in += i_increment; - } - } - else - { - for( ; p_out < p_out_end ; ) - { - vlc_memcpy( p_out, p_in, p_pic->p[i_plane].i_pitch ); - p_out += p_outpic->p[i_plane].i_pitch; - p_in += i_increment; - } - } - break; + vlc_memcpy( p_out, p_in, p_pic->p[i_plane].i_pitch ); - default: - break; + p_out += p_outpic->p[i_plane].i_pitch; + p_in += 2 * p_pic->p[i_plane].i_pitch; } } } diff --git a/modules/video_filter/deinterlace/algo_basic.h b/modules/video_filter/deinterlace/algo_basic.h index 4923948..cd1634f 100644 --- a/modules/video_filter/deinterlace/algo_basic.h +++ b/modules/video_filter/deinterlace/algo_basic.h @@ -44,15 +44,13 @@ struct picture_t; * * For a 2x (framerate-doubling) near-equivalent, see RenderBob(). * - * @param p_filter The filter instance. Must be non-NULL. * @param p_outpic Output frame. Must be allocated by caller. * @param p_pic Input frame. Must exist. * @param i_field Keep which field? 0 = top field, 1 = bottom field. * @see RenderBob() * @see Deinterlace() */ -void RenderDiscard( filter_t *p_filter, - picture_t *p_outpic, picture_t *p_pic, int i_field ); +void RenderDiscard( picture_t *p_outpic, picture_t *p_pic, int i_field ); /** * RenderBob: basic framerate doubler. diff --git a/modules/video_filter/deinterlace/deinterlace.c b/modules/video_filter/deinterlace/deinterlace.c index 60b5f45..dcdacf5 100644 --- a/modules/video_filter/deinterlace/deinterlace.c +++ b/modules/video_filter/deinterlace/deinterlace.c @@ -135,8 +135,7 @@ static const char *const ppsz_filter_options[] = { * SetFilterMethod: setup the deinterlace method to use. *****************************************************************************/ -void SetFilterMethod( filter_t *p_filter, const char *psz_method, - vlc_fourcc_t i_chroma ) +void SetFilterMethod( filter_t *p_filter, const char *psz_method ) { filter_sys_t *p_sys = p_filter->p_sys; @@ -202,12 +201,9 @@ void SetFilterMethod( filter_t *p_filter, const char *psz_method, } else if( !strcmp( psz_method, "discard" ) ) { - const bool b_i422 = i_chroma == VLC_CODEC_I422 || - i_chroma == VLC_CODEC_J422; - p_sys->i_mode = DEINTERLACE_DISCARD; p_sys->b_double_rate = false; - p_sys->b_half_height = !b_i422; + p_sys->b_half_height = true; p_sys->b_use_frame_history = false; } else @@ -257,6 +253,7 @@ void GetOutputFormat( filter_t *p_filter, case DEINTERLACE_YADIF2X: case DEINTERLACE_PHOSPHOR: case DEINTERLACE_IVTC: + case DEINTERLACE_DISCARD: p_dst->i_chroma = p_src->i_chroma; break; default: @@ -459,7 +456,7 @@ picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic ) switch( p_sys->i_mode ) { case DEINTERLACE_DISCARD: - RenderDiscard( p_filter, p_dst[0], p_pic, 0 ); + RenderDiscard( p_dst[0], p_pic, 0 ); break; case DEINTERLACE_BOB: @@ -700,7 +697,7 @@ int Open( vlc_object_t *p_this ) p_filter->p_cfg ); char *psz_mode = var_GetNonEmptyString( p_filter, FILTER_CFG_PREFIX "mode" ); - SetFilterMethod( p_filter, psz_mode, p_filter->fmt_in.video.i_chroma ); + SetFilterMethod( p_filter, psz_mode ); free( psz_mode ); if( p_sys->i_mode == DEINTERLACE_PHOSPHOR ) diff --git a/modules/video_filter/deinterlace/deinterlace.h b/modules/video_filter/deinterlace/deinterlace.h index 844a59d..a0b55ce 100644 --- a/modules/video_filter/deinterlace/deinterlace.h +++ b/modules/video_filter/deinterlace/deinterlace.h @@ -130,11 +130,9 @@ struct filter_sys_t * * @param p_filter The filter instance. * @param psz_method Desired method. See mode_list for available choices. - * @param i_chroma Input chroma. Set this to p_filter->fmt_in.video.i_chroma. * @see mode_list */ -void SetFilterMethod( filter_t *p_filter, const char *psz_method, - vlc_fourcc_t i_chroma ); +void SetFilterMethod( filter_t *p_filter, const char *psz_method ); /** * Get the output video format of the chosen deinterlace method _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
