Commit 2ceb14b8 authored by Gildas Bazin's avatar Gildas Bazin

* modules/codec/libmpeg2.c: fixed detection for aspect-ratio change.

parent 29174f4e
...@@ -72,6 +72,8 @@ struct decoder_sys_t ...@@ -72,6 +72,8 @@ struct decoder_sys_t
*/ */
vout_synchro_t *p_synchro; vout_synchro_t *p_synchro;
int i_aspect; int i_aspect;
int i_sar_num;
int i_sar_den;
mtime_t i_last_frame_pts; mtime_t i_last_frame_pts;
}; };
...@@ -581,6 +583,8 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf ) ...@@ -581,6 +583,8 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
p_dec->fmt_out.video.i_visible_height = p_dec->fmt_out.video.i_visible_height =
p_sys->p_info->sequence->picture_height; p_sys->p_info->sequence->picture_height;
p_dec->fmt_out.video.i_aspect = p_sys->i_aspect; p_dec->fmt_out.video.i_aspect = p_sys->i_aspect;
p_dec->fmt_out.video.i_sar_num = p_sys->i_sar_num;
p_dec->fmt_out.video.i_sar_den = p_sys->i_sar_den;
if( p_sys->p_info->sequence->frame_period > 0 ) if( p_sys->p_info->sequence->frame_period > 0 )
{ {
...@@ -632,17 +636,24 @@ static void GetAR( decoder_t *p_dec ) ...@@ -632,17 +636,24 @@ static void GetAR( decoder_t *p_dec )
{ {
case AR_3_4_PICTURE: case AR_3_4_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3; p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3;
p_sys->i_sar_num = p_sys->p_info->sequence->display_height * 4;
p_sys->i_sar_den = p_sys->p_info->sequence->display_width * 3;
break; break;
case AR_16_9_PICTURE: case AR_16_9_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 16 / 9; p_sys->i_aspect = VOUT_ASPECT_FACTOR * 16 / 9;
p_sys->i_sar_num = p_sys->p_info->sequence->display_height * 16;
p_sys->i_sar_den = p_sys->p_info->sequence->display_width * 9;
break; break;
case AR_221_1_PICTURE: case AR_221_1_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 221 / 100; p_sys->i_aspect = VOUT_ASPECT_FACTOR * 221 / 100;
p_sys->i_sar_num = p_sys->p_info->sequence->display_height * 221;
p_sys->i_sar_den = p_sys->p_info->sequence->display_width * 100;
break; break;
case AR_SQUARE_PICTURE: case AR_SQUARE_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * p_sys->i_aspect = VOUT_ASPECT_FACTOR *
p_sys->p_info->sequence->width / p_sys->p_info->sequence->width /
p_sys->p_info->sequence->height; p_sys->p_info->sequence->height;
p_sys->i_sar_num = p_sys->i_sar_den = 1;
break; break;
} }
} }
...@@ -657,6 +668,8 @@ static void GetAR( decoder_t *p_dec ) ...@@ -657,6 +668,8 @@ static void GetAR( decoder_t *p_dec )
VOUT_ASPECT_FACTOR / VOUT_ASPECT_FACTOR /
p_sys->p_info->sequence->display_height / p_sys->p_info->sequence->display_height /
p_sys->p_info->sequence->pixel_height; p_sys->p_info->sequence->pixel_height;
p_sys->i_sar_num = p_sys->p_info->sequence->pixel_width;
p_sys->i_sar_den = p_sys->p_info->sequence->pixel_height;
} }
else else
{ {
...@@ -664,12 +677,15 @@ static void GetAR( decoder_t *p_dec ) ...@@ -664,12 +677,15 @@ static void GetAR( decoder_t *p_dec )
* This shouldn't happen and if it does it is a bug * This shouldn't happen and if it does it is a bug
* in libmpeg2 (likely triggered by an invalid stream) */ * in libmpeg2 (likely triggered by an invalid stream) */
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3; p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3;
p_sys->i_sar_num = p_sys->p_info->sequence->display_height * 4;
p_sys->i_sar_den = p_sys->p_info->sequence->display_width * 3;
} }
} }
msg_Dbg( p_dec, "%dx%d, aspect %d, %u.%03u fps", msg_Dbg( p_dec, "%dx%d, aspect %d, sar %i:%i, %u.%03u fps",
p_sys->p_info->sequence->display_width, p_sys->p_info->sequence->display_width,
p_sys->p_info->sequence->display_height, p_sys->i_aspect, p_sys->p_info->sequence->display_height,
p_sys->i_aspect, p_sys->i_sar_num, p_sys->i_sar_den,
(uint32_t)((uint64_t)1001000000 * 27 / (uint32_t)((uint64_t)1001000000 * 27 /
p_sys->p_info->sequence->frame_period / 1001), p_sys->p_info->sequence->frame_period / 1001),
(uint32_t)((uint64_t)1001000000 * 27 / (uint32_t)((uint64_t)1001000000 * 27 /
......
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