diff options
author | Uoti Urpala <uau@symbol.nonexistent.invalid> | 2008-06-04 08:10:48 +0300 |
---|---|---|
committer | Uoti Urpala <uau@symbol.nonexistent.invalid> | 2008-06-04 08:10:48 +0300 |
commit | d5c868325cefcd5fad53361d1dfdc9757674eb70 (patch) | |
tree | a838e509fdc2468220466e6337097b3ef590b00c /libmpdemux/demuxer.c | |
parent | 0cb5123c8f65b3d7715deb22ce8430eccc21996e (diff) | |
parent | 5b3834c5d1033f05d798278c33782c5563247062 (diff) | |
download | mpv-d5c868325cefcd5fad53361d1dfdc9757674eb70.tar.bz2 mpv-d5c868325cefcd5fad53361d1dfdc9757674eb70.tar.xz |
Merge svn changes up to r26979
Most of the conflicts are trivial.
Conflicts:
Makefile
cfg-mplayer.h
input/input.c
libmenu/vf_menu.c
libmpcodecs/dec_video.c
libmpcodecs/vf_expand.c
libmpcodecs/vf_vo.c
libmpdemux/demux_mkv.c
libmpdemux/demuxer.c
libmpdemux/demuxer.h
libvo/vo_directfb2.c
libvo/vo_gl.c
libvo/vo_winvidix.c
libvo/vo_xv.c
libvo/vo_xvidix.c
libvo/vo_xvmc.c
libvo/x11_common.c
mplayer.c
osdep/timer-linux.c
stream/cache2.c
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r-- | libmpdemux/demuxer.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 1762f99741..8987f1679a 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -122,9 +122,6 @@ const demuxer_desc_t *const demuxer_list[] = { &demuxer_desc_mpeg_gxf, &demuxer_desc_mpeg4_es, &demuxer_desc_h264_es, -#ifdef MUSEPACK - &demuxer_desc_mpc, -#endif &demuxer_desc_audio, &demuxer_desc_mpeg_ty, #ifdef STREAMING_LIVE555 @@ -136,6 +133,9 @@ const demuxer_desc_t *const demuxer_list[] = { #ifdef USE_LIBAVFORMAT &demuxer_desc_lavf, #endif +#ifdef MUSEPACK + &demuxer_desc_mpc, +#endif #ifdef HAVE_LIBDV095 &demuxer_desc_rawdv, #endif @@ -277,10 +277,11 @@ sh_audio_t *new_sh_audio_aid(demuxer_t *demuxer, int id, int aid) if (demuxer->a_streams[id]) { mp_msg(MSGT_DEMUXER, MSGL_WARN, MSGTR_AudioStreamRedefined, id); } else { - sh_audio_t *sh; mp_msg(MSGT_DEMUXER, MSGL_V, MSGTR_FoundAudioStream, id); - demuxer->a_streams[id] = calloc(1, sizeof(sh_audio_t)); - sh = demuxer->a_streams[id]; + sh_audio_t *sh = calloc(1, sizeof(sh_audio_t)); + demuxer->a_streams[id] = sh; + sh->aid = aid; + sh->ds = demuxer->audio; // set some defaults sh->samplesize = 2; sh->sample_format = AF_FORMAT_S16_NE; @@ -289,7 +290,6 @@ sh_audio_t *new_sh_audio_aid(demuxer_t *demuxer, int id, int aid) sh->opts = demuxer->opts; mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_ID=%d\n", aid); } - ((sh_audio_t *) demuxer->a_streams[id])->aid = aid; return demuxer->a_streams[id]; } @@ -318,10 +318,11 @@ sh_video_t *new_sh_video_vid(demuxer_t *demuxer, int id, int vid) mp_msg(MSGT_DEMUXER, MSGL_V, MSGTR_FoundVideoStream, id); sh_video_t *sh = calloc(1, sizeof *sh); demuxer->v_streams[id] = sh; + sh->vid = vid; + sh->ds = demuxer->video; sh->opts = demuxer->opts; mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ID=%d\n", vid); } - ((sh_video_t *) demuxer->v_streams[id])->vid = vid; return demuxer->v_streams[id]; } @@ -1049,6 +1050,13 @@ demuxer_t *demux_open(struct MPOpts *opts, stream_t *vs, int file_format, } +void demux_flush(demuxer_t *demuxer) +{ + ds_free_packs(demuxer->video); + ds_free_packs(demuxer->audio); + ds_free_packs(demuxer->sub); +} + int demux_seek(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags) { @@ -1071,12 +1079,9 @@ int demux_seek(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, return 0; } // clear demux buffers: - if (sh_audio) { - ds_free_packs(d_audio); + demux_flush(demuxer); + if (sh_audio) sh_audio->a_buffer_len = 0; - } - ds_free_packs(d_video); - ds_free_packs(demuxer->sub); demuxer->stream->eof = 0; demuxer->video->eof = 0; @@ -1337,14 +1342,7 @@ int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, int mode, chapter += current; } - if (demuxer->video->sh) - ds_free_packs(demuxer->video); - - if (demuxer->audio->sh) - ds_free_packs(demuxer->audio); - - if (demuxer->sub->id >= 0) - ds_free_packs(demuxer->sub); + demux_flush(demuxer); ris = stream_control(demuxer->stream, STREAM_CTRL_SEEK_TO_CHAPTER, @@ -1526,14 +1524,7 @@ int demuxer_set_angle(demuxer_t *demuxer, int angle) if ((angles < 1) || (angle > angles)) return -1; - if (demuxer->video->sh) - ds_free_packs(demuxer->video); - - if (demuxer->audio->sh) - ds_free_packs(demuxer->audio); - - if (demuxer->sub->id >= 0) - ds_free_packs(demuxer->sub); + demux_flush(demuxer); ris = stream_control(demuxer->stream, STREAM_CTRL_SET_ANGLE, &angle); if (ris == STREAM_UNSUPPORTED) |