- if( fmt_out.i_width == 0 && fmt_out.i_height > 0 )
- {
- fmt_out.i_width = fmt_in.i_width * fmt_out.i_height / fmt_in.i_height;
- }
- else
- {
- fmt_out.i_width = fmt_in.i_width;
- fmt_out.i_height = fmt_in.i_height;
- }
- const int i_width = fmt_out.i_width * fmt_in.i_sar_num / fmt_in.i_sar_den;
- if( i_width > 0 )
- fmt_out.i_width = i_width;
+ i_original_width = fmt_in.i_width;
+ i_original_height = fmt_in.i_height * fmt_in.i_sar_den / fmt_in.i_sar_num;
+ }
+
+ /* */
+ fmt_out.i_width = ( i_override_width < 0 ) ?
+ i_original_width : i_override_width;
+ fmt_out.i_height = ( i_override_height < 0 ) ?
+ i_original_height : i_override_height;
+
+ /* scale if only one direction is provided */
+ if( fmt_out.i_height == 0 && fmt_out.i_width > 0 )
+ {
+ fmt_out.i_height = fmt_in.i_height * fmt_out.i_width
+ * fmt_in.i_sar_den / fmt_in.i_width / fmt_in.i_sar_num;
+ }
+ else if( fmt_out.i_width == 0 && fmt_out.i_height > 0 )
+ {
+ fmt_out.i_width = fmt_in.i_width * fmt_out.i_height
+ * fmt_in.i_sar_num / fmt_in.i_height / fmt_in.i_sar_den;