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 <prang@dolby.com>
diff --git a/include/media/AudioPresentationInfo.h b/include/media/AudioPresentationInfo.h
new file mode 100644
index 0000000..e91a992
--- /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 <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_
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 01f73a1..6da1940 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -35,6 +35,7 @@
"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 0000000..86e1859
--- /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 <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