diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-11-01 16:12:53 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-11-01 16:12:53 +0000 |
commit | 754c2b98ef50d42cb1ac794d44fb1b32496569a1 (patch) | |
tree | c2b02f9ff41973e48c2e735207208dfbd2e76da8 /libmpdemux/demux_ogg.c | |
parent | af89106f3fec03c444ffa91a9fbe4df3438084e0 (diff) | |
download | mpv-754c2b98ef50d42cb1ac794d44fb1b32496569a1.tar.bz2 mpv-754c2b98ef50d42cb1ac794d44fb1b32496569a1.tar.xz |
Fix two (loosely) related bugs: massive A-V desync with -audiofile (bugzilla
bug #375, sh_audio->delay must only be set when seeking, not at every packet)
and not switching to the next file when seeking hits eof.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16885 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_ogg.c')
-rw-r--r-- | libmpdemux/demux_ogg.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index a991d05a40..be0e4c9899 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -554,8 +554,6 @@ static int demux_ogg_add_packet(demux_stream_t* ds,ogg_stream_t* os,int id,ogg_p if (ds == d->video && ((sh_audio_t*)ds->sh)->format == FOURCC_THEORA) context = ((sh_video_t *)ds->sh)->context; data = demux_ogg_read_packet(os,pack,context,&pts,&flags,samplesize); - if(d->video->id < 0) - ((sh_audio_t*)ds->sh)->delay = pts; /// Clear subtitles if necessary (for broken files) if ((clear_sub > 0) && (pts >= clear_sub)) { @@ -1471,7 +1469,8 @@ static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) { } } if (pos < 0) pos = 0; - if (pos > (demuxer->movi_end - demuxer->movi_start)) return; + if (pos > (demuxer->movi_end - demuxer->movi_start)) + pos = demuxer->movi_end - demuxer->movi_start; } // if(ogg_d->syncpoints) while(1) { @@ -1500,8 +1499,8 @@ static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) { char* buf = ogg_sync_buffer(sync,BLOCK_SIZE); int len = stream_read(demuxer->stream,buf,BLOCK_SIZE); if(len == 0 && demuxer->stream->eof) { - mp_msg(MSGT_DEMUX,MSGL_ERR,"EOF while trying to seek !!!!\n"); - break; + mp_msg(MSGT_DEMUX,MSGL_V,"EOF while trying to seek !!!!\n"); + return; } ogg_sync_wrote(sync,len); continue; @@ -1556,6 +1555,8 @@ static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) { vo_osd_changed(OSDTYPE_SUBTITLE); clear_sub = -1; demux_ogg_add_packet(ds,os,ds->id,&op); + if (demuxer->video->id < 0) + sh_audio->delay = pts; return; } } |