summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@symbol.nonexistent.invalid>2008-06-04 08:10:48 +0300
committerUoti Urpala <uau@symbol.nonexistent.invalid>2008-06-04 08:10:48 +0300
commitd5c868325cefcd5fad53361d1dfdc9757674eb70 (patch)
treea838e509fdc2468220466e6337097b3ef590b00c /libmpdemux/demuxer.c
parent0cb5123c8f65b3d7715deb22ce8430eccc21996e (diff)
parent5b3834c5d1033f05d798278c33782c5563247062 (diff)
downloadmpv-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.c49
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)