From: Antoine Cellerier Date: Tue, 1 Mar 2005 17:16:30 +0000 (+0000) Subject: * fix placement calculation when vborder or hborder are non zero X-Git-Tag: 0.8.2~1028 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8c5c6c57c7b017401b82ff8c61a7e15c7c0c2d74;p=vlc * fix placement calculation when vborder or hborder are non zero --- diff --git a/modules/video_filter/mosaic.c b/modules/video_filter/mosaic.c index 004f5d1095..dc2aca90d1 100644 --- a/modules/video_filter/mosaic.c +++ b/modules/video_filter/mosaic.c @@ -227,7 +227,7 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) libvlc_t *p_libvlc = p_filter->p_libvlc; vlc_value_t val; - int i_index; + int i_index, i_real_index, i_row, i_col; subpicture_region_t *p_region; subpicture_region_t *p_region_prev = NULL; @@ -275,6 +275,8 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) i_numpics/p_sys->i_rows + 1 ); } + i_real_index = 0; + for( i_index = 0 ; i_index < p_picture_vout->i_picture_num ; i_index ++ ) { @@ -293,6 +295,10 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) msg_Dbg( p_filter, "Picture Vout Element is empty"); break; } + i_real_index ++; + i_row = ( i_real_index / p_sys->i_cols ) % p_sys->i_rows ; + i_col = i_real_index % p_sys->i_cols ; + /* Convert the images */ @@ -310,8 +316,12 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) fmt_out.i_chroma = VLC_FOURCC('Y','U','V','A'); - fmt_out.i_width = fmt_in.i_width *( p_sys->i_width / p_sys->i_cols ) / fmt_in.i_width; - fmt_out.i_height = fmt_in.i_height*( p_sys->i_height / p_sys->i_rows ) / fmt_in.i_height; + fmt_out.i_width = fmt_in.i_width * + ( ( p_sys->i_width - ( p_sys->i_cols - 1 ) * p_sys->i_vborder ) + / p_sys->i_cols ) / fmt_in.i_width; + fmt_out.i_height = fmt_in.i_height * + ( ( p_sys->i_height - ( p_sys->i_rows - 1 ) * p_sys->i_hborder ) + / p_sys->i_rows ) / fmt_in.i_height; if( p_sys->i_ar ) /* keep aspect ratio */ { if( (float)fmt_out.i_width/(float)fmt_out.i_height @@ -365,39 +375,27 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date ) if( p_sys->i_ar ) /* keep aspect ratio */ { /* center the video in the dedicated rectangle */ - p_region->i_x = p_sys->i_xoffset + ( i_index % p_sys->i_cols ) - * ( p_sys->i_width / p_sys->i_cols - + p_sys->i_vborder ) - + ( fmt_in.i_width *( p_sys->i_width / p_sys->i_cols ) - / fmt_in.i_width - fmt_out.i_width ) / 2; + p_region->i_x = p_sys->i_xoffset + + i_col * ( p_sys->i_width / p_sys->i_cols ) + + ( i_col * p_sys->i_vborder ) / p_sys->i_cols + + ( fmt_in.i_width * + ( ( p_sys->i_width - ( p_sys->i_cols - 1 ) * p_sys->i_vborder ) + / p_sys->i_cols ) / fmt_in.i_width - fmt_out.i_width ) / 2; p_region->i_y = p_sys->i_yoffset - + ( ( i_index / p_sys->i_cols ) % p_sys->i_rows ) - * ( p_sys->i_height / p_sys->i_rows - + p_sys->i_hborder ) - + ( fmt_in.i_height*( p_sys->i_height / p_sys->i_rows ) - / fmt_in.i_height - fmt_out.i_height ) / 2; + + i_row * ( p_sys->i_height / p_sys->i_rows ) + + ( i_row * p_sys->i_hborder ) / p_sys->i_rows + + ( fmt_in.i_height * + ( ( p_sys->i_height - ( p_sys->i_rows - 1 ) * p_sys->i_hborder ) + / p_sys->i_rows ) / fmt_in.i_height - fmt_out.i_height ) / 2; } else { /* we don't have to center the video since it takes the whole rectangle area */ - p_region->i_x = p_sys->i_xoffset + ( i_index % p_sys->i_cols ) - * ( p_sys->i_width / p_sys->i_cols - + p_sys->i_vborder ); + p_region->i_x = p_sys->i_xoffset + + i_col * ( p_sys->i_width / p_sys->i_cols ) + + ( i_col * p_sys->i_vborder ) / p_sys->i_cols; p_region->i_y = p_sys->i_yoffset - + ( ( i_index / p_sys->i_cols ) % p_sys->i_rows ) - * ( p_sys->i_height / p_sys->i_rows - + p_sys->i_hborder ); - } - - if( 1 ) - { - uint8_t *p_a = p_region->picture.A_PIXELS; - int i_pitch = p_region->picture.Y_PITCH; - int x,y; - - for( x = 0, y=0; x+y < 20; x++, y++){ - p_a[ x + i_pitch * y ] = 0xff; - } - + + i_row * ( p_sys->i_height / p_sys->i_rows ) + + ( i_row * p_sys->i_hborder ) / p_sys->i_rows; } if( p_region_prev == NULL ){