avformat/dvdvideodec: open subdemuxer after initializing IFO headers

It is wasteful to open the subdemuxer if an error occurs while
initializing streams or reading IFO headers.

Signed-off-by: Marth64 <marth64@proxyid.net>
This commit is contained in:
Marth64 2024-10-07 18:05:01 -05:00
parent 60434b483c
commit a2c57e27d6

View File

@ -1565,9 +1565,9 @@ static int dvdvideo_read_header(AVFormatContext *s)
if ((ret = dvdvideo_ifo_open(s)) < 0 || if ((ret = dvdvideo_ifo_open(s)) < 0 ||
(c->opt_preindex && (ret = dvdvideo_chapters_setup_preindex(s)) < 0) || (c->opt_preindex && (ret = dvdvideo_chapters_setup_preindex(s)) < 0) ||
(ret = dvdvideo_menu_open(s, &c->play_state)) < 0 || (ret = dvdvideo_menu_open(s, &c->play_state)) < 0 ||
(ret = dvdvideo_subdemux_open(s)) < 0 ||
(ret = dvdvideo_video_stream_setup(s)) < 0 || (ret = dvdvideo_video_stream_setup(s)) < 0 ||
(ret = dvdvideo_audio_stream_add_all(s)) < 0) (ret = dvdvideo_audio_stream_add_all(s)) < 0 ||
(ret = dvdvideo_subdemux_open(s)) < 0)
return ret; return ret;
return 0; return 0;
@ -1599,16 +1599,14 @@ static int dvdvideo_read_header(AVFormatContext *s)
if (!c->opt_pgc && c->opt_preindex && (ret = dvdvideo_chapters_setup_preindex(s)) < 0) if (!c->opt_pgc && c->opt_preindex && (ret = dvdvideo_chapters_setup_preindex(s)) < 0)
return ret; return ret;
if ((ret = dvdvideo_play_open(s, &c->play_state)) < 0 || if ((ret = dvdvideo_play_open(s, &c->play_state)) < 0 ||
(ret = dvdvideo_subdemux_open(s)) < 0 || (!c->opt_pgc && !c->opt_preindex && (ret = dvdvideo_chapters_setup_simple(s)) < 0) ||
(ret = dvdvideo_video_stream_setup(s)) < 0 || (ret = dvdvideo_video_stream_setup(s)) < 0 ||
(ret = dvdvideo_audio_stream_add_all(s)) < 0 || (ret = dvdvideo_audio_stream_add_all(s)) < 0 ||
(ret = dvdvideo_subp_stream_add_all(s)) < 0) (ret = dvdvideo_subp_stream_add_all(s)) < 0 ||
(ret = dvdvideo_subdemux_open(s)) < 0)
return ret; return ret;
if (!c->opt_pgc && !c->opt_preindex)
return dvdvideo_chapters_setup_simple(s);
return 0; return 0;
} }