From: Laurent Aimar Date: Tue, 28 Jul 2009 20:50:28 +0000 (+0200) Subject: Fixed filter_*Blend rgb masks initialization. X-Git-Tag: 1.1.0-ff~4750 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=30086cdcb5559b0d2520dfece8fe7879995af4b4;p=vlc Fixed filter_*Blend rgb masks initialization. It fixes at least RGB blending with opengl on little indian arch. --- diff --git a/include/vlc_filter.h b/include/vlc_filter.h index a8a8a06d35..9ec22170bc 100644 --- a/include/vlc_filter.h +++ b/include/vlc_filter.h @@ -182,9 +182,12 @@ static inline block_t *filter_NewAudioBuffer( filter_t *p_filter, int i_size ) } /** - * It creates a blend filter + * It creates a blend filter. + * + * Only the chroma properties of the dest format is used (chroma + * type, rgb masks and shifts) */ -VLC_EXPORT( filter_t *, filter_NewBlend, ( vlc_object_t *, vlc_fourcc_t i_chroma_dst ) ); +VLC_EXPORT( filter_t *, filter_NewBlend, ( vlc_object_t *, const video_format_t *p_dst_chroma ) ); /** * It configures blend filter parameters that are allowed to changed diff --git a/modules/video_filter/logo.c b/modules/video_filter/logo.c index f8b2b14e56..ef7f06723b 100644 --- a/modules/video_filter/logo.c +++ b/modules/video_filter/logo.c @@ -243,7 +243,7 @@ static int OpenCommon( vlc_object_t *p_this, bool b_sub ) { p_sys->p_blend = filter_NewBlend( VLC_OBJECT(p_filter), - p_filter->fmt_in.i_codec ); + &p_filter->fmt_in ); if( !p_sys->p_blend ) { free( p_sys ); diff --git a/src/misc/filter.c b/src/misc/filter.c index 7ced511d9d..7359982285 100644 --- a/src/misc/filter.c +++ b/src/misc/filter.c @@ -30,7 +30,7 @@ #include filter_t *filter_NewBlend( vlc_object_t *p_this, - vlc_fourcc_t i_chroma_dst ) + const video_format_t *p_dst_chroma ) { filter_t *p_blend = vlc_custom_create( p_this, sizeof(*p_blend), VLC_OBJECT_GENERIC, "blend" ); @@ -42,7 +42,16 @@ filter_t *filter_NewBlend( vlc_object_t *p_this, es_format_Init( &p_blend->fmt_out, VIDEO_ES, 0 ); p_blend->fmt_out.i_codec = - p_blend->fmt_out.video.i_chroma = i_chroma_dst; + p_blend->fmt_out.video.i_chroma = p_dst_chroma->i_chroma; + p_blend->fmt_out.video.i_rmask = p_dst_chroma->i_rmask; + p_blend->fmt_out.video.i_gmask = p_dst_chroma->i_gmask; + p_blend->fmt_out.video.i_bmask = p_dst_chroma->i_bmask; + p_blend->fmt_out.video.i_rrshift= p_dst_chroma->i_rrshift; + p_blend->fmt_out.video.i_rgshift= p_dst_chroma->i_rgshift; + p_blend->fmt_out.video.i_rbshift= p_dst_chroma->i_rbshift; + p_blend->fmt_out.video.i_lrshift= p_dst_chroma->i_lrshift; + p_blend->fmt_out.video.i_lgshift= p_dst_chroma->i_lgshift; + p_blend->fmt_out.video.i_lbshift= p_dst_chroma->i_lbshift; /* The blend module will be loaded when needed with the real * input format */ diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index a7976fe119..9920b34a75 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -421,7 +421,7 @@ void spu_RenderSubpictures( spu_t *p_spu, /* Create the blending module */ if( !p_sys->p_blend ) - p_spu->p->p_blend = filter_NewBlend( VLC_OBJECT(p_spu), p_fmt_dst->i_chroma ); + p_spu->p->p_blend = filter_NewBlend( VLC_OBJECT(p_spu), p_fmt_dst ); /* Process all subpictures and regions (in the right order) */ for( unsigned int i_index = 0; i_index < i_subpicture; i_index++ )