if( id->p_encoder->fmt_out.video.i_width <= 0 &&
id->p_encoder->fmt_out.video.i_height <= 0 && p_sys->f_scale )
{
- /* Apply the scaling and round at the nearest 16. Don't allow 0 size */
+ float f_real_scale;
id->p_encoder->fmt_out.video.i_width = i_width * p_sys->f_scale;
if( id->p_encoder->fmt_out.video.i_width % 16 <= 7 &&
id->p_encoder->fmt_out.video.i_width >= 16 )
id->p_encoder->fmt_out.video.i_width +=
16 - id->p_encoder->fmt_out.video.i_width % 16;
- id->p_encoder->fmt_out.video.i_height = i_height * p_sys->f_scale;
- if( id->p_encoder->fmt_out.video.i_height % 16 <= 7 &&
- id->p_encoder->fmt_out.video.i_height >= 16 )
- id->p_encoder->fmt_out.video.i_height -=
- id->p_encoder->fmt_out.video.i_height % 16;
- else
- id->p_encoder->fmt_out.video.i_height +=
- 16 - id->p_encoder->fmt_out.video.i_height % 16;
+ f_real_scale = (float)( id->p_encoder->fmt_out.video.i_width) /
+ (float)i_width;
+
+ id->p_encoder->fmt_out.video.i_height = __MAX( 16,
+ i_height * f_real_scale );
+ msg_Dbg( p_stream, "scaling to %ix%i",
+ id->p_encoder->fmt_out.video.i_width,
+ id->p_encoder->fmt_out.video.i_height );
}
else if( id->p_encoder->fmt_out.video.i_width > 0 &&
id->p_encoder->fmt_out.video.i_height <= 0 )