X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fblend.c;h=f680f04415200c3ba5623403f7702bc0d4aa3d3b;hb=90aa6fc5e9e425c6eb6f519224f2b7e868911d36;hp=9f04db0b5031341773d14f712caa894e3f67794d;hpb=5b55ee1bb0a0212b967f8f4a33824ffc6b7c7f09;p=vlc diff --git a/modules/video_filter/blend.c b/modules/video_filter/blend.c index 9f04db0b50..f680f04415 100644 --- a/modules/video_filter/blend.c +++ b/modules/video_filter/blend.c @@ -29,7 +29,8 @@ # include "config.h" #endif -#include +#include +#include #include #include "vlc_filter.h" @@ -96,7 +97,7 @@ static void BlendRGBAR24( filter_t *, picture_t *, picture_t *, picture_t *, * Module descriptor *****************************************************************************/ vlc_module_begin(); - set_description( _("Video pictures blending") ); + set_description( N_("Video pictures blending") ); set_capability( "video blending", 100 ); set_callbacks( OpenFilter, CloseFilter ); vlc_module_end(); @@ -133,10 +134,7 @@ static int OpenFilter( vlc_object_t *p_this ) /* Allocate the memory needed to store the decoder's structure */ if( ( p_filter->p_sys = p_sys = (filter_sys_t *)malloc(sizeof(filter_sys_t)) ) == NULL ) - { - msg_Err( p_filter, "out of memory" ); - return VLC_EGENERIC; - } + return VLC_ENOMEM; /* Misc init */ p_filter->pf_video_blend = Blend; @@ -314,6 +312,15 @@ static void Blend( filter_t *p_filter, picture_t *p_dst, /*********************************************************************** * Utils ***********************************************************************/ +static inline uint8_t vlc_uint8( int v ) +{ + if( v > 255 ) + return 255; + else if( v < 0 ) + return 0; + return v; +} + static inline void yuv_to_rgb( int *r, int *g, int *b, uint8_t y1, uint8_t u1, uint8_t v1 ) { @@ -321,7 +328,6 @@ static inline void yuv_to_rgb( int *r, int *g, int *b, # define SCALEBITS 10 # define ONE_HALF (1 << (SCALEBITS - 1)) # define FIX(x) ((int) ((x) * (1< 255) ? 255 : ((x) < 0) ? 0 : (x)); int y, cb, cr, r_add, g_add, b_add; @@ -332,9 +338,12 @@ static inline void yuv_to_rgb( int *r, int *g, int *b, - FIX(0.71414*255.0/224.0) * cr + ONE_HALF; b_add = FIX(1.77200*255.0/224.0) * cb + ONE_HALF; y = (y1 - 16) * FIX(255.0/219.0); - *r = CLAMP((y + r_add) >> SCALEBITS); - *g = CLAMP((y + g_add) >> SCALEBITS); - *b = CLAMP((y + b_add) >> SCALEBITS); + *r = vlc_uint8( (y + r_add) >> SCALEBITS ); + *g = vlc_uint8( (y + g_add) >> SCALEBITS ); + *b = vlc_uint8( (y + b_add) >> SCALEBITS ); +#undef FIX +#undef ONE_HALF +#undef SCALEBITS } static inline void rgb_to_yuv( uint8_t *y, uint8_t *u, uint8_t *v,