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

Commit 78bd91b1 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

stagefright: set pcm-encoding for raw audio tracks

Bug: 27172163
Change-Id: I4db7ace4e8cbf01939dedefbb1c54730e393530f
parent 28edbba6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ sp<MetaData> SineSource::getFormat() {
    meta->setInt32(kKeyChannelCount, mNumChannels);
    meta->setInt32(kKeySampleRate, mSampleRate);
    meta->setInt32(kKeyMaxInputSize, kBufferSize);
    meta->setInt32(kKeyPcmEncoding, kAudioEncodingPcm16bit);

    return meta;
}
+9 −0
Original line number Diff line number Diff line
@@ -68,6 +68,15 @@ extern const char *MEDIA_MIMETYPE_TEXT_CEA_608;
extern const char *MEDIA_MIMETYPE_TEXT_CEA_708;
extern const char *MEDIA_MIMETYPE_DATA_TIMED_ID3;

// These are values exported to JAVA API that need to be in sync with
// frameworks/base/media/java/android/media/AudioFormat.java. Unfortunately,
// they are not defined in frameworks/av, so defining them here.
enum AudioEncoding {
    kAudioEncodingPcm16bit = 2,
    kAudioEncodingPcm8bit = 3,
    kAudioEncodingPcmFloat = 4,
};

}  // namespace android

#endif  // MEDIA_DEFS_H_
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ enum {
    kKeyChannelCount      = '#chn',  // int32_t
    kKeyChannelMask       = 'chnm',  // int32_t
    kKeySampleRate        = 'srte',  // int32_t (audio sampling rate Hz)
    kKeyPcmEncoding       = 'PCMe',  // int32_t (audio encoding enum)
    kKeyFrameRate         = 'frmR',  // int32_t (video frame rate fps)
    kKeyBitRate           = 'brte',  // int32_t (bps)
    kKeyESDS              = 'esds',  // raw data
+2 −0
Original line number Diff line number Diff line
@@ -4668,6 +4668,7 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp<AMessage> &notify) {
                    notify->setString("mime", MEDIA_MIMETYPE_AUDIO_RAW);
                    notify->setInt32("channel-count", params.nChannels);
                    notify->setInt32("sample-rate", params.nSamplingRate);
                    notify->setInt32("pcm-encoding", kAudioEncodingPcm16bit);

                    if (mChannelMaskPresent) {
                        notify->setInt32("channel-mask", mChannelMask);
@@ -4850,6 +4851,7 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp<AMessage> &notify) {
                    notify->setString("mime", mime);
                    notify->setInt32("channel-count", params.nChannels);
                    notify->setInt32("sample-rate", params.nSamplingRate);
                    notify->setInt32("pcm-encoding", kAudioEncodingPcm16bit);
                    break;
                }

+13 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <media/AudioTrack.h>
#include <media/openmax/OMX_Audio.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ALookup.h>
#include <media/stagefright/foundation/ALooper.h>
#include <media/stagefright/AudioPlayer.h>
#include <media/stagefright/MediaDefs.h>
@@ -71,6 +72,14 @@ void AudioPlayer::setSource(const sp<IMediaSource> &source) {
    mSource = source;
}

ALookup<audio_format_t, int32_t> sAudioFormatToPcmEncoding {
    {
        { AUDIO_FORMAT_PCM_16_BIT, kAudioEncodingPcm16bit },
        { AUDIO_FORMAT_PCM_8_BIT,  kAudioEncodingPcm8bit  },
        { AUDIO_FORMAT_PCM_FLOAT,  kAudioEncodingPcmFloat },
    }
};

status_t AudioPlayer::start(bool sourceAlreadyStarted) {
    CHECK(!mStarted);
    CHECK(mSource != NULL);
@@ -129,6 +138,10 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {
    }

    audio_format_t audioFormat = AUDIO_FORMAT_PCM_16_BIT;
    int32_t pcmEncoding;
    if (format->findInt32(kKeyPcmEncoding, &pcmEncoding)) {
        sAudioFormatToPcmEncoding.map(pcmEncoding, &audioFormat);
    }

    if (useOffload()) {
        if (mapMimeToAudioFormat(audioFormat, mime) != OK) {
Loading