frameworks/av: AAC CSD support for MediaCodec path
- AudioFlush CTS test case is failing for AAC
- AAC Codec specific data is missing for
MediaCodec path for AAC if we use Qualcomm
ExtendedExtractor for demuxing
- Added CSD buffer while converting from
metadata to message , which can be used by
ACodec/MediaCodec
Change-Id: Ic8197138f5107f2a6026c28847e74987d91acc16
CRs-Fixed: 509575
diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp
index 4db8e80..1e85a01 100644
--- a/media/libstagefright/Utils.cpp
+++ b/media/libstagefright/Utils.cpp
@@ -33,6 +33,10 @@
#include <media/stagefright/Utils.h>
#include <media/AudioParameter.h>
+#ifdef ENABLE_QC_AV_ENHANCEMENTS
+#include "QCMetaData.h"
+#endif
+
namespace android {
uint16_t U16_AT(const uint8_t *ptr) {
@@ -128,6 +132,30 @@
if (meta->findInt32(kKeyIsADTS, &isADTS)) {
msg->setInt32("is-adts", true);
}
+
+#ifdef ENABLE_QC_AV_ENHANCEMENTS
+ uint32_t type;
+ const void *data;
+ size_t size;
+
+ if (meta->findData(kKeyAacCodecSpecificData, &type, &data, &size)) {
+ if (size > 0 && data != NULL) {
+ sp<ABuffer> buffer = new ABuffer(size);
+ if (buffer != NULL) {
+ memcpy(buffer->data(), data, size);
+ buffer->meta()->setInt32("csd", true);
+ buffer->meta()->setInt64("timeUs", 0);
+ msg->setBuffer("csd-0", buffer);
+ }
+ else {
+ ALOGE("kKeyAacCodecSpecificData ABuffer Allocation failed");
+ }
+ }
+ else {
+ ALOGE("Not a valid data pointer or size == 0");
+ }
+ }
+#endif
}
int32_t maxInputSize;