X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fvideo_filter%2Fmosaic.c;h=41b3a645f4f22749a8f4a2b286b080a2d438818a;hb=40a2f546e1dca36312916b391f64f96a438f0a37;hp=4a16f224ac364daf264c6dba0e1e6a124f588a29;hpb=a804eaa4782f3f8a384c19a223383be309e62023;p=vlc diff --git a/modules/video_filter/mosaic.c b/modules/video_filter/mosaic.c index 4a16f224ac..41b3a645f4 100644 --- a/modules/video_filter/mosaic.c +++ b/modules/video_filter/mosaic.c @@ -31,13 +31,12 @@ #include #include -#include #include #include /* INT_MAX */ -#include "vlc_filter.h" -#include "vlc_image.h" +#include +#include #include "mosaic.h" @@ -183,50 +182,50 @@ vlc_module_begin () set_callbacks( CreateFilter, DestroyFilter ) add_integer_with_range( CFG_PREFIX "alpha", 255, 0, 255, NULL, - ALPHA_TEXT, ALPHA_LONGTEXT, false ); + ALPHA_TEXT, ALPHA_LONGTEXT, false ) add_integer( CFG_PREFIX "height", 100, NULL, - HEIGHT_TEXT, HEIGHT_LONGTEXT, false ); + HEIGHT_TEXT, HEIGHT_LONGTEXT, false ) add_integer( CFG_PREFIX "width", 100, NULL, - WIDTH_TEXT, WIDTH_LONGTEXT, false ); + WIDTH_TEXT, WIDTH_LONGTEXT, false ) add_integer( CFG_PREFIX "align", 5, NULL, - ALIGN_TEXT, ALIGN_LONGTEXT, true); - change_integer_list( pi_align_values, ppsz_align_descriptions, NULL ); + ALIGN_TEXT, ALIGN_LONGTEXT, true) + change_integer_list( pi_align_values, ppsz_align_descriptions, NULL ) add_integer( CFG_PREFIX "xoffset", 0, NULL, - XOFFSET_TEXT, XOFFSET_LONGTEXT, true ); + XOFFSET_TEXT, XOFFSET_LONGTEXT, true ) add_integer( CFG_PREFIX "yoffset", 0, NULL, - YOFFSET_TEXT, YOFFSET_LONGTEXT, true ); + YOFFSET_TEXT, YOFFSET_LONGTEXT, true ) add_integer( CFG_PREFIX "borderw", 0, NULL, - BORDERW_TEXT, BORDERW_LONGTEXT, true ); + BORDERW_TEXT, BORDERW_LONGTEXT, true ) add_deprecated_alias( CFG_PREFIX "vborder" ) add_integer( CFG_PREFIX "borderh", 0, NULL, - BORDERH_TEXT, BORDERH_LONGTEXT, true ); + BORDERH_TEXT, BORDERH_LONGTEXT, true ) add_deprecated_alias( CFG_PREFIX "hborder" ) add_integer( CFG_PREFIX "position", 0, NULL, - POS_TEXT, POS_LONGTEXT, false ); - change_integer_list( pi_pos_values, ppsz_pos_descriptions, NULL ); + POS_TEXT, POS_LONGTEXT, false ) + change_integer_list( pi_pos_values, ppsz_pos_descriptions, NULL ) add_integer( CFG_PREFIX "rows", 2, NULL, - ROWS_TEXT, ROWS_LONGTEXT, false ); + ROWS_TEXT, ROWS_LONGTEXT, false ) add_integer( CFG_PREFIX "cols", 2, NULL, - COLS_TEXT, COLS_LONGTEXT, false ); + COLS_TEXT, COLS_LONGTEXT, false ) - add_bool( CFG_PREFIX "keep-aspect-ratio", 0, NULL, - AR_TEXT, AR_LONGTEXT, false ); - add_bool( CFG_PREFIX "keep-picture", 0, NULL, - KEEP_TEXT, KEEP_LONGTEXT, false ); + add_bool( CFG_PREFIX "keep-aspect-ratio", false, NULL, + AR_TEXT, AR_LONGTEXT, false ) + add_bool( CFG_PREFIX "keep-picture", false, NULL, + KEEP_TEXT, KEEP_LONGTEXT, false ) add_string( CFG_PREFIX "order", "", NULL, - ORDER_TEXT, ORDER_LONGTEXT, false ); + ORDER_TEXT, ORDER_LONGTEXT, false ) add_string( CFG_PREFIX "offsets", "", NULL, - OFFSETS_TEXT, OFFSETS_LONGTEXT, false ); + OFFSETS_TEXT, OFFSETS_LONGTEXT, false ) add_integer( CFG_PREFIX "delay", 0, NULL, DELAY_TEXT, DELAY_LONGTEXT, - false ); + false ) vlc_module_end () static const char *const ppsz_filter_options[] = { @@ -255,14 +254,14 @@ static void __mosaic_ParseSetOffsets( vlc_object_t *p_this, { i_index++; - p_sys->pi_x_offsets = - realloc( p_sys->pi_x_offsets, i_index * sizeof(int) ); + p_sys->pi_x_offsets = xrealloc( p_sys->pi_x_offsets, + i_index * sizeof(int) ); p_sys->pi_x_offsets[i_index - 1] = atoi( psz_offsets ); psz_end = strchr( psz_offsets, ',' ); psz_offsets = psz_end + 1; - p_sys->pi_y_offsets = - realloc( p_sys->pi_y_offsets, i_index * sizeof(int) ); + p_sys->pi_y_offsets = xrealloc( p_sys->pi_y_offsets, + i_index * sizeof(int) ); p_sys->pi_y_offsets[i_index - 1] = atoi( psz_offsets ); psz_end = strchr( psz_offsets, ',' ); psz_offsets = psz_end + 1; @@ -288,6 +287,7 @@ static int CreateFilter( vlc_object_t *p_this ) char *psz_offsets; int i_index; vlc_value_t val; + int i_command; /* The mosaic thread is more important than the decoder threads */ vlc_thread_set_priority( p_this, VLC_THREAD_PRIORITY_OUTPUT ); @@ -310,8 +310,8 @@ static int CreateFilter( vlc_object_t *p_this ) p_filter->p_cfg ); #define GET_VAR( name, min, max ) \ - p_sys->i_##name = __MIN( max, __MAX( min, \ - var_CreateGetIntegerCommand( p_filter, CFG_PREFIX #name ) ) ); \ + i_command = var_CreateGetIntegerCommand( p_filter, CFG_PREFIX #name ); \ + p_sys->i_##name = __MIN( max, __MAX( min, i_command ) ); \ var_AddCallback( p_filter, CFG_PREFIX #name, MosaicCallback, p_sys ); GET_VAR( width, 0, INT_MAX ); @@ -330,6 +330,7 @@ static int CreateFilter( vlc_object_t *p_this ) GET_VAR( alpha, 0, 255 ); GET_VAR( position, 0, 2 ); GET_VAR( delay, 100, INT_MAX ); +#undef GET_VAR p_sys->i_delay *= 1000; p_sys->b_ar = var_CreateGetBoolCommand( p_filter, @@ -358,8 +359,8 @@ static int CreateFilter( vlc_object_t *p_this ) { psz_end = strchr( psz_order, ',' ); i_index++; - p_sys->ppsz_order = realloc( p_sys->ppsz_order, - i_index * sizeof(char *) ); + p_sys->ppsz_order = xrealloc( p_sys->ppsz_order, + i_index * sizeof(char *) ); p_sys->ppsz_order[i_index - 1] = strndup( psz_order, psz_end - psz_order ); psz_order = psz_end+1; @@ -390,9 +391,27 @@ static void DestroyFilter( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t*)p_this; filter_sys_t *p_sys = p_filter->p_sys; - int i_index; - vlc_mutex_lock( &p_sys->lock ); +#define DEL_CB( name ) \ + var_DelCallback( p_filter, CFG_PREFIX #name, MosaicCallback, p_sys ) + DEL_CB( width ); + DEL_CB( height ); + DEL_CB( xoffset ); + DEL_CB( yoffset ); + + DEL_CB( align ); + + DEL_CB( borderw ); + DEL_CB( borderh ); + DEL_CB( rows ); + DEL_CB( cols ); + DEL_CB( alpha ); + DEL_CB( position ); + DEL_CB( delay ); + + DEL_CB( keep-aspect-ratio ); + DEL_CB( order ); +#undef DEL_CB if( !p_sys->b_keep ) { @@ -401,7 +420,7 @@ static void DestroyFilter( vlc_object_t *p_this ) if( p_sys->i_order_length ) { - for( i_index = 0; i_index < p_sys->i_order_length; i_index++ ) + for( int i_index = 0; i_index < p_sys->i_order_length; i_index++ ) { free( p_sys->ppsz_order[i_index] ); } @@ -414,21 +433,10 @@ static void DestroyFilter( vlc_object_t *p_this ) p_sys->i_offsets_length = 0; } - vlc_mutex_unlock( &p_sys->lock ); vlc_mutex_destroy( &p_sys->lock ); free( p_sys ); } -/***************************************************************************** - * MosaicReleasePicture : Hack to avoid picture duplication - *****************************************************************************/ -static void MosaicReleasePicture( picture_t *p_picture ) -{ - picture_t *p_original_pic = (picture_t *)p_picture->p_sys; - - picture_Release( p_original_pic ); -} - /***************************************************************************** * Filter *****************************************************************************/ @@ -596,11 +604,11 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) fmt_in.i_height = p_es->p_picture->format.i_height; fmt_in.i_width = p_es->p_picture->format.i_width; - if( fmt_in.i_chroma == VLC_FOURCC('Y','U','V','A') || - fmt_in.i_chroma == VLC_FOURCC('R','G','B','A') ) - fmt_out.i_chroma = VLC_FOURCC('Y','U','V','A'); + if( fmt_in.i_chroma == VLC_CODEC_YUVA || + fmt_in.i_chroma == VLC_CODEC_RGBA ) + fmt_out.i_chroma = VLC_CODEC_YUVA; else - fmt_out.i_chroma = VLC_FOURCC('I','4','2','0'); + fmt_out.i_chroma = VLC_CODEC_I420; fmt_out.i_width = col_inner_width; fmt_out.i_height = row_inner_height; @@ -652,8 +660,8 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) { msg_Err( p_filter, "cannot allocate SPU region" ); p_filter->pf_sub_buffer_del( p_filter, p_spu ); - vlc_mutex_unlock( &p_sys->lock ); vlc_mutex_unlock( p_sys->p_lock ); + vlc_mutex_unlock( &p_sys->lock ); return p_spu; } @@ -868,8 +876,8 @@ static int MosaicCallback( vlc_object_t *p_this, char const *psz_var, { psz_end = strchr( psz_order, ',' ); i_index++; - p_sys->ppsz_order = realloc( p_sys->ppsz_order, - i_index * sizeof(char *) ); + p_sys->ppsz_order = xrealloc( p_sys->ppsz_order, + i_index * sizeof(char *) ); p_sys->ppsz_order[i_index - 1] = strndup( psz_order, psz_end - psz_order ); psz_order = psz_end+1;