Commit 58961aa8 authored by Antoine Cellerier's avatar Antoine Cellerier

Allow the <width>x<height>+<left>+<top> syntax in video output core cropping

parent b73b4a12
...@@ -790,17 +790,18 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -790,17 +790,18 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd,
p_vout->fmt_in.i_y_offset = p_vout->fmt_render.i_y_offset; p_vout->fmt_in.i_y_offset = p_vout->fmt_render.i_y_offset;
p_vout->fmt_in.i_visible_height = p_vout->fmt_render.i_visible_height; p_vout->fmt_in.i_visible_height = p_vout->fmt_render.i_visible_height;
if( !psz_parser ) goto crop_end; if( psz_parser )
{
/* We're using the 3:4 syntax */
i_aspect_num = strtol( newval.psz_string, &psz_end, 10 ); i_aspect_num = strtol( newval.psz_string, &psz_end, 10 );
if( psz_end == newval.psz_string || !i_aspect_num ) goto crop_end; if( psz_end == newval.psz_string || !i_aspect_num ) goto crop_end;
i_aspect_den = strtol( ++psz_parser, &psz_end, 10 ); i_aspect_den = strtol( ++psz_parser, &psz_end, 10 );
if( psz_end == psz_parser || !i_aspect_den ) goto crop_end; if( psz_end == psz_parser || !i_aspect_den ) goto crop_end;
i_width = p_vout->fmt_in.i_sar_den * p_vout->fmt_render.i_visible_height * i_width = p_vout->fmt_in.i_sar_den*p_vout->fmt_render.i_visible_height *
i_aspect_num / i_aspect_den / p_vout->fmt_in.i_sar_num; i_aspect_num / i_aspect_den / p_vout->fmt_in.i_sar_num;
i_height = p_vout->fmt_render.i_visible_width * p_vout->fmt_in.i_sar_num * i_height = p_vout->fmt_render.i_visible_width*p_vout->fmt_in.i_sar_num *
i_aspect_den / i_aspect_num / p_vout->fmt_in.i_sar_den; i_aspect_den / i_aspect_num / p_vout->fmt_in.i_sar_den;
if( i_width < p_vout->fmt_render.i_visible_width ) if( i_width < p_vout->fmt_render.i_visible_width )
...@@ -815,6 +816,36 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -815,6 +816,36 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd,
(p_vout->fmt_render.i_visible_height - i_height) / 2; (p_vout->fmt_render.i_visible_height - i_height) / 2;
p_vout->fmt_in.i_visible_height = i_height; p_vout->fmt_in.i_visible_height = i_height;
} }
}
else
{
/* Maybe we're using the <width> x <height> + <left> + <top> syntax */
unsigned int i_crop_width, i_crop_height, i_crop_top, i_crop_left;
psz_parser = strchr( newval.psz_string, 'x' );
i_crop_width = strtol( newval.psz_string, &psz_end, 10 );
if( psz_end != psz_parser ) goto crop_end;
psz_parser = strchr( ++psz_end, '+' );
i_crop_height = strtol( psz_end, &psz_end, 10 );
if( psz_end != psz_parser ) goto crop_end;
psz_parser = strchr( ++psz_end, '+' );
i_crop_left = strtol( psz_end, &psz_end, 10 );
if( psz_end != psz_parser ) goto crop_end;
i_crop_top = strtol( ++psz_end, &psz_end, 10 );
if( *psz_end != '\0' ) goto crop_end;
i_width = i_crop_width;
p_vout->fmt_in.i_visible_width = i_width;
i_height = i_crop_height;
p_vout->fmt_in.i_visible_height = i_height;
p_vout->fmt_in.i_x_offset = i_crop_left;
p_vout->fmt_in.i_y_offset = i_crop_top;
}
crop_end: crop_end:
InitWindowSize( p_vout, &p_vout->i_window_width, InitWindowSize( p_vout, &p_vout->i_window_width,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment