comparison libmpdemux/demux_ogg.c @ 11898:41efae8120b6

Cleanup and small improvement in seeking if the final_granulepos is known. Patch by Michael Behrisch <behrisch@informatik.hu-berlin.de>
author mosu
date Sat, 31 Jan 2004 09:38:01 +0000
parents 5c55de920ac0
children fdce1dd97638
comparison
equal deleted inserted replaced
11897:b3aea2d77cbe 11898:41efae8120b6
1088 1088
1089 os = &ogg_d->subs[ds->id]; 1089 os = &ogg_d->subs[ds->id];
1090 oss = &os->stream; 1090 oss = &os->stream;
1091 1091
1092 if(ogg_d->syncpoints) { 1092 if(ogg_d->syncpoints) {
1093 float time_pos = flags & 1 ? 0 : os->lastpos/ rate; 1093 gp = flags & 1 ? 0 : os->lastpos;
1094 if(flags & 2) { 1094 if(flags & 2)
1095 if(ogg_d->syncpoints) 1095 gp += ogg_d->syncpoints[ogg_d->num_syncpoint].granulepos * rel_seek_secs;
1096 time_pos += ogg_d->syncpoints[ogg_d->num_syncpoint].granulepos / rate * rel_seek_secs;
1097 else 1096 else
1098 time_pos += (demuxer->movi_end - demuxer->movi_start) * rel_seek_secs; 1097 gp += rel_seek_secs * rate;
1099 } else
1100 time_pos += rel_seek_secs;
1101
1102 gp = time_pos * rate;
1103 1098
1104 for(sp = 0; sp < ogg_d->num_syncpoint ; sp++) { 1099 for(sp = 0; sp < ogg_d->num_syncpoint ; sp++) {
1105 if(ogg_d->syncpoints[sp].granulepos >= gp) 1100 if(ogg_d->syncpoints[sp].granulepos >= gp) break;
1106 break;
1107 } 1101 }
1108 1102
1109 if(sp >= ogg_d->num_syncpoint) 1103 if(sp >= ogg_d->num_syncpoint)
1110 return; 1104 return;
1111 pos = ogg_d->syncpoints[sp].page_pos; 1105 pos = ogg_d->syncpoints[sp].page_pos;
1112 1106
1113 } else { 1107 } else {
1114 pos = flags & 1 ? 0 : ogg_d->pos; 1108 pos = flags & 1 ? 0 : ogg_d->pos;
1115 if(flags & 2) 1109 if(flags & 2)
1116 pos += (demuxer->movi_end - demuxer->movi_start) * rel_seek_secs; 1110 pos += (demuxer->movi_end - demuxer->movi_start) * rel_seek_secs;
1111 else {
1112 if (ogg_d->final_granulepos > 0)
1113 pos += rel_seek_secs * (demuxer->movi_end - demuxer->movi_start) / (ogg_d->final_granulepos / rate);
1117 else 1114 else
1118 pos += rel_seek_secs * ogg_d->pos / (os->lastpos / rate); 1115 pos += rel_seek_secs * ogg_d->pos / (os->lastpos / rate);
1116 }
1119 if (pos < 0) 1117 if (pos < 0)
1120 pos = 0; 1118 pos = 0;
1121 else if (pos > (demuxer->movi_end - demuxer->movi_start)) 1119 else if (pos > (demuxer->movi_end - demuxer->movi_start))
1122 return; 1120 return;
1123 } 1121 }