summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/matroska/MatroskaExtractor.cpp
diff options
context:
space:
mode:
authorVignesh Venkatasubramanian <vigneshv@google.com>2014-01-29 09:00:46 -0800
committerVignesh Venkatasubramanian <vigneshv@google.com>2014-03-03 13:30:38 -0800
commitbf927f8ec7979f2b64331c2b2f12a6a5dba05bca (patch)
tree74cd06e798e79839ab872ede1f57ab35a3b6afdf /media/libstagefright/matroska/MatroskaExtractor.cpp
parent3a005b3b19b750afe24577ae322aff4602ca2740 (diff)
downloadframeworks_av-bf927f8ec7979f2b64331c2b2f12a6a5dba05bca.zip
frameworks_av-bf927f8ec7979f2b64331c2b2f12a6a5dba05bca.tar.gz
frameworks_av-bf927f8ec7979f2b64331c2b2f12a6a5dba05bca.tar.bz2
Opus Matroska support in OpenMax
Adding Openmax component for libopus software decoder. This can decode opus audio files embedded in matroska containers. Change-Id: I7e0691cfc6d719c4e927b9efbd05a3143be49abc Note: This CL is part of adding Opus support to Android.
Diffstat (limited to 'media/libstagefright/matroska/MatroskaExtractor.cpp')
-rw-r--r--media/libstagefright/matroska/MatroskaExtractor.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index 6f69d0b..6ec9263 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -313,7 +313,7 @@ void BlockIterator::seek(
*actualFrameTimeUs = -1ll;
- const int64_t seekTimeNs = seekTimeUs * 1000ll;
+ const int64_t seekTimeNs = seekTimeUs * 1000ll - mExtractor->mSeekPreRollNs;
mkvparser::Segment* const pSegment = mExtractor->mSegment;
@@ -628,7 +628,8 @@ MatroskaExtractor::MatroskaExtractor(const sp<DataSource> &source)
mReader(new DataSourceReader(mDataSource)),
mSegment(NULL),
mExtractedThumbnails(false),
- mIsWebm(false) {
+ mIsWebm(false),
+ mSeekPreRollNs(0) {
off64_t size;
mIsLiveStreaming =
(mDataSource->flags()
@@ -919,6 +920,12 @@ void MatroskaExtractor::addTracks() {
err = addVorbisCodecInfo(
meta, codecPrivate, codecPrivateSize);
+ } else if (!strcmp("A_OPUS", codecID)) {
+ meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_OPUS);
+ meta->setData(kKeyOpusHeader, 0, codecPrivate, codecPrivateSize);
+ meta->setInt64(kKeyOpusCodecDelay, track->GetCodecDelay());
+ meta->setInt64(kKeyOpusSeekPreRoll, track->GetSeekPreRoll());
+ mSeekPreRollNs = track->GetSeekPreRoll();
} else if (!strcmp("A_MPEG/L3", codecID)) {
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
} else {