From: Laurent Aimar Date: Mon, 24 May 2010 21:55:07 +0000 (+0200) Subject: Used dvdnav_get_video_resolution to fix the AR of some dvd menus. X-Git-Tag: 1.2.0-pre1~6521 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=93a85bdbb0ef55cbd491c4e9e6a4a4deb83c85da;p=vlc Used dvdnav_get_video_resolution to fix the AR of some dvd menus. --- diff --git a/configure.ac b/configure.ac index f4710cf4f6..ba21694aa7 100644 --- a/configure.ac +++ b/configure.ac @@ -1932,6 +1932,9 @@ then VLC_ADD_PLUGIN([dvdnav]) VLC_ADD_CFLAGS([dvdnav],[`${DVDNAV_CONFIG} --cflags`]) VLC_ADD_LIBS([dvdnav],[`${DVDNAV_CONFIG} --libs`]) + AC_CHECK_LIB(dvdnav, dvdnav_get_video_resolution, + AC_DEFINE(HAVE_DVDNAV_GET_VIDEO_RESOLUTION, 1, [Define if you have dvdnav_get_video_resolution.]), + [], [${LIBS_dvdnav}]) fi fi diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c index c02db6433d..99b45ebd92 100644 --- a/modules/access/dvdnav.c +++ b/modules/access/dvdnav.c @@ -138,6 +138,12 @@ struct demux_sys_t uint8_t palette[4][4]; bool b_spu_change; + /* Aspect ration */ + struct { + unsigned i_num; + unsigned i_den; + } sar; + /* */ int i_title; input_title_t **title; @@ -231,6 +237,8 @@ static int Open( vlc_object_t *p_this ) p_sys->b_reset_pcr = false; ps_track_init( p_sys->tk ); + p_sys->sar.i_num = 0; + p_sys->sar.i_den = 0; p_sys->i_mux_rate = 0; p_sys->i_pgc_length = 0; p_sys->b_spu_change = false; @@ -744,6 +752,28 @@ static int Demux( demux_t *p_demux ) tk->b_seen = false; } +#if defined(HAVE_DVDNAV_GET_VIDEO_RESOLUTION) + uint32_t i_width, i_height; + if( dvdnav_get_video_resolution( p_sys->dvdnav, + &i_width, &i_height ) ) + i_width = i_height = 0; + switch( dvdnav_get_video_aspect( p_sys->dvdnav ) ) + { + case 0: + p_sys->sar.i_num = 4 * i_height; + p_sys->sar.i_den = 3 * i_width; + break; + case 3: + p_sys->sar.i_num = 16 * i_height; + p_sys->sar.i_den = 9 * i_width; + break; + default: + p_sys->sar.i_num = 0; + p_sys->sar.i_den = 0; + break; + } +#endif + if( dvdnav_current_title_info( p_sys->dvdnav, &i_title, &i_part ) == DVDNAV_STATUS_OK ) { @@ -1217,6 +1247,8 @@ static void ESNew( demux_t *p_demux, int i_id ) /* Add a new ES */ if( tk->fmt.i_cat == VIDEO_ES ) { + tk->fmt.video.i_sar_num = p_sys->sar.i_num; + tk->fmt.video.i_sar_den = p_sys->sar.i_den; b_select = true; } else if( tk->fmt.i_cat == AUDIO_ES )