summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OggExtractor.cpp
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-07-17 10:52:36 -0700
committerLajos Molnar <lajos@google.com>2014-07-22 11:55:19 -0700
commitc75fa318ee6a775c6201424e952561e6b9d695e2 (patch)
tree63c3dda569781e3a04dac92ef133dda6d7050f6c /media/libstagefright/OggExtractor.cpp
parent2e25819fffbb23d42541ead1bf735f3a02fa0330 (diff)
downloadframeworks_av-c75fa318ee6a775c6201424e952561e6b9d695e2.zip
frameworks_av-c75fa318ee6a775c6201424e952561e6b9d695e2.tar.gz
frameworks_av-c75fa318ee6a775c6201424e952561e6b9d695e2.tar.bz2
stagefright: Fix seeking in MPEG4 container - do not merge
- seek based on user-visible timestamp - seek to previous, next and closest exactly - also update OggExtractor seek to same logic Bug: 12786906 Change-Id: I2d5e1fbff6469b6f081a284be2222a4cb50aa754
Diffstat (limited to 'media/libstagefright/OggExtractor.cpp')
-rw-r--r--media/libstagefright/OggExtractor.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/media/libstagefright/OggExtractor.cpp b/media/libstagefright/OggExtractor.cpp
index f3eeb03..1965ef9 100644
--- a/media/libstagefright/OggExtractor.cpp
+++ b/media/libstagefright/OggExtractor.cpp
@@ -320,22 +320,26 @@ status_t MyVorbisExtractor::seekToTime(int64_t timeUs) {
}
size_t left = 0;
- size_t right = mTableOfContents.size();
- while (left < right) {
- size_t center = left / 2 + right / 2 + (left & right & 1);
+ size_t right_plus_one = mTableOfContents.size();
+ while (left < right_plus_one) {
+ size_t center = left + (right_plus_one - left) / 2;
const TOCEntry &entry = mTableOfContents.itemAt(center);
if (timeUs < entry.mTimeUs) {
- right = center;
+ right_plus_one = center;
} else if (timeUs > entry.mTimeUs) {
left = center + 1;
} else {
- left = right = center;
+ left = center;
break;
}
}
+ if (left == mTableOfContents.size()) {
+ --left;
+ }
+
const TOCEntry &entry = mTableOfContents.itemAt(left);
ALOGV("seeking to entry %d / %d at offset %lld",