Loading include/media/stagefright/OMXCodec.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ private: kRequiresAllocateBufferOnOutputPorts = 32, kRequiresAllocateBufferOnOutputPorts = 32, kRequiresFlushBeforeShutdown = 64, kRequiresFlushBeforeShutdown = 64, kDefersOutputBufferAllocation = 128, kDefersOutputBufferAllocation = 128, kDecoderLiesAboutNumberOfChannels = 256, }; }; struct BufferInfo { struct BufferInfo { Loading media/libstagefright/OMXCodec.cpp +10 −3 Original line number Original line Diff line number Diff line Loading @@ -290,6 +290,7 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) { } } if (!strcmp(componentName, "OMX.TI.MP3.decode")) { if (!strcmp(componentName, "OMX.TI.MP3.decode")) { quirks |= kNeedsFlushBeforeDisable; quirks |= kNeedsFlushBeforeDisable; quirks |= kDecoderLiesAboutNumberOfChannels; } } if (!strcmp(componentName, "OMX.TI.AAC.decode")) { if (!strcmp(componentName, "OMX.TI.AAC.decode")) { quirks |= kNeedsFlushBeforeDisable; quirks |= kNeedsFlushBeforeDisable; Loading Loading @@ -2817,7 +2818,9 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { if ((OMX_U32)numChannels != params.nChannels) { if ((OMX_U32)numChannels != params.nChannels) { LOGW("Codec outputs a different number of channels than " LOGW("Codec outputs a different number of channels than " "the input stream contains."); "the input stream contains (contains %d channels, " "codec outputs %ld channels).", numChannels, params.nChannels); } } mOutputFormat->setCString( mOutputFormat->setCString( Loading @@ -2825,8 +2828,12 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { // Use the codec-advertised number of channels, as some // Use the codec-advertised number of channels, as some // codecs appear to output stereo even if the input data is // codecs appear to output stereo even if the input data is // mono. // mono. If we know the codec lies about this information, mOutputFormat->setInt32(kKeyChannelCount, params.nChannels); // use the actual number of channels instead. mOutputFormat->setInt32( kKeyChannelCount, (mQuirks & kDecoderLiesAboutNumberOfChannels) ? numChannels : params.nChannels); // The codec-reported sampleRate is not reliable... // The codec-reported sampleRate is not reliable... mOutputFormat->setInt32(kKeySampleRate, sampleRate); mOutputFormat->setInt32(kKeySampleRate, sampleRate); Loading Loading
include/media/stagefright/OMXCodec.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -95,6 +95,7 @@ private: kRequiresAllocateBufferOnOutputPorts = 32, kRequiresAllocateBufferOnOutputPorts = 32, kRequiresFlushBeforeShutdown = 64, kRequiresFlushBeforeShutdown = 64, kDefersOutputBufferAllocation = 128, kDefersOutputBufferAllocation = 128, kDecoderLiesAboutNumberOfChannels = 256, }; }; struct BufferInfo { struct BufferInfo { Loading
media/libstagefright/OMXCodec.cpp +10 −3 Original line number Original line Diff line number Diff line Loading @@ -290,6 +290,7 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) { } } if (!strcmp(componentName, "OMX.TI.MP3.decode")) { if (!strcmp(componentName, "OMX.TI.MP3.decode")) { quirks |= kNeedsFlushBeforeDisable; quirks |= kNeedsFlushBeforeDisable; quirks |= kDecoderLiesAboutNumberOfChannels; } } if (!strcmp(componentName, "OMX.TI.AAC.decode")) { if (!strcmp(componentName, "OMX.TI.AAC.decode")) { quirks |= kNeedsFlushBeforeDisable; quirks |= kNeedsFlushBeforeDisable; Loading Loading @@ -2817,7 +2818,9 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { if ((OMX_U32)numChannels != params.nChannels) { if ((OMX_U32)numChannels != params.nChannels) { LOGW("Codec outputs a different number of channels than " LOGW("Codec outputs a different number of channels than " "the input stream contains."); "the input stream contains (contains %d channels, " "codec outputs %ld channels).", numChannels, params.nChannels); } } mOutputFormat->setCString( mOutputFormat->setCString( Loading @@ -2825,8 +2828,12 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) { // Use the codec-advertised number of channels, as some // Use the codec-advertised number of channels, as some // codecs appear to output stereo even if the input data is // codecs appear to output stereo even if the input data is // mono. // mono. If we know the codec lies about this information, mOutputFormat->setInt32(kKeyChannelCount, params.nChannels); // use the actual number of channels instead. mOutputFormat->setInt32( kKeyChannelCount, (mQuirks & kDecoderLiesAboutNumberOfChannels) ? numChannels : params.nChannels); // The codec-reported sampleRate is not reliable... // The codec-reported sampleRate is not reliable... mOutputFormat->setInt32(kKeySampleRate, sampleRate); mOutputFormat->setInt32(kKeySampleRate, sampleRate); Loading