X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fblend.c;h=f680f04415200c3ba5623403f7702bc0d4aa3d3b;hb=5ebacd11d10f9acc39afc0b3d41beb280eaac293;hp=96813781b117cfdcefeaf79fe9ee36f8c92baf6c;hpb=c0da24fe8dbdd5a0db10043940c85afb3b54b542;p=vlc diff --git a/modules/video_filter/blend.c b/modules/video_filter/blend.c index 96813781b1..f680f04415 100644 --- a/modules/video_filter/blend.c +++ b/modules/video_filter/blend.c @@ -25,7 +25,12 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include "vlc_filter.h" @@ -92,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(); @@ -129,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; @@ -141,7 +143,6 @@ static int OpenFilter( vlc_object_t *p_this ) (char *)&p_filter->fmt_in.video.i_chroma, (char *)&p_filter->fmt_out.video.i_chroma ); - return VLC_SUCCESS; } @@ -178,7 +179,7 @@ static void Blend( filter_t *p_filter, picture_t *p_dst, if( i_width <= 0 || i_height <= 0 ) return; #if 0 - printf( "chroma: %4.4s -> %4.4s\n", + msg_Dbg( p_filter, "chroma: %4.4s -> %4.4s\n", (char *)&p_filter->fmt_in.video.i_chroma, (char *)&p_filter->fmt_out.video.i_chroma ); #endif @@ -311,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 ) { @@ -318,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; @@ -329,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, @@ -356,7 +368,7 @@ static void BlendI420( filter_t *p_filter, picture_t *p_dst, uint8_t *p_src1_v, *p_src2_v, *p_dst_v; uint8_t *p_trans; int i_x, i_y, i_trans = 0; - vlc_bool_t b_even_scanline = i_y_offset % 2; + bool b_even_scanline = i_y_offset % 2; i_dst_pitch = p_dst->p[Y_PLANE].i_pitch; p_dst_y = p_dst->p[Y_PLANE].p_pixels + i_x_offset + @@ -591,11 +603,12 @@ static void BlendR24( filter_t *p_filter, picture_t *p_dst_pic, #define TRANS_BITS 8 if( (i_pix_pitch == 4) - && (((((int)p_dst)|((int)p_src1)|i_dst_pitch|i_src1_pitch) & 3) == 0) ) + && (((((intptr_t)p_dst)|((intptr_t)p_src1)|i_dst_pitch|i_src1_pitch) + & 3) == 0) ) { /* - ** if picture pixels are 32 bits long and lines addresses are 32 bit aligned, - ** optimize rendering + ** if picture pixels are 32 bits long and lines addresses are 32 bit + ** aligned, optimize rendering */ uint32_t *p32_dst = (uint32_t *)p_dst; uint32_t i32_dst_pitch = (uint32_t)(i_dst_pitch>>2); @@ -743,7 +756,7 @@ static void BlendR24( filter_t *p_filter, picture_t *p_dst_pic, /* Completely transparent. Don't change pixel */ continue; } - else + else { int i_pos = i_x * i_pix_pitch; if( i_trans == MAX_TRANS ) @@ -798,7 +811,7 @@ static void BlendYUVPacked( filter_t *p_filter, picture_t *p_dst_pic, uint8_t *p_src2_u, *p_src2_v; uint8_t *p_trans; int i_x, i_y, i_pix_pitch, i_trans = 0; - vlc_bool_t b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); + bool b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); int i_l_offset = 0, i_u_offset = 0, i_v_offset = 0; if( p_filter->fmt_out.video.i_chroma == VLC_FOURCC('Y','U','Y','2') ) @@ -936,7 +949,7 @@ static void BlendI420I420( filter_t *p_filter, picture_t *p_dst, uint8_t *p_src1_u, *p_src2_u, *p_dst_u; uint8_t *p_src1_v, *p_src2_v, *p_dst_v; int i_x, i_y; - vlc_bool_t b_even_scanline = i_y_offset % 2; + bool b_even_scanline = i_y_offset % 2; i_dst_pitch = p_dst->p[Y_PLANE].i_pitch; p_dst_y = p_dst->p[Y_PLANE].p_pixels + i_x_offset + @@ -1047,7 +1060,7 @@ static void BlendI420I420_no_alpha( filter_t *p_filter, picture_t *p_dst, uint8_t *p_src1_u, *p_src2_u, *p_dst_u; uint8_t *p_src1_v, *p_src2_v, *p_dst_v; int i_y; - vlc_bool_t b_even_scanline = i_y_offset % 2; + bool b_even_scanline = i_y_offset % 2; i_dst_pitch = p_dst->p[Y_PLANE].i_pitch; p_dst_y = p_dst->p[Y_PLANE].p_pixels + i_x_offset + @@ -1096,7 +1109,7 @@ static void BlendI420I420_no_alpha( filter_t *p_filter, picture_t *p_dst, p_src2_y += i_src2_pitch ) { /* Completely opaque. Completely overwrite underlying pixel */ - p_filter->p_libvlc->pf_memcpy( p_dst_y, p_src2_y, i_width ); + vlc_memcpy( p_dst_y, p_src2_y, i_width ); if( b_even_scanline ) { p_dst_u += i_dst_pitch/2; @@ -1106,8 +1119,8 @@ static void BlendI420I420_no_alpha( filter_t *p_filter, picture_t *p_dst, } else { - p_filter->p_libvlc->pf_memcpy( p_dst_u, p_src2_u, i_width/2 ); - p_filter->p_libvlc->pf_memcpy( p_dst_v, p_src2_v, i_width/2 ); + vlc_memcpy( p_dst_u, p_src2_u, i_width/2 ); + vlc_memcpy( p_dst_v, p_src2_v, i_width/2 ); } b_even_scanline = !b_even_scanline; if( i_y%2 == 1 ) @@ -1291,7 +1304,7 @@ static void BlendI420YUVPacked( filter_t *p_filter, picture_t *p_dst_pic, uint8_t *p_dst, *p_src1, *p_src2_y; uint8_t *p_src2_u, *p_src2_v; int i_x, i_y, i_pix_pitch; - vlc_bool_t b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); + bool b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); int i_l_offset = 0, i_u_offset = 0, i_v_offset = 0; if( p_filter->fmt_out.video.i_chroma == VLC_FOURCC('Y','U','Y','2') ) @@ -1408,7 +1421,7 @@ static void BlendPalI420( filter_t *p_filter, picture_t *p_dst, uint8_t *p_src1_u, *p_dst_u; uint8_t *p_src1_v, *p_dst_v; int i_x, i_y, i_trans; - vlc_bool_t b_even_scanline = i_y_offset % 2; + bool b_even_scanline = i_y_offset % 2; i_dst_pitch = p_dst->p[Y_PLANE].i_pitch; p_dst_y = p_dst->p[Y_PLANE].p_pixels + i_x_offset + @@ -1513,7 +1526,7 @@ static void BlendPalYUVPacked( filter_t *p_filter, picture_t *p_dst_pic, int i_src1_pitch, i_src2_pitch, i_dst_pitch; uint8_t *p_src1, *p_src2, *p_dst; int i_x, i_y, i_pix_pitch, i_trans; - vlc_bool_t b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); + bool b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); int i_l_offset = 0, i_u_offset = 0, i_v_offset = 0; if( p_filter->fmt_out.video.i_chroma == VLC_FOURCC('Y','U','Y','2') ) @@ -1742,7 +1755,7 @@ static void BlendRGBAI420( filter_t *p_filter, picture_t *p_dst, int i_x, i_y, i_trans; uint8_t y, u, v; - vlc_bool_t b_even_scanline = i_y_offset % 2; + bool b_even_scanline = i_y_offset % 2; i_dst_pitch = p_dst->p[Y_PLANE].i_pitch; p_dst_y = p_dst->p[Y_PLANE].p_pixels + i_x_offset + @@ -2012,7 +2025,7 @@ static void BlendRGBAYUVPacked( filter_t *p_filter, picture_t *p_dst_pic, uint8_t *p_dst, *p_src1, *p_src2; uint8_t *p_trans; int i_x, i_y, i_pix_pitch, i_trans; - vlc_bool_t b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); + bool b_even = !((i_x_offset + p_filter->fmt_out.video.i_x_offset)%2); int i_l_offset = 0, i_u_offset = 0, i_v_offset = 0; uint8_t y, u, v;