mirror of https://github.com/mpv-player/mpv
bunkus: Fixed Ogg/Ogm seeking by discarding the first packet after the seek which may be incomplete
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8656 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
ac3b6c6552
commit
673897aa36
|
@ -901,7 +901,7 @@ void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) {
|
||||||
sh_audio_t* sh_audio = demuxer->audio->sh;
|
sh_audio_t* sh_audio = demuxer->audio->sh;
|
||||||
ogg_packet op;
|
ogg_packet op;
|
||||||
float rate;
|
float rate;
|
||||||
int i,sp;
|
int i,sp,first;
|
||||||
vorbis_info* vi = NULL;
|
vorbis_info* vi = NULL;
|
||||||
int64_t gp = 0;
|
int64_t gp = 0;
|
||||||
off_t pos;
|
off_t pos;
|
||||||
|
@ -961,6 +961,7 @@ void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) {
|
||||||
ogg_d->pos = pos;
|
ogg_d->pos = pos;
|
||||||
ogg_d->last_size = 0;
|
ogg_d->last_size = 0;
|
||||||
|
|
||||||
|
first = 1;
|
||||||
while(1) {
|
while(1) {
|
||||||
int np;
|
int np;
|
||||||
ogg_d->pos += ogg_d->last_size;
|
ogg_d->pos += ogg_d->last_size;
|
||||||
|
@ -992,7 +993,13 @@ void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) {
|
||||||
continue;
|
continue;
|
||||||
else if(np == 0)
|
else if(np == 0)
|
||||||
break;
|
break;
|
||||||
|
if (first) { /* Discard the first packet as it's probably broken,
|
||||||
|
and we don't have any other means to decide whether it is
|
||||||
|
complete or not. */
|
||||||
|
first = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if( ((*op.packet & PACKET_IS_SYNCPOINT) || os->vorbis ) &&
|
if( ((*op.packet & PACKET_IS_SYNCPOINT) || os->vorbis ) &&
|
||||||
(!ogg_d->syncpoints || op.granulepos >= gp) ) {
|
(!ogg_d->syncpoints || op.granulepos >= gp) ) {
|
||||||
demux_ogg_add_packet(ds,os,&op);
|
demux_ogg_add_packet(ds,os,&op);
|
||||||
|
|
Loading…
Reference in New Issue