/*****************************************************************************
* libmpeg2.c: mpeg2 video decoder module making use of libmpeg2.
*****************************************************************************
- * Copyright (C) 1999-2001 VideoLAN (Centrale Réseaux) and its contributors
+ * Copyright (C) 1999-2001 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
*/
vout_synchro_t *p_synchro;
int i_aspect;
+ int i_sar_num;
+ int i_sar_den;
mtime_t i_last_frame_pts;
};
p_dec->fmt_in.i_codec != VLC_FOURCC('P','I','M','1') &&
/* ATI Video */
p_dec->fmt_in.i_codec != VLC_FOURCC('V','C','R','2') &&
- p_dec->fmt_in.i_codec != VLC_FOURCC('m','p','g','2') )
+ p_dec->fmt_in.i_codec != VLC_FOURCC('m','p','g','2') &&
+ p_dec->fmt_in.i_codec != VLC_FOURCC('h','d','v','2') )
{
return VLC_EGENERIC;
}
p_dec->fmt_out.video.i_visible_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_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 )
{
/* Check whether the input gave a particular aspect ratio */
if( p_dec->fmt_in.video.i_aspect )
{
+ /* AR is relative to width/height, not display_width/height */
p_sys->i_aspect = p_dec->fmt_in.video.i_aspect;
if( p_sys->i_aspect <= AR_221_1_PICTURE )
switch( p_sys->i_aspect )
{
case AR_3_4_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3;
+ p_sys->i_sar_num = p_sys->p_info->sequence->height * 4;
+ p_sys->i_sar_den = p_sys->p_info->sequence->width * 3;
break;
case AR_16_9_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 16 / 9;
+ p_sys->i_sar_num = p_sys->p_info->sequence->height * 16;
+ p_sys->i_sar_den = p_sys->p_info->sequence->width * 9;
break;
case AR_221_1_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR * 221 / 100;
+ p_sys->i_sar_num = p_sys->p_info->sequence->height * 221;
+ p_sys->i_sar_den = p_sys->p_info->sequence->width * 100;
break;
case AR_SQUARE_PICTURE:
p_sys->i_aspect = VOUT_ASPECT_FACTOR *
p_sys->p_info->sequence->width /
p_sys->p_info->sequence->height;
+ p_sys->i_sar_num = p_sys->i_sar_den = 1;
break;
}
}
VOUT_ASPECT_FACTOR /
p_sys->p_info->sequence->display_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
{
* This shouldn't happen and if it does it is a bug
* in libmpeg2 (likely triggered by an invalid stream) */
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",
- p_sys->p_info->sequence->width,
- p_sys->p_info->sequence->height, p_sys->i_aspect,
+ 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_height,
+ p_sys->i_aspect, p_sys->i_sar_num, p_sys->i_sar_den,
(uint32_t)((uint64_t)1001000000 * 27 /
p_sys->p_info->sequence->frame_period / 1001),
(uint32_t)((uint64_t)1001000000 * 27 /
p_sys->p_info->sequence->frame_period % 1001) );
}
-