[vlc-commits] video_converter: i420_rgb: handle missing RGB masks
Francois Cartegnie
git at videolan.org
Tue Sep 25 16:35:01 CEST 2018
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Sep 25 13:40:22 2018 +0200| [cff37e09134aabd260e366003b4fa664a0796468] | committer: Francois Cartegnie
video_converter: i420_rgb: handle missing RGB masks
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cff37e09134aabd260e366003b4fa664a0796468
---
modules/video_chroma/i420_rgb.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/modules/video_chroma/i420_rgb.c b/modules/video_chroma/i420_rgb.c
index 9f70694fe5..b7752a7122 100644
--- a/modules/video_chroma/i420_rgb.c
+++ b/modules/video_chroma/i420_rgb.c
@@ -46,7 +46,7 @@ static picture_t *I420_RGB16_Filter( filter_t *, picture_t * );
static picture_t *I420_RGB32_Filter( filter_t *, picture_t * );
static void SetGammaTable( int *pi_table, double f_gamma );
-static void SetYUV( filter_t * );
+static void SetYUV( filter_t *, const video_format_t * );
static void Set8bppPalette( filter_t *, uint8_t * );
#else
static picture_t *I420_R5G5B5_Filter( filter_t *, picture_t * );
@@ -61,12 +61,12 @@ static picture_t *I420_A8B8G8R8_Filter( filter_t *, picture_t * );
* RGB2PIXEL: assemble RGB components to a pixel value, returns a uint32_t
*****************************************************************************/
#define RGB2PIXEL( p_filter, i_r, i_g, i_b ) \
- (((((uint32_t)i_r) >> p_filter->fmt_out.video.i_rrshift) \
- << p_filter->fmt_out.video.i_lrshift) \
- | ((((uint32_t)i_g) >> p_filter->fmt_out.video.i_rgshift) \
- << p_filter->fmt_out.video.i_lgshift) \
- | ((((uint32_t)i_b) >> p_filter->fmt_out.video.i_rbshift) \
- << p_filter->fmt_out.video.i_lbshift))
+ (((((uint32_t)i_r) >> vfmt->i_rrshift) \
+ << vfmt->i_lrshift) \
+ | ((((uint32_t)i_g) >> vfmt->i_rgshift) \
+ << vfmt->i_lgshift) \
+ | ((((uint32_t)i_b) >> vfmt->i_rbshift) \
+ << vfmt->i_lbshift))
/*****************************************************************************
* Module descriptor.
@@ -266,7 +266,14 @@ static int Activate( vlc_object_t *p_this )
return -1;
}
- SetYUV( p_filter );
+ video_format_t vfmt;
+ video_format_Init( &vfmt, p_filter->fmt_out.video.i_chroma );
+ video_format_Copy( &vfmt, &p_filter->fmt_out.video );
+ if( !vfmt.i_bmask || !vfmt.i_gmask || !vfmt.i_bmask )
+ msg_Warn( p_filter, "source did not set proper target RGB masks, using default" );
+ video_format_FixRgb( &vfmt );
+ SetYUV( p_filter, &vfmt );
+ video_format_Clean( &vfmt );
#endif
return 0;
@@ -324,7 +331,7 @@ static void SetGammaTable( int *pi_table, double f_gamma )
/*****************************************************************************
* SetYUV: compute tables and set function pointers
*****************************************************************************/
-static void SetYUV( filter_t *p_filter )
+static void SetYUV( filter_t *p_filter, const video_format_t *vfmt )
{
int pi_gamma[256]; /* gamma table */
volatile int i_index; /* index in tables */
More information about the vlc-commits
mailing list