diff options
| author | 2009-07-28 13:32:50 -0700 | |
|---|---|---|
| committer | 2009-07-28 13:32:50 -0700 | |
| commit | 3cbaf0087f4bbed5a5f711d1a588e5ec9d369005 (patch) | |
| tree | 647d127ce171c6b4d5fdd90577cc59d7cf855754 | |
| parent | 7a45a2ec06e309b029bfb37ba1e783640560e80e (diff) | |
| parent | 970764d14b663324df2a4324a890988a606c14a1 (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.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 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) { |