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

Commit 4dbbcf67 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9101843 from 68436cf9 to tm-qpr1-release

Change-Id: I11beb09b1868396e12c74e00d66d1ab92f6d03f7
parents 357d2592 68436cf9
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -5897,12 +5897,18 @@ status_t MPEG4Source::parseTrackFragmentRun(off64_t offset, off64_t size) {
            return -EINVAL;
        }

        int32_t dataOffsetDelta;
        if (!mDataSource->getUInt32(offset, (uint32_t*)&dataOffsetDelta)) {
        uint32_t dataOffsetDelta;
        if (!mDataSource->getUInt32(offset, &dataOffsetDelta)) {
            return ERROR_MALFORMED;
        }

        dataOffset = mTrackFragmentHeaderInfo.mBaseDataOffset + dataOffsetDelta;
        if (__builtin_add_overflow(
                mTrackFragmentHeaderInfo.mBaseDataOffset, dataOffsetDelta, &dataOffset)) {
            ALOGW("b/232242894 mBaseDataOffset(%" PRIu64 ") + dataOffsetDelta(%u) overflows uint64",
                    mTrackFragmentHeaderInfo.mBaseDataOffset, dataOffsetDelta);
            android_errorWriteLog(0x534e4554, "232242894");
            return ERROR_MALFORMED;
        }

        offset += 4;
        size -= 4;
@@ -6036,7 +6042,12 @@ status_t MPEG4Source::parseTrackFragmentRun(off64_t offset, off64_t size) {
            return NO_MEMORY;
        }

        dataOffset += sampleSize;
        if (__builtin_add_overflow(dataOffset, sampleSize, &dataOffset)) {
            ALOGW("b/232242894 dataOffset(%" PRIu64 ") + sampleSize(%u) overflows uint64",
                    dataOffset, sampleSize);
            android_errorWriteLog(0x534e4554, "232242894");
            return ERROR_MALFORMED;
        }
    }

    mTrackFragmentHeaderInfo.mDataOffset = dataOffset;
+13 −4
Original line number Diff line number Diff line
@@ -4102,10 +4102,19 @@ bool AudioFlinger::PlaybackThread::threadLoop()
                                       mEffectBufferFormat,
                                       mNormalFrameCount * mHapticChannelCount);
            }

            memcpy_by_audio_format(mSinkBuffer, mFormat, effectBuffer, mEffectBufferFormat,
                    mNormalFrameCount * (mChannelCount + mHapticChannelCount));

            const size_t framesToCopy = mNormalFrameCount * (mChannelCount + mHapticChannelCount);
            if (mFormat == AUDIO_FORMAT_PCM_FLOAT &&
                    mEffectBufferFormat == AUDIO_FORMAT_PCM_FLOAT) {
                // Clamp PCM float values more than this distance from 0 to insulate
                // a HAL which doesn't handle NaN correctly.
                static constexpr float HAL_FLOAT_SAMPLE_LIMIT = 2.0f;
                memcpy_to_float_from_float_with_clamping(static_cast<float*>(mSinkBuffer),
                        static_cast<const float*>(effectBuffer),
                        framesToCopy, HAL_FLOAT_SAMPLE_LIMIT /* absMax */);
            } else {
                memcpy_by_audio_format(mSinkBuffer, mFormat,
                        effectBuffer, mEffectBufferFormat, framesToCopy);
            }
            // The sample data is partially interleaved when haptic channels exist,
            // we need to adjust channels here.
            if (mHapticChannelCount > 0) {
+3 −0
Original line number Diff line number Diff line
@@ -4093,6 +4093,9 @@ audio_direct_mode_t AudioPolicyManager::getDirectPlaybackSupport(const audio_att

status_t AudioPolicyManager::getDirectProfilesForAttributes(const audio_attributes_t* attr,
                                                AudioProfileVector& audioProfilesVector) {
    if (mEffects.isNonOffloadableEffectEnabled()) {
        return OK;
    }
    AudioDeviceTypeAddrVector devices;
    status_t status = getDevicesForAttributes(*attr, &devices, false /* forVolume */);
    if (status != OK) {