diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-09-16 22:28:12 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-09-16 22:28:12 +0300 |
commit | e1ecc4315265c465080616b8d8d9257b3aab6ee9 (patch) | |
tree | d8a3aacf1b5468c59da202e44c5035924f5c1a3e /libmpdemux/demux_lavf.c | |
parent | 0e1b7765be878491565cf5e471f22b15e106164c (diff) | |
parent | 4dae2a980c4313deed6ddb69556d2ead4417119c (diff) | |
download | mpv-e1ecc4315265c465080616b8d8d9257b3aab6ee9.tar.bz2 mpv-e1ecc4315265c465080616b8d8d9257b3aab6ee9.tar.xz |
Merge svn changes up to r29684
Diffstat (limited to 'libmpdemux/demux_lavf.c')
-rw-r--r-- | libmpdemux/demux_lavf.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index fb89accaf3..31eabc67a1 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -172,16 +172,18 @@ static int lavf_check_file(demuxer_t *demuxer){ static const char * const preferred_list[] = { "dxa", - "wv", - "nuv", - "nut", - "gxf", - "mxf", "flv", - "swf", + "gxf", + "nut", + "nuv", "mov,mp4,m4a,3gp,3g2,mj2", "mpc", "mpc8", + "mxf", + "swf", + "vqf", + "w64", + "wv", NULL }; @@ -240,8 +242,6 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { // mp4a tag is used for all mp4 files no matter what they actually contain if(codec->codec_tag == MKTAG('m', 'p', '4', 'a')) codec->codec_tag= 0; - if(codec->codec_id == CODEC_ID_ADPCM_IMA_AMV) - codec->codec_tag= MKTAG('A','M','V','A'); if(!codec->codec_tag) codec->codec_tag= mp_av_codec_get_tag(mp_wav_taglists, codec->codec_id); wf->wFormatTag= codec->codec_tag; @@ -490,6 +490,8 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ demuxer_add_chapter(demuxer, t ? t->value : NULL, start, end); } + for(i=0; i<avfc->nb_streams; i++) + handle_stream(demuxer, avfc, i); if(avfc->nb_programs) { int p, start=0, found=0; @@ -511,15 +513,11 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ AVProgram *program = avfc->programs[p]; t = av_metadata_get(program->metadata, "title", NULL, 0); mp_msg(MSGT_HEADER,MSGL_INFO,"LAVF: Program %d %s\n", program->id, t ? t->value : ""); - for(i=0; i<program->nb_stream_indexes; i++) - handle_stream(demuxer, avfc, program->stream_index[i]); if(!priv->cur_program && (demuxer->video->sh || demuxer->audio->sh)) priv->cur_program = program->id; p = (p + 1) % avfc->nb_programs; } while(p!=start); - } else - for(i=0; i<avfc->nb_streams; i++) - handle_stream(demuxer, avfc, i); + } 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); @@ -714,6 +712,7 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg) demux_program_t *prog = arg; AVProgram *program; int p, i; + int start; if(priv->avfc->nb_programs < 2) return DEMUXER_CTRL_NOTIMPL; @@ -735,6 +734,7 @@ static int demux_lavf_control(demuxer_t *demuxer, int cmd, void *arg) p = i; } prog->vid = prog->aid = prog->sid = -2; //no audio and no video by default + start = p; redo: program = priv->avfc->programs[p]; for(i=0; i<program->nb_stream_indexes; i++) @@ -758,6 +758,8 @@ redo: if(prog->progid == -1 && prog->vid == -2 && prog->aid == -2) { p = (p + 1) % priv->avfc->nb_programs; + if (p == start) + return DEMUXER_CTRL_DONTKNOW; goto redo; } priv->cur_program = prog->progid = program->id; |