From 9ee64f139ceff98ea5f9afcc2eaab42901922d56 Mon Sep 17 00:00:00 2001 From: Previr Rangroo Date: Tue, 28 Nov 2017 17:55:36 +1100 Subject: [PATCH] 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: Previr Rangroo --- include/media/AudioPresentationInfo.h | 79 +++++++++++++++++++ media/libstagefright/Android.bp | 1 + .../libstagefright/AudioPresentationInfo.cpp | 45 +++++++++++ 3 files changed, 125 insertions(+) create mode 100644 include/media/AudioPresentationInfo.h create mode 100644 media/libstagefright/AudioPresentationInfo.cpp diff --git a/include/media/AudioPresentationInfo.h b/include/media/AudioPresentationInfo.h new file mode 100644 index 0000000000..e91a992950 --- /dev/null +++ b/include/media/AudioPresentationInfo.h @@ -0,0 +1,79 @@ +/* + * 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 +#include + +#include +#include +#include +#include + +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 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> AudioPresentations; + +class AudioPresentationInfo : public RefBase { + public: + AudioPresentationInfo(); + + ~AudioPresentationInfo(); + + void addPresentation(sp presentation); + + size_t countPresentations() const; + + const sp getPresentation(size_t index) const; + + private: + AudioPresentations mPresentations; +}; + +} // namespace android + +#endif // AUDIO_PRESENTATION_INFO_H_ diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp index 01f73a14e5..6da1940438 100644 --- a/media/libstagefright/Android.bp +++ b/media/libstagefright/Android.bp @@ -35,6 +35,7 @@ cc_library_shared { "AACWriter.cpp", "AMRWriter.cpp", "AudioPlayer.cpp", + "AudioPresentationInfo.cpp", "AudioSource.cpp", "BufferImpl.cpp", "CCodec.cpp", diff --git a/media/libstagefright/AudioPresentationInfo.cpp b/media/libstagefright/AudioPresentationInfo.cpp new file mode 100644 index 0000000000..86e1859ce8 --- /dev/null +++ b/media/libstagefright/AudioPresentationInfo.cpp @@ -0,0 +1,45 @@ +/* + * 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 + +namespace android { + +AudioPresentationInfo::AudioPresentationInfo() { +} + +AudioPresentationInfo::~AudioPresentationInfo() { + mPresentations.clear(); +} + +void AudioPresentationInfo::addPresentation(sp 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 AudioPresentationInfo::getPresentation(size_t index) const { + return mPresentations[index]; +} + +} // namespace android