From e3631231a1be57cbf854d5897cd9378249ffd865 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sat, 2 Apr 2011 22:39:01 +0300 Subject: demux_mkv, demux_lavf: don't select initial audio track Remove code that tries to select audio track during demuxer initialization from demux_mkv and demux_lavf. Just leave audio disabled at that point; the higher-level select_audio() function will call the demuxer to switch track later anyway. Removing this unneeded code also fixes use of these demuxers as the main demuxer with -audiofile. Before the automatic track selection would have enabled an audio track (if the file had any); as the main demuxer was not used for audio the unused packets from this enabled track would accumulate until they reached queue size limits. --- libmpdemux/demux_lavf.c | 10 ++-------- libmpdemux/demux_mkv.c | 29 +---------------------------- 2 files changed, 3 insertions(+), 36 deletions(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 4c6ddac2a7..ed8a3ddb69 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -357,12 +357,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { if (st->disposition & AV_DISPOSITION_DEFAULT) sh_audio->default_track = 1; if(mp_msg_test(MSGT_HEADER,MSGL_V) ) print_wave_header(sh_audio->wf, MSGL_V); - // select the first audio stream - if (!demuxer->audio->sh) { - demuxer->audio->id = i; - demuxer->audio->sh= demuxer->a_streams[i]; - } else - st->discard= AVDISCARD_ALL; + st->discard= AVDISCARD_ALL; stream_id = priv->audio_streams++; break; } @@ -611,8 +606,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ mp_msg(MSGT_HEADER,MSGL_V,"LAVF: %d audio and %d video streams found\n",priv->audio_streams,priv->video_streams); mp_msg(MSGT_HEADER,MSGL_V,"LAVF: build %d\n", LIBAVFORMAT_BUILD); - if(!priv->audio_streams) demuxer->audio->id=-2; // nosound -// else if(best_audio > 0 && demuxer->audio->id == -1) demuxer->audio->id=best_audio; + demuxer->audio->id = -2; // wait for higher-level code to select track if(!priv->video_streams){ if(!priv->audio_streams){ mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF: no audio or video headers found - broken file?\n"); diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 78af3a85f1..535c749c48 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -1711,34 +1711,7 @@ static int demux_mkv_open(demuxer_t *demuxer) demuxer->video->id = -2; } - /* select audio track */ - track = NULL; - if (track == NULL) - /* search for an audio track that has the 'default' flag set */ - for (i = 0; i < mkv_d->num_tracks; i++) - if (mkv_d->tracks[i]->type == MATROSKA_TRACK_AUDIO - && mkv_d->tracks[i]->default_track) { - track = mkv_d->tracks[i]; - break; - } - - if (track == NULL) - /* no track has the 'default' flag set */ - /* let's take the first audio track */ - for (i = 0; i < mkv_d->num_tracks; i++) - if (mkv_d->tracks[i]->type == MATROSKA_TRACK_AUDIO - && mkv_d->tracks[i]->id >= 0) { - track = mkv_d->tracks[i]; - break; - } - - if (track && demuxer->a_streams[track->id]) { - demuxer->audio->id = track->id; - demuxer->audio->sh = demuxer->a_streams[track->id]; - } else { - mp_tmsg(MSGT_DEMUX, MSGL_INFO, "[mkv] No audio track found/wanted.\n"); - demuxer->audio->id = -2; - } + demuxer->audio->id = -2; // wait for higher-level code to select track if (s->end_pos == 0) demuxer->seekable = 0; -- cgit v1.2.3