Merge "Convert AMRExtractor to AMediaFormat"

gugelfrei
Marco Nelissen 6 years ago committed by Android (Google) Code Review
commit 4cc873cc1d

@ -29,11 +29,11 @@
namespace android { namespace android {
class AMRSource : public MediaTrackHelper { class AMRSource : public MediaTrackHelperV2 {
public: public:
AMRSource( AMRSource(
DataSourceHelper *source, DataSourceHelper *source,
MetaDataBase &meta, AMediaFormat *meta,
bool isWide, bool isWide,
const off64_t *offset_table, const off64_t *offset_table,
size_t offset_table_length); size_t offset_table_length);
@ -41,7 +41,7 @@ public:
virtual status_t start(); virtual status_t start();
virtual status_t stop(); virtual status_t stop();
virtual status_t getFormat(MetaDataBase &); virtual status_t getFormat(AMediaFormat *);
virtual status_t read( virtual status_t read(
MediaBufferBase **buffer, const ReadOptions *options = NULL); MediaBufferBase **buffer, const ReadOptions *options = NULL);
@ -51,7 +51,7 @@ protected:
private: private:
DataSourceHelper *mDataSource; DataSourceHelper *mDataSource;
MetaDataBase mMeta; AMediaFormat *mMeta;
bool mIsWide; bool mIsWide;
off64_t mOffset; off64_t mOffset;
@ -151,12 +151,12 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
return; return;
} }
mMeta.setCString( mMeta = AMediaFormat_new();
kKeyMIMEType, mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB AMediaFormat_setString(mMeta, AMEDIAFORMAT_KEY_MIME,
: MEDIA_MIMETYPE_AUDIO_AMR_NB); mIsWide ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AMR_NB);
mMeta.setInt32(kKeyChannelCount, 1); AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_CHANNEL_COUNT, 1);
mMeta.setInt32(kKeySampleRate, mIsWide ? 16000 : 8000); AMediaFormat_setInt32(mMeta, AMEDIAFORMAT_KEY_SAMPLE_RATE, mIsWide ? 16000 : 8000);
off64_t offset = mIsWide ? 9 : 6; off64_t offset = mIsWide ? 9 : 6;
off64_t streamSize; off64_t streamSize;
@ -164,11 +164,11 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
int64_t duration = 0; int64_t duration = 0;
if (mDataSource->getSize(&streamSize) == OK) { if (mDataSource->getSize(&streamSize) == OK) {
while (offset < streamSize) { while (offset < streamSize) {
status_t status = getFrameSizeByOffset(source, offset, mIsWide, &frameSize); status_t status = getFrameSizeByOffset(source, offset, mIsWide, &frameSize);
if (status == ERROR_END_OF_STREAM) { if (status == ERROR_END_OF_STREAM) {
break; break;
} else if (status != OK) { } else if (status != OK) {
return; return;
} }
@ -183,7 +183,7 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
numFrames ++; numFrames ++;
} }
mMeta.setInt64(kKeyDuration, duration); AMediaFormat_setInt64(mMeta, AMEDIAFORMAT_KEY_DURATION, duration);
} }
mInitCheck = OK; mInitCheck = OK;
@ -191,13 +191,15 @@ AMRExtractor::AMRExtractor(DataSourceHelper *source)
AMRExtractor::~AMRExtractor() { AMRExtractor::~AMRExtractor() {
delete mDataSource; delete mDataSource;
AMediaFormat_delete(mMeta);
} }
status_t AMRExtractor::getMetaData(MetaDataBase &meta) { status_t AMRExtractor::getMetaData(AMediaFormat *meta) {
meta.clear(); AMediaFormat_clear(meta);
if (mInitCheck == OK) { 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; return OK;
@ -207,7 +209,7 @@ size_t AMRExtractor::countTracks() {
return mInitCheck == OK ? 1 : 0; return mInitCheck == OK ? 1 : 0;
} }
MediaTrackHelper *AMRExtractor::getTrack(size_t index) { MediaTrackHelperV2 *AMRExtractor::getTrack(size_t index) {
if (mInitCheck != OK || index != 0) { if (mInitCheck != OK || index != 0) {
return NULL; return NULL;
} }
@ -216,19 +218,19 @@ MediaTrackHelper *AMRExtractor::getTrack(size_t index) {
mOffsetTable, mOffsetTableLength); 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) { if (mInitCheck != OK || index != 0) {
return UNKNOWN_ERROR; return UNKNOWN_ERROR;
} }
meta = mMeta; AMediaFormat_copy(meta, mMeta);
return OK; return OK;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
AMRSource::AMRSource( AMRSource::AMRSource(
DataSourceHelper *source, MetaDataBase &meta, DataSourceHelper *source, AMediaFormat *meta,
bool isWide, const off64_t *offset_table, size_t offset_table_length) bool isWide, const off64_t *offset_table, size_t offset_table_length)
: mDataSource(source), : mDataSource(source),
mMeta(meta), mMeta(meta),
@ -271,8 +273,8 @@ status_t AMRSource::stop() {
return OK; return OK;
} }
status_t AMRSource::getFormat(MetaDataBase &meta) { status_t AMRSource::getFormat(AMediaFormat *meta) {
meta = mMeta; AMediaFormat_copy(meta, mMeta);
return OK; return OK;
} }
@ -366,22 +368,22 @@ extern "C" {
__attribute__ ((visibility ("default"))) __attribute__ ((visibility ("default")))
ExtractorDef GETEXTRACTORDEF() { ExtractorDef GETEXTRACTORDEF() {
return { return {
EXTRACTORDEF_VERSION, EXTRACTORDEF_VERSION_CURRENT,
UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"), UUID("c86639c9-2f31-40ac-a715-fa01b4493aaf"),
1, 1,
"AMR Extractor", "AMR Extractor",
{ {
[]( .v2 = [](
CDataSource *source, CDataSource *source,
float *confidence, float *confidence,
void **, void **,
FreeMetaFunc *) -> CreatorFunc { FreeMetaFunc *) -> CreatorFuncV2 {
DataSourceHelper helper(source); DataSourceHelper helper(source);
if (SniffAMR(&helper, nullptr, confidence)) { if (SniffAMR(&helper, nullptr, confidence)) {
return []( return [](
CDataSource *source, CDataSource *source,
void *) -> CMediaExtractor* { void *) -> CMediaExtractorV2* {
return wrap(new AMRExtractor(new DataSourceHelper(source)));}; return wrapV2(new AMRExtractor(new DataSourceHelper(source)));};
} }
return NULL; return NULL;
} }

@ -21,7 +21,7 @@
#include <utils/Errors.h> #include <utils/Errors.h>
#include <media/MediaExtractorPluginApi.h> #include <media/MediaExtractorPluginApi.h>
#include <media/MediaExtractorPluginHelper.h> #include <media/MediaExtractorPluginHelper.h>
#include <media/stagefright/MetaDataBase.h> #include <media/NdkMediaFormat.h>
namespace android { namespace android {
@ -29,15 +29,15 @@ struct AMessage;
class String8; class String8;
#define OFFSET_TABLE_LEN 300 #define OFFSET_TABLE_LEN 300
class AMRExtractor : public MediaExtractorPluginHelper { class AMRExtractor : public MediaExtractorPluginHelperV2 {
public: public:
explicit AMRExtractor(DataSourceHelper *source); explicit AMRExtractor(DataSourceHelper *source);
virtual size_t countTracks(); virtual size_t countTracks();
virtual MediaTrackHelper *getTrack(size_t index); virtual MediaTrackHelperV2 *getTrack(size_t index);
virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags); 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"; } virtual const char * name() { return "AMRExtractor"; }
protected: protected:
@ -45,7 +45,7 @@ protected:
private: private:
DataSourceHelper *mDataSource; DataSourceHelper *mDataSource;
MetaDataBase mMeta; AMediaFormat *mMeta;
status_t mInitCheck; status_t mInitCheck;
bool mIsWide; bool mIsWide;

@ -9,6 +9,7 @@ cc_library_shared {
shared_libs: [ shared_libs: [
"liblog", "liblog",
"libmediaextractor", "libmediaextractor",
"libmediandk",
], ],
static_libs: [ static_libs: [

Loading…
Cancel
Save