Move MetaData from foundation to libmediaextractor
Test: cts-tradefed run cts-dev --module CtsMediaTestCases --compatibility:module-arg
Change-Id: I2c5e05f83f039813cb4c862e929315e623d5d7fa
CtsMediaTestCases:include-annotation:android.platform.test.annotations.RequiresDevice
Bug: 67908544
diff --git a/media/extractors/aac/AACExtractor.cpp b/media/extractors/aac/AACExtractor.cpp
index 17d6aee..6f28374 100644
--- a/media/extractors/aac/AACExtractor.cpp
+++ b/media/extractors/aac/AACExtractor.cpp
@@ -21,7 +21,6 @@
#include "AACExtractor.h"
#include <media/DataSource.h>
#include <media/MediaSourceBase.h>
-#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -29,6 +28,7 @@
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MetaDataUtils.h>
#include <utils/String8.h>
namespace android {
diff --git a/media/extractors/aac/Android.bp b/media/extractors/aac/Android.bp
index 7937a29..92575f2 100644
--- a/media/extractors/aac/Android.bp
+++ b/media/extractors/aac/Android.bp
@@ -13,6 +13,10 @@
"libutils",
],
+ static_libs: [
+ "libstagefright_metadatautils",
+ ],
+
name: "libaacextractor",
relative_install_path: "extractors",
diff --git a/media/extractors/mkv/Android.bp b/media/extractors/mkv/Android.bp
index 0301ffa..c6cd753 100644
--- a/media/extractors/mkv/Android.bp
+++ b/media/extractors/mkv/Android.bp
@@ -18,6 +18,7 @@
static_libs: [
"libstagefright_flacdec",
+ "libstagefright_metadatautils",
"libwebm",
],
diff --git a/media/extractors/mkv/MatroskaExtractor.cpp b/media/extractors/mkv/MatroskaExtractor.cpp
index 7baccb7..6df0012 100644
--- a/media/extractors/mkv/MatroskaExtractor.cpp
+++ b/media/extractors/mkv/MatroskaExtractor.cpp
@@ -28,12 +28,12 @@
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/foundation/ColorUtils.h>
-#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MetaDataUtils.h>
#include <utils/String8.h>
#include <inttypes.h>
diff --git a/media/libmediaextractor/Android.bp b/media/libmediaextractor/Android.bp
index 984d4f1..4071fba 100644
--- a/media/libmediaextractor/Android.bp
+++ b/media/libmediaextractor/Android.bp
@@ -29,6 +29,7 @@
"MediaSourceBase.cpp",
"MediaSource.cpp",
"MediaExtractor.cpp",
+ "MetaData.cpp",
],
clang: true,
diff --git a/media/libstagefright/foundation/MetaData.cpp b/media/libmediaextractor/MetaData.cpp
similarity index 100%
rename from media/libstagefright/foundation/MetaData.cpp
rename to media/libmediaextractor/MetaData.cpp
diff --git a/media/libstagefright/include/media/stagefright/MetaData.h b/media/libmediaextractor/include/media/stagefright/MetaData.h
similarity index 100%
rename from media/libstagefright/include/media/stagefright/MetaData.h
rename to media/libmediaextractor/include/media/stagefright/MetaData.h
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 90f6ed7..c5abe9b 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -26,6 +26,28 @@
shared_libs: ["libmedia"],
}
+cc_library_static {
+ name: "libstagefright_metadatautils",
+
+ srcs: ["MetaDataUtils.cpp"],
+
+ cflags: [
+ "-Werror",
+ "-Wall",
+ ],
+ sanitize: {
+ misc_undefined: [
+ "signed-integer-overflow",
+ ],
+ cfi: true,
+ diag: {
+ cfi: true,
+ },
+ },
+
+ shared_libs: ["libmedia"],
+}
+
cc_library_shared {
name: "libstagefright",
@@ -78,8 +100,8 @@
"StagefrightMetadataRetriever.cpp",
"SurfaceMediaSource.cpp",
"SurfaceUtils.cpp",
- "ThrottledSource.cpp",
"Utils.cpp",
+ "ThrottledSource.cpp",
"VideoFrameScheduler.cpp",
],
diff --git a/media/libstagefright/MetaDataUtils.cpp b/media/libstagefright/MetaDataUtils.cpp
new file mode 100644
index 0000000..fd51a2c
--- /dev/null
+++ b/media/libstagefright/MetaDataUtils.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 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 "MetaDataUtils"
+
+#include <media/stagefright/foundation/avc_utils.h>
+#include <media/stagefright/foundation/ABuffer.h>
+#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MetaDataUtils.h>
+
+namespace android {
+
+sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
+ int32_t width;
+ int32_t height;
+ int32_t sarWidth;
+ int32_t sarHeight;
+ sp<ABuffer> csd = MakeAVCCodecSpecificData(accessUnit, &width, &height, &sarWidth, &sarHeight);
+ if (csd == nullptr) {
+ return nullptr;
+ }
+ sp<MetaData> meta = new MetaData;
+ meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
+
+ meta->setData(kKeyAVCC, kTypeAVCC, csd->data(), csd->size());
+ meta->setInt32(kKeyWidth, width);
+ meta->setInt32(kKeyHeight, height);
+ if (sarWidth > 0 && sarHeight > 0) {
+ meta->setInt32(kKeySARWidth, sarWidth);
+ meta->setInt32(kKeySARHeight, sarHeight);
+ }
+ return meta;
+}
+
+sp<MetaData> MakeAACCodecSpecificData(
+ unsigned profile, unsigned sampling_freq_index,
+ unsigned channel_configuration) {
+ int32_t sampleRate;
+ int32_t channelCount;
+ sp<ABuffer> csd = MakeAACCodecSpecificData(profile, sampling_freq_index,
+ channel_configuration, &sampleRate, &channelCount);
+ if (csd == nullptr) {
+ return nullptr;
+ }
+ sp<MetaData> meta = new MetaData;
+ meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_AAC);
+
+ meta->setInt32(kKeySampleRate, sampleRate);
+ meta->setInt32(kKeyChannelCount, channelCount);
+
+ meta->setData(kKeyESDS, 0, csd->data(), csd->size());
+ return meta;
+}
+
+} // namespace android
diff --git a/media/libstagefright/foundation/Android.bp b/media/libstagefright/foundation/Android.bp
index 2258e2c..b343c16 100644
--- a/media/libstagefright/foundation/Android.bp
+++ b/media/libstagefright/foundation/Android.bp
@@ -64,7 +64,6 @@
"ColorUtils.cpp",
"MediaDefs.cpp",
"MediaKeys.cpp",
- "MetaData.cpp",
"ParsedMessage.cpp",
"avc_utils.cpp",
"base64.cpp",
diff --git a/media/libstagefright/foundation/avc_utils.cpp b/media/libstagefright/foundation/avc_utils.cpp
index bfaeb21..b58474c 100644
--- a/media/libstagefright/foundation/avc_utils.cpp
+++ b/media/libstagefright/foundation/avc_utils.cpp
@@ -383,7 +383,9 @@
}
}
-sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
+sp<ABuffer> MakeAVCCodecSpecificData(
+ const sp<ABuffer> &accessUnit, int32_t *width, int32_t *height,
+ int32_t *sarWidth, int32_t *sarHeight) {
const uint8_t *data = accessUnit->data();
size_t size = accessUnit->size();
@@ -392,10 +394,8 @@
return NULL;
}
- int32_t width, height;
- int32_t sarWidth, sarHeight;
FindAVCDimensions(
- seqParamSet, &width, &height, &sarWidth, &sarHeight);
+ seqParamSet, width, height, sarWidth, sarHeight);
sp<ABuffer> picParamSet = FindNAL(data, size, 8);
CHECK(picParamSet != NULL);
@@ -434,38 +434,32 @@
hexdump(seqParamSet->data(), seqParamSet->size());
#endif
- sp<MetaData> meta = new MetaData;
- meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
- meta->setData(kKeyAVCC, kTypeAVCC, csd->data(), csd->size());
- meta->setInt32(kKeyWidth, width);
- meta->setInt32(kKeyHeight, height);
-
- if ((sarWidth > 0 && sarHeight > 0) && (sarWidth != 1 || sarHeight != 1)) {
- // We treat *:0 and 0:* (unspecified) as 1:1.
-
- meta->setInt32(kKeySARWidth, sarWidth);
- meta->setInt32(kKeySARHeight, sarHeight);
-
- ALOGI("found AVC codec config (%d x %d, %s-profile level %d.%d) "
- "SAR %d : %d",
- width,
- height,
- AVCProfileToString(profile),
- level / 10,
- level % 10,
- sarWidth,
- sarHeight);
- } else {
- ALOGI("found AVC codec config (%d x %d, %s-profile level %d.%d)",
- width,
- height,
- AVCProfileToString(profile),
- level / 10,
- level % 10);
+ if (sarWidth != nullptr && sarHeight != nullptr) {
+ if ((*sarWidth > 0 && *sarHeight > 0) && (*sarWidth != 1 || *sarHeight != 1)) {
+ ALOGI("found AVC codec config (%d x %d, %s-profile level %d.%d) "
+ "SAR %d : %d",
+ *width,
+ *height,
+ AVCProfileToString(profile),
+ level / 10,
+ level % 10,
+ *sarWidth,
+ *sarHeight);
+ } else {
+ // We treat *:0 and 0:* (unspecified) as 1:1.
+ *sarWidth = 0;
+ *sarHeight = 0;
+ ALOGI("found AVC codec config (%d x %d, %s-profile level %d.%d)",
+ *width,
+ *height,
+ AVCProfileToString(profile),
+ level / 10,
+ level % 10);
+ }
}
- return meta;
+ return csd;
}
bool IsIDR(const uint8_t *data, size_t size) {
@@ -543,19 +537,17 @@
return layerId;
}
-sp<MetaData> MakeAACCodecSpecificData(
+sp<ABuffer> MakeAACCodecSpecificData(
unsigned profile, unsigned sampling_freq_index,
- unsigned channel_configuration) {
- sp<MetaData> meta = new MetaData;
- meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_AAC);
-
+ unsigned channel_configuration, int32_t *sampleRate,
+ int32_t *channelCount) {
CHECK_LE(sampling_freq_index, 11u);
static const int32_t kSamplingFreq[] = {
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050,
16000, 12000, 11025, 8000
};
- meta->setInt32(kKeySampleRate, kSamplingFreq[sampling_freq_index]);
- meta->setInt32(kKeyChannelCount, channel_configuration);
+ *sampleRate = kSamplingFreq[sampling_freq_index];
+ *channelCount = channel_configuration;
static const uint8_t kStaticESDS[] = {
0x03, 22,
@@ -585,9 +577,7 @@
csd->data()[sizeof(kStaticESDS) + 1] =
((sampling_freq_index << 7) & 0x80) | (channel_configuration << 3);
- meta->setData(kKeyESDS, 0, csd->data(), csd->size());
-
- return meta;
+ return csd;
}
bool ExtractDimensionsFromVOLHeader(
diff --git a/media/libstagefright/foundation/include/media/stagefright/foundation/avc_utils.h b/media/libstagefright/foundation/include/media/stagefright/foundation/avc_utils.h
index a939f12..2ca66fb 100644
--- a/media/libstagefright/foundation/include/media/stagefright/foundation/avc_utils.h
+++ b/media/libstagefright/foundation/include/media/stagefright/foundation/avc_utils.h
@@ -80,8 +80,9 @@
const uint8_t **nalStart, size_t *nalSize,
bool startCodeFollows = false);
-class MetaData;
-sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit);
+sp<ABuffer> MakeAVCCodecSpecificData(
+ const sp<ABuffer> &accessUnit, int32_t *width, int32_t *height,
+ int32_t *sarWidth = nullptr, int32_t *sarHeight = nullptr);
bool IsIDR(const uint8_t *data, size_t size);
bool IsAVCReferenceFrame(const sp<ABuffer> &accessUnit);
@@ -89,9 +90,10 @@
const char *AVCProfileToString(uint8_t profile);
-sp<MetaData> MakeAACCodecSpecificData(
+sp<ABuffer> MakeAACCodecSpecificData(
unsigned profile, unsigned sampling_freq_index,
- unsigned channel_configuration);
+ unsigned channel_configuration, int32_t *sampleRate,
+ int32_t *channelCount);
// Given an MPEG4 video VOL-header chunk (starting with 0x00 0x00 0x01 0x2?)
// parse it and fill in dimensions, returns true iff successful.
diff --git a/media/libstagefright/httplive/Android.bp b/media/libstagefright/httplive/Android.bp
index de560b6..f64e437 100644
--- a/media/libstagefright/httplive/Android.bp
+++ b/media/libstagefright/httplive/Android.bp
@@ -47,6 +47,7 @@
static_libs: [
"libstagefright_id3",
+ "libstagefright_metadatautils",
"libstagefright_mpeg2support",
],
diff --git a/media/libstagefright/httplive/PlaylistFetcher.cpp b/media/libstagefright/httplive/PlaylistFetcher.cpp
index b46d923..55fc680 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.cpp
+++ b/media/libstagefright/httplive/PlaylistFetcher.cpp
@@ -35,6 +35,7 @@
#include <media/stagefright/foundation/avc_utils.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MetaDataUtils.h>
#include <media/stagefright/Utils.h>
#include <ctype.h>
diff --git a/media/libstagefright/include/media/stagefright/MetaData.h b/media/libstagefright/include/media/stagefright/MetaData.h
new file mode 120000
index 0000000..160f8d3
--- /dev/null
+++ b/media/libstagefright/include/media/stagefright/MetaData.h
@@ -0,0 +1 @@
+../../../../libmediaextractor/include/media/stagefright/MetaData.h
\ No newline at end of file
diff --git a/media/libstagefright/include/media/stagefright/MetaDataUtils.h b/media/libstagefright/include/media/stagefright/MetaDataUtils.h
new file mode 100644
index 0000000..7c18bc2
--- /dev/null
+++ b/media/libstagefright/include/media/stagefright/MetaDataUtils.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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 META_DATA_UTILS_H_
+
+#define META_DATA_UTILS_H_
+
+#include <media/stagefright/MetaData.h>
+
+namespace android {
+
+struct ABuffer;
+sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit);
+sp<MetaData> MakeAACCodecSpecificData(unsigned profile, unsigned sampling_freq_index,
+ unsigned channel_configuration);
+
+} // namespace android
+
+#endif // META_DATA_UTILS_H_
diff --git a/media/libstagefright/mpeg2ts/Android.bp b/media/libstagefright/mpeg2ts/Android.bp
index 7654eb3..0b2a48f 100644
--- a/media/libstagefright/mpeg2ts/Android.bp
+++ b/media/libstagefright/mpeg2ts/Android.bp
@@ -37,4 +37,8 @@
"android.hardware.cas.native@1.0",
"android.hidl.memory@1.0",
],
+
+ whole_static_libs: [
+ "libstagefright_metadatautils",
+ ],
}
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp
index b621fd0..850face 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.cpp
+++ b/media/libstagefright/mpeg2ts/ESQueue.cpp
@@ -29,6 +29,7 @@
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MetaDataUtils.h>
#include <media/cas/DescramblerAPI.h>
#include <media/hardware/CryptoAPI.h>
diff --git a/media/ndk/Android.bp b/media/ndk/Android.bp
index ca691f7..4a36681 100644
--- a/media/ndk/Android.bp
+++ b/media/ndk/Android.bp
@@ -71,6 +71,7 @@
"libmedia_omx",
"libmedia_jni",
"libmediadrm",
+ "libmediaextractor",
"libstagefright",
"libstagefright_foundation",
"liblog",