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

Commit 9ee64f13 authored by Previr Rangroo's avatar Previr Rangroo Committed by Mikhail Naganov
Browse files

Add presentation API interface



This adds AudioPresentationInfo interface to enable applications
to query and receive audio presentation
information from multiplexed data sources (e.g. MP4 or MPEG2-TS).

Bug: 63901775
Test: make
Change-Id: I3156cc8594ae153fe8cd2dedc191bfab207f5203
Signed-off-by: default avatarPrevir Rangroo <prang@dolby.com>
parent 254d783c
Loading
Loading
Loading
Loading
+79 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef AUDIO_PRESENTATION_INFO_H_
#define AUDIO_PRESENTATION_INFO_H_

#include <sstream>
#include <stdint.h>

#include <utils/KeyedVector.h>
#include <utils/RefBase.h>
#include <utils/String8.h>
#include <utils/Vector.h>

namespace android {

enum mastering_indication {
    MASTERING_NOT_INDICATED,
    MASTERED_FOR_STEREO,
    MASTERED_FOR_SURROUND,
    MASTERED_FOR_3D,
    MASTERED_FOR_HEADPHONE,
};

struct AudioPresentation : public RefBase {
    int32_t mPresentationId;
    int32_t mProgramId;
    KeyedVector<String8, String8> mLabels;
    String8 mLanguage;
    int32_t mMasteringIndication;
    bool mAudioDescriptionAvailable;
    bool mSpokenSubtitlesAvailable;
    bool mDialogueEnhancementAvailable;

    AudioPresentation() {
        mPresentationId = -1;
        mProgramId = -1;
        mLanguage = "";
        mMasteringIndication = MASTERING_NOT_INDICATED;
        mAudioDescriptionAvailable = false;
        mSpokenSubtitlesAvailable = false;
        mDialogueEnhancementAvailable = false;
    }
};

typedef Vector<sp<AudioPresentation>> AudioPresentations;

class AudioPresentationInfo : public RefBase {
 public:
    AudioPresentationInfo();

    ~AudioPresentationInfo();

    void addPresentation(sp<AudioPresentation> presentation);

    size_t countPresentations() const;

    const sp<AudioPresentation> getPresentation(size_t index) const;

 private:
    AudioPresentations mPresentations;
};

}  // namespace android

#endif  // AUDIO_PRESENTATION_INFO_H_
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ cc_library_shared {
        "AACWriter.cpp",
        "AMRWriter.cpp",
        "AudioPlayer.cpp",
        "AudioPresentationInfo.cpp",
        "AudioSource.cpp",
        "BufferImpl.cpp",
        "CCodec.cpp",
+45 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// #define LOG_NDEBUG 0
#define LOG_TAG "AudioPresentationInfo"

#include <media/AudioPresentationInfo.h>

namespace android {

AudioPresentationInfo::AudioPresentationInfo() {
}

AudioPresentationInfo::~AudioPresentationInfo() {
    mPresentations.clear();
}

void AudioPresentationInfo::addPresentation(sp<AudioPresentation> presentation) {
    mPresentations.push(presentation);
}

size_t AudioPresentationInfo::countPresentations() const {
    return mPresentations.size();
}

// Returns an AudioPresentation for the given valid index
// index must be >=0 and < countPresentations()
const sp<AudioPresentation> AudioPresentationInfo::getPresentation(size_t index) const {
    return mPresentations[index];
}

}  // namespace android