diff options
author | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-06-02 10:17:48 +0000 |
---|---|---|
committer | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-06-02 10:17:48 +0000 |
commit | e14b550cf6885d607105bdeafdcfaffab3b5f4bc (patch) | |
tree | cb7d16923440d6e7dbf9d8f212df80dfd12a42cb /libmpdemux | |
parent | 38ce550b2150800caea891a777a2876216b8bd14 (diff) | |
download | mpv-e14b550cf6885d607105bdeafdcfaffab3b5f4bc.tar.bz2 mpv-e14b550cf6885d607105bdeafdcfaffab3b5f4bc.tar.xz |
added and reused demux_flush() instead of emptying the demux_stream buffers;
patch by Bryan Henderson - giraffedata gmail com
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26958 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demuxer.c | 30 | ||||
-rw-r--r-- | libmpdemux/demuxer.h | 1 |
2 files changed, 11 insertions, 20 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 1b223785c5..a03de6c938 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -943,6 +943,12 @@ demuxer_t* demux_open(stream_t *vs,int file_format,int audio_id,int video_id,int } +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){ demux_stream_t *d_audio=demuxer->audio; demux_stream_t *d_video=demuxer->video; @@ -963,11 +969,9 @@ if(!demuxer->seekable){ return 0; } + demux_flush(demuxer); // clear demux buffers: - if(sh_audio){ ds_free_packs(d_audio);sh_audio->a_buffer_len=0;} - ds_free_packs(d_video); - ds_free_packs(demuxer->sub); - + if(sh_audio) sh_audio->a_buffer_len=0; demuxer->stream->eof=0; // clear eof flag demuxer->video->eof=0; demuxer->audio->eof=0; @@ -1197,14 +1201,7 @@ int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, int mode, float *seek_ 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, &chapter); if(ris != STREAM_UNSUPPORTED) @@ -1369,14 +1366,7 @@ int demuxer_set_angle(demuxer_t *demuxer, int angle) { angles = demuxer_angles_count(demuxer); 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) return -1; diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index ce7f872db7..22f139345e 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -369,6 +369,7 @@ static inline int avi_stream_id(unsigned int id){ } demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid,char* filename); +void demux_flush(demuxer_t *demuxer); int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags); demuxer_t* new_demuxers_demuxer(demuxer_t* vd, demuxer_t* ad, demuxer_t* sd); |