summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android (Google) Code Review <android-gerrit@google.com> 2009-07-28 13:32:50 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2009-07-28 13:32:50 -0700
commit3cbaf0087f4bbed5a5f711d1a588e5ec9d369005 (patch)
tree647d127ce171c6b4d5fdd90577cc59d7cf855754
parent7a45a2ec06e309b029bfb37ba1e783640560e80e (diff)
parent970764d14b663324df2a4324a890988a606c14a1 (diff)
Merge change 8845
* changes: While other OMX nodes appear to now have switched to using microseconds to timestamp buffers, at least the TI AAC and MP3 decoders still use milliseconds.
-rw-r--r--include/media/stagefright/OMXDecoder.h3
-rw-r--r--media/libstagefright/OMXDecoder.cpp23
2 files changed, 21 insertions, 5 deletions
diff --git a/include/media/stagefright/OMXDecoder.h b/include/media/stagefright/OMXDecoder.h
index 54a80474e81d..e76fd4ceadd1 100644
--- a/include/media/stagefright/OMXDecoder.h
+++ b/include/media/stagefright/OMXDecoder.h
@@ -83,7 +83,8 @@ private:
kDoesntProperlyFlushAllPortsAtOnce = 8,
kRequiresAllocateBufferOnInputPorts = 16,
kRequiresAllocateBufferOnOutputPorts = 32,
- kRequiresLoadedToIdleAfterAllocation = 64
+ kRequiresLoadedToIdleAfterAllocation = 64,
+ kMeasuresTimeInMilliseconds = 128,
};
OMXClient *mClient;
diff --git a/media/libstagefright/OMXDecoder.cpp b/media/libstagefright/OMXDecoder.cpp
index 1fc2ba09edfc..5e449995a4e8 100644
--- a/media/libstagefright/OMXDecoder.cpp
+++ b/media/libstagefright/OMXDecoder.cpp
@@ -154,6 +154,10 @@ OMXDecoder *OMXDecoder::Create(
if (!strncmp(codec, "OMX.qcom.video.", 15)) {
quirks |= kRequiresLoadedToIdleAfterAllocation;
}
+ if (!strcmp(codec, "OMX.TI.AAC.decode")
+ || !strcmp(codec, "OMX.TI.MP3.decode")) {
+ quirks |= kMeasuresTimeInMilliseconds;
+ }
OMXDecoder *decoder = new OMXDecoder(client, node, mime, codec, quirks);
@@ -1497,7 +1501,11 @@ void OMXDecoder::onRealEmptyBufferDone(IOMX::buffer_id buffer) {
OMX_TICKS timestamp = 0;
if (success) {
- timestamp = ((OMX_S64)units * 1000000) / scale;
+ if (mQuirks & kMeasuresTimeInMilliseconds) {
+ timestamp = ((OMX_S64)units * 1000) / scale;
+ } else {
+ timestamp = ((OMX_S64)units * 1000000) / scale;
+ }
}
input_buffer->release();
@@ -1523,9 +1531,16 @@ void OMXDecoder::onRealFillBufferDone(const omx_message &msg) {
media_buffer->meta_data()->clear();
- media_buffer->meta_data()->setInt32(
- kKeyTimeUnits,
- (msg.u.extended_buffer_data.timestamp + 500) / 1000);
+ if (mQuirks & kMeasuresTimeInMilliseconds) {
+ media_buffer->meta_data()->setInt32(
+ kKeyTimeUnits,
+ msg.u.extended_buffer_data.timestamp);
+ } else {
+ media_buffer->meta_data()->setInt32(
+ kKeyTimeUnits,
+ (msg.u.extended_buffer_data.timestamp + 500) / 1000);
+ }
+
media_buffer->meta_data()->setInt32(kKeyTimeScale, 1000);
if (msg.u.extended_buffer_data.flags & OMX_BUFFERFLAG_SYNCFRAME) {