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

Commit 74568a7f authored by Aiguo's avatar Aiguo
Browse files

nuplayer: fix audioFormat error in offload mode



For audio with PCM_FLOAT and audio/raw,
Nuplayer uses incorrect audio format to determine if offload is supported.

bug:377433161

Change-Id: I6966a49706365076bcbe78876ecd07743d97298a
Signed-off-by: default avatarAiguo <aiguo.feng@amlogic.corp-partner.google.com>
parent 01dd111f
Loading
Loading
Loading
Loading
+0 −18
Original line number Diff line number Diff line
@@ -98,24 +98,6 @@ const NuPlayer::Renderer::PcmInfo NuPlayer::Renderer::AUDIO_PCMINFO_INITIALIZER
// static
const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll;

static audio_format_t constexpr audioFormatFromEncoding(int32_t pcmEncoding) {
    switch (pcmEncoding) {
    case kAudioEncodingPcmFloat:
        return AUDIO_FORMAT_PCM_FLOAT;
    case kAudioEncodingPcm32bit:
        return AUDIO_FORMAT_PCM_32_BIT;
    case kAudioEncodingPcm24bitPacked:
        return AUDIO_FORMAT_PCM_24_BIT_PACKED;
    case kAudioEncodingPcm16bit:
        return AUDIO_FORMAT_PCM_16_BIT;
    case kAudioEncodingPcm8bit:
        return AUDIO_FORMAT_PCM_8_BIT; // TODO: do we want to support this?
    default:
        ALOGE("%s: Invalid encoding: %d", __func__, pcmEncoding);
        return AUDIO_FORMAT_INVALID;
    }
}

NuPlayer::Renderer::Renderer(
        const sp<MediaPlayerBase::AudioSink> &sink,
        const sp<MediaClock> &mediaClock,
+24 −0
Original line number Diff line number Diff line
@@ -2406,6 +2406,24 @@ void mapAACProfileToAudioFormat( audio_format_t& format, uint64_t eAacProfile)
    return;
}

audio_format_t audioFormatFromEncoding(int32_t pcmEncoding) {
    switch (pcmEncoding) {
    case kAudioEncodingPcmFloat:
        return AUDIO_FORMAT_PCM_FLOAT;
    case kAudioEncodingPcm32bit:
        return AUDIO_FORMAT_PCM_32_BIT;
    case kAudioEncodingPcm24bitPacked:
        return AUDIO_FORMAT_PCM_24_BIT_PACKED;
    case kAudioEncodingPcm16bit:
        return AUDIO_FORMAT_PCM_16_BIT;
    case kAudioEncodingPcm8bit:
        return AUDIO_FORMAT_PCM_8_BIT; // TODO: do we want to support this?
    default:
        ALOGE("%s: Invalid encoding: %d", __func__, pcmEncoding);
        return AUDIO_FORMAT_INVALID;
    }
}

status_t getAudioOffloadInfo(const sp<MetaData>& meta, bool hasVideo,
        bool isStreaming, audio_stream_type_t streamType, audio_offload_info_t *info)
{
@@ -2425,6 +2443,12 @@ status_t getAudioOffloadInfo(const sp<MetaData>& meta, bool hasVideo,
        ALOGV("Mime type \"%s\" mapped to audio_format %d", mime, info->format);
    }

    int32_t pcmEncoding;
    if (meta->findInt32(kKeyPcmEncoding, &pcmEncoding)) {
        info->format = audioFormatFromEncoding(pcmEncoding);
        ALOGV("audio_format use kKeyPcmEncoding value %d first", info->format);
    }

    if (AUDIO_FORMAT_INVALID == info->format) {
        // can't offload if we don't know what the source format is
        ALOGE("mime type \"%s\" not a known audio format", mime);
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,9 @@ const uint8_t *findNextNalStartCode(const uint8_t *data, size_t length);
// Convert a MIME type to a AudioSystem::audio_format
status_t mapMimeToAudioFormat(audio_format_t& format, const char* mime);

// Convert a pcm-encoding to a AudioSystem::audio_format
audio_format_t audioFormatFromEncoding(int32_t pcmEncoding);

// Convert a aac profile to a AudioSystem::audio_format
void mapAACProfileToAudioFormat(audio_format_t& format, uint64_t eAacProfile);