Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e331c7b2 authored by Andreas Huber's avatar Andreas Huber
Browse files

The TI MP3 decoder lies about the number of channels it outputs, add a quirk for that.

parent 3ff37c1d
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -95,6 +95,7 @@ private:
        kRequiresAllocateBufferOnOutputPorts = 32,
        kRequiresAllocateBufferOnOutputPorts = 32,
        kRequiresFlushBeforeShutdown         = 64,
        kRequiresFlushBeforeShutdown         = 64,
        kDefersOutputBufferAllocation        = 128,
        kDefersOutputBufferAllocation        = 128,
        kDecoderLiesAboutNumberOfChannels    = 256,
    };
    };


    struct BufferInfo {
    struct BufferInfo {
+10 −3
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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(
@@ -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);