Convert AMRExtractor to AMediaFormat
Bug: 111407253
Test: manual
Change-Id: I084d8e3a7b8fcba55c2f0cc777f155b1a6f0e466
diff --git a/media/extractors/amr/AMRExtractor.cpp b/media/extractors/amr/AMRExtractor.cpp
index 0b5d310..99d24c9 100644
--- a/media/extractors/amr/AMRExtractor.cpp
+++ b/media/extractors/amr/AMRExtractor.cpp
@@ -29,11 +29,11 @@
namespace android {
-class AMRSource : public MediaTrackHelper {
+class AMRSource : public MediaTrackHelperV2 {
public:
AMRSource(
DataSourceHelper *source,
- MetaDataBase &meta,
+ AMediaFormat *meta,
bool isWide,
const off64_t *offset_table,
size_t offset_table_length);
@@ -41,7 +41,7 @@
virtual status_t start();
virtual status_t stop();
- virtual status_t getFormat(MetaDataBase &);
+ virtual status_t getFormat(AMediaFormat *);
virtual status_t read(
MediaBufferBase **buffer, const ReadOptions *options = NULL);
@@ -51,7 +51,7 @@
private:
DataSourceHelper *mDataSource;
- MetaDataBase mMeta;
+ AMediaFormat *mMeta;
bool mIsWide;
off64_t mOffset;
@@ -151,12 +151,12 @@
return;
}
- mMeta.setCString(
- kKeyMIMEType, mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB
- : MEDIA_MIMETYPE_AUDIO_AMR_NB);
+ mMeta = AMediaFormat_new();
+ AMediaFormat_setString(mMeta, AMEDIAFORMAT_KEY_MIME,
+ mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AMR_NB);
- mMeta.setInt32(kKeyChannelCount, 1);
- mMeta.setInt32(kKeySampleRate, mIsWide ? 16000 : 8000);
+ AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_CHANNEL_COUNT, 1);
+ AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_SAMPLE_RATE, mIsWide ? 16000 : 8000);
off64_t offset = mIsWide ? 9 : 6;
off64_t streamSize;
@@ -164,11 +164,11 @@
int64_t duration = 0;
if (mDataSource->getSize(&streamSize) == OK) {
- while (offset < streamSize) {
- status_t status = getFrameSizeByOffset(source, offset, mIsWide, &frameSize);
- if (status == ERROR_END_OF_STREAM) {
- break;
- } else if (status != OK) {
+ while (offset < streamSize) {
+ status_t status = getFrameSizeByOffset(source, offset, mIsWide, &frameSize);
+ if (status == ERROR_END_OF_STREAM) {
+ break;
+ } else if (status != OK) {
return;
}
@@ -183,7 +183,7 @@
numFrames ++;
}
- mMeta.setInt64(kKeyDuration, duration);
+ AMediaFormat_setInt64(mMeta, AMEDIAFORMAT_KEY_DURATION, duration);
}
mInitCheck = OK;
@@ -191,13 +191,15 @@
AMRExtractor::~AMRExtractor() {
delete mDataSource;
+ AMediaFormat_delete(mMeta);
}
-status_t AMRExtractor::getMetaData(MetaDataBase &meta) {
- meta.clear();
+status_t AMRExtractor::getMetaData(AMediaFormat *meta) {
+ AMediaFormat_clear(meta);
if (mInitCheck == OK) {
- meta.setCString(kKeyMIMEType, mIsWide ? "audio/amr-wb" : "audio/amr");
+ AMediaFormat_setString(meta,
+ AMEDIAFORMAT_KEY_MIME, mIsWide ? "audio/amr-wb" : "audio/amr");
}
return OK;
@@ -207,7 +209,7 @@
return mInitCheck == OK ? 1 : 0;
}
-MediaTrackHelper *AMRExtractor::getTrack(size_t index) {
+MediaTrackHelperV2 *AMRExtractor::getTrack(size_t index) {
if (mInitCheck != OK || index != 0) {
return NULL;
}
@@ -216,19 +218,19 @@
mOffsetTable, mOffsetTableLength);
}
-status_t AMRExtractor::getTrackMetaData(MetaDataBase &meta, size_t index, uint32_t /* flags */) {
+status_t AMRExtractor::getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t /* flags */) {
if (mInitCheck != OK || index != 0) {
return UNKNOWN_ERROR;
}
- meta = mMeta;
+ AMediaFormat_copy(meta, mMeta);
return OK;
}
////////////////////////////////////////////////////////////////////////////////
AMRSource::AMRSource(
- DataSourceHelper *source, MetaDataBase &meta,
+ DataSourceHelper *source, AMediaFormat *meta,
bool isWide, const off64_t *offset_table, size_t offset_table_length)
: mDataSource(source),
mMeta(meta),
@@ -271,8 +273,8 @@
return OK;
}
-status_t AMRSource::getFormat(MetaDataBase &meta) {
- meta = mMeta;
+status_t AMRSource::getFormat(AMediaFormat *meta) {
+ AMediaFormat_copy(meta, mMeta);
return OK;
}
@@ -366,22 +368,22 @@
__attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() {
return {
- EXTRACTORDEF_VERSION,
+ EXTRACTORDEF_VERSION_CURRENT,
UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"),
1,
"AMR Extractor",
{
- [](
+ .v2 = [](
CDataSource *source,
float *confidence,
void **,
- FreeMetaFunc *) -> CreatorFunc {
+ FreeMetaFunc *) -> CreatorFuncV2 {
DataSourceHelper helper(source);
if (SniffAMR(&helper, nullptr, confidence)) {
return [](
CDataSource *source,
- void *) -> CMediaExtractor* {
- return wrap(new AMRExtractor(new DataSourceHelper(source)));};
+ void *) -> CMediaExtractorV2* {
+ return wrapV2(new AMRExtractor(new DataSourceHelper(source)));};
}
return NULL;
}
diff --git a/media/extractors/amr/AMRExtractor.h b/media/extractors/amr/AMRExtractor.h
index b9a4e9e..145fe08 100644
--- a/media/extractors/amr/AMRExtractor.h
+++ b/media/extractors/amr/AMRExtractor.h
@@ -21,7 +21,7 @@
#include <utils/Errors.h>
#include <media/MediaExtractorPluginApi.h>
#include <media/MediaExtractorPluginHelper.h>
-#include <media/stagefright/MetaDataBase.h>
+#include <media/NdkMediaFormat.h>
namespace android {
@@ -29,15 +29,15 @@
class String8;
#define OFFSET_TABLE_LEN 300
-class AMRExtractor : public MediaExtractorPluginHelper {
+class AMRExtractor : public MediaExtractorPluginHelperV2 {
public:
explicit AMRExtractor(DataSourceHelper *source);
virtual size_t countTracks();
- virtual MediaTrackHelper *getTrack(size_t index);
- virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags);
+ virtual MediaTrackHelperV2 *getTrack(size_t index);
+ virtual status_t getTrackMetaData(AMediaFormat *meta, size_t index, uint32_t flags);
- virtual status_t getMetaData(MetaDataBase& meta);
+ virtual status_t getMetaData(AMediaFormat *meta);
virtual const char * name() { return "AMRExtractor"; }
protected:
@@ -45,7 +45,7 @@
private:
DataSourceHelper *mDataSource;
- MetaDataBase mMeta;
+ AMediaFormat *mMeta;
status_t mInitCheck;
bool mIsWide;
diff --git a/media/extractors/amr/Android.bp b/media/extractors/amr/Android.bp
index d962b93..83ea4c7 100644
--- a/media/extractors/amr/Android.bp
+++ b/media/extractors/amr/Android.bp
@@ -9,6 +9,7 @@
shared_libs: [
"liblog",
"libmediaextractor",
+ "libmediandk",
],
static_libs: [