diff options
| author | Andreas Huber <andih@google.com> | 2009-07-28 13:05:27 -0700 |
|---|---|---|
| committer | Andreas Huber <andih@google.com> | 2009-07-28 13:05:27 -0700 |
| commit | 970764d14b663324df2a4324a890988a606c14a1 (patch) | |
| tree | 29443752f4a785e8f4ba4c0a3441146266c612d1 | |
| parent | 8a432776d003247c12222d8dd6a30ea4621aa2d0 (diff) | |
| download | frameworks_base-970764d14b663324df2a4324a890988a606c14a1.zip frameworks_base-970764d14b663324df2a4324a890988a606c14a1.tar.gz frameworks_base-970764d14b663324df2a4324a890988a606c14a1.tar.bz2 | |
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.h | 3 | ||||
| -rw-r--r-- | media/libstagefright/OMXDecoder.cpp | 23 |
2 files changed, 21 insertions, 5 deletions
diff --git a/include/media/stagefright/OMXDecoder.h b/include/media/stagefright/OMXDecoder.h index 54a8047..e76fd4c 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 1fc2ba0..5e44999 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) { |
