X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fdvdread.c;h=41fa877f47156f0a56c96667904af926c00378e4;hb=b694b642baea32dfa21ec9d771ef7295ac398d6d;hp=a918dc95589b5c0486705457ff7ae8fe59ba9793;hpb=5ad6561ceab66b046b648e7651ed63c071d6012d;p=vlc diff --git a/modules/access/dvdread.c b/modules/access/dvdread.c index a918dc9558..41fa877f47 100644 --- a/modules/access/dvdread.c +++ b/modules/access/dvdread.c @@ -35,8 +35,8 @@ #include #include #include - #include +#include #include @@ -101,24 +101,24 @@ static const char *const psz_css_list_text[] = { N_("title"), N_("Disc"), N_("Ke static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); -vlc_module_begin(); - set_shortname( N_("DVD without menus") ); - set_description( N_("DVDRead Input (DVD without menu support)") ); - set_category( CAT_INPUT ); - set_subcategory( SUBCAT_INPUT_ACCESS ); +vlc_module_begin () + set_shortname( N_("DVD without menus") ) + set_description( N_("DVDRead Input (no menu support)") ) + set_category( CAT_INPUT ) + set_subcategory( SUBCAT_INPUT_ACCESS ) add_integer( "dvdread-angle", 1, NULL, ANGLE_TEXT, - ANGLE_LONGTEXT, false ); + ANGLE_LONGTEXT, false ) add_integer( "dvdread-caching", DEFAULT_PTS_DELAY / 1000, NULL, - CACHING_TEXT, CACHING_LONGTEXT, true ); + CACHING_TEXT, CACHING_LONGTEXT, true ) add_string( "dvdread-css-method", NULL, NULL, CSSMETHOD_TEXT, - CSSMETHOD_LONGTEXT, true ); - change_string_list( psz_css_list, psz_css_list_text, 0 ); - set_capability( "access_demux", 0 ); - add_shortcut( "dvd" ); - add_shortcut( "dvdread" ); - add_shortcut( "dvdsimple" ); - set_callbacks( Open, Close ); -vlc_module_end(); + CSSMETHOD_LONGTEXT, true ) + change_string_list( psz_css_list, psz_css_list_text, 0 ) + set_capability( "access_demux", 0 ) + add_shortcut( "dvd" ) + add_shortcut( "dvdread" ) + add_shortcut( "dvdsimple" ) + set_callbacks( Open, Close ) +vlc_module_end () /* how many blocks DVDRead will read in each loop */ #define DVD_BLOCK_READ_ONCE 4 @@ -248,8 +248,8 @@ static int Open( vlc_object_t *p_this ) if( !(p_dvdread = DVDOpen( psz_name )) ) { msg_Err( p_demux, "DVDRead cannot open source: %s", psz_name ); - intf_UserFatal( p_demux, false, _("Playback failure"), - _("DVDRead could not open the disk \"%s\"."), psz_name ); + dialog_Fatal( p_demux, _("Playback failure"), + _("DVDRead could not open the disc \"%s\"."), psz_name ); free( psz_name ); return VLC_EGENERIC; } @@ -508,9 +508,9 @@ static int Demux( demux_t *p_demux ) 1, p_buffer ) != 1 ) { msg_Err( p_demux, "read failed for block %d", p_sys->i_next_vobu ); - intf_UserWarn( p_demux, _("Playback failure"), - _("DVDRead could not read block %d."), - p_sys->i_next_vobu ); + dialog_Fatal( p_demux, _("Playback failure"), + _("DVDRead could not read block %d."), + p_sys->i_next_vobu ); return -1; } @@ -570,7 +570,7 @@ static int Demux( demux_t *p_demux ) { msg_Err( p_demux, "read failed for %d/%d blocks at 0x%02x", i_read, i_blocks_once, p_sys->i_cur_block ); - intf_UserFatal( p_demux, false, _("Playback failure"), + dialog_Fatal( p_demux, _("Playback failure"), _("DVDRead could not read %d/%d blocks at 0x%02x."), i_read, i_blocks_once, p_sys->i_cur_block ); return -1; @@ -603,10 +603,15 @@ static int DemuxBlock( demux_t *p_demux, uint8_t *pkt, int i_pkt ) demux_sys_t *p_sys = p_demux->p_sys; uint8_t *p = pkt; - while( p < &pkt[i_pkt] ) + while( p && p < &pkt[i_pkt] ) { - int i_size = ps_pkt_size( p, &pkt[i_pkt] - p ); block_t *p_pkt; + int i_size = &pkt[i_pkt] - p; + + if( i_size < 6 ) + break; + + i_size = ps_pkt_size( p, i_size ); if( i_size <= 0 ) { break; @@ -710,9 +715,15 @@ static void ESNew( demux_t *p_demux, int i_id, int i_lang ) /* Add a new ES */ if( tk->fmt.i_cat == VIDEO_ES ) { - if( p_sys->i_aspect >= 0 ) + switch( p_sys->i_aspect ) { - tk->fmt.video.i_aspect = p_sys->i_aspect; + case 1: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR; break; + case 2: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 4 / 3; break; + case 3: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 16 / 9; break; + case 4: tk->fmt.video.i_aspect = VOUT_ASPECT_FACTOR * 221 / 10; break; + default: + tk->fmt.video.i_aspect = 0; + break; } } else if( tk->fmt.i_cat == AUDIO_ES )