Mercurial > mplayer.hg
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 } |