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 /media | |
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.
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/OMXDecoder.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
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) { |