Remove RefBase from the extractor API
- Add MetaDataBase base class that MetaData derives from, but which
does not derive from RefBase.
- MediaBuffer::meta_data() now returns a MetaDataBase& rather than an
sp<MetaData>
- Rename MediaSourceBase to MediaTrack.
- MediaSource no longer derives from MediaSourceBase (or MediaTrack)
- MediaTrack::getFormat(), MediaExtractor::getTrackMetaData() and
MediaExtractor::getMetaData() all take a MetaDataBase& parameter that
they fill out, rather than returning a MetaData directly (the
corresponding methods on MediaSource and RemoteMediaExtractor continue
to return MetaData)
Bug: 67908544
Test: CTS MediaPlayerTest, DecoderTest, EncodeDecodeTest, manually record video
Change-Id: Ib531ab309061290be33d40d6100c9a8127e22083
diff --git a/media/libmedia/IMediaSource.cpp b/media/libmedia/IMediaSource.cpp
index f6b9255..f185fd4 100644
--- a/media/libmedia/IMediaSource.cpp
+++ b/media/libmedia/IMediaSource.cpp
@@ -171,13 +171,13 @@
size_t length = reply.readInt32();
buf = new RemoteMediaBufferWrapper(mem);
buf->set_range(offset, length);
- buf->meta_data()->updateFromParcel(reply);
+ buf->meta_data().updateFromParcel(reply);
} else { // INLINE_BUFFER
int32_t len = reply.readInt32();
ALOGV("INLINE_BUFFER status %d and len %d", ret, len);
buf = new MediaBuffer(len);
reply.read(buf->data(), len);
- buf->meta_data()->updateFromParcel(reply);
+ buf->meta_data().updateFromParcel(reply);
}
buffers->push_back(buf);
++bufferCount;
@@ -408,7 +408,7 @@
}
reply->writeInt32(offset);
reply->writeInt32(length);
- buf->meta_data()->writeToParcel(*reply);
+ buf->meta_data().writeToParcel(*reply);
transferBuf->addRemoteRefcount(1);
if (transferBuf != buf) {
transferBuf->release(); // release local ref
@@ -421,7 +421,7 @@
buf, buf->mMemory->size(), length);
reply->writeInt32(INLINE_BUFFER);
reply->writeByteArray(length, (uint8_t*)buf->data() + offset);
- buf->meta_data()->writeToParcel(*reply);
+ buf->meta_data().writeToParcel(*reply);
inlineTransferSize += length;
if (inlineTransferSize > kInlineMaxTransfer) {
maxNumBuffers = 0; // stop readMultiple if inline transfer is too large.
diff --git a/media/libmedia/JetPlayer.cpp b/media/libmedia/JetPlayer.cpp
index 34deb59..0d3c1ba 100644
--- a/media/libmedia/JetPlayer.cpp
+++ b/media/libmedia/JetPlayer.cpp
@@ -36,6 +36,7 @@
mPaused(false),
mMaxTracks(maxTracks),
mEasData(NULL),
+ mIoWrapper(NULL),
mTrackBufferSize(trackBufferSize)
{
ALOGV("JetPlayer constructor");
@@ -50,7 +51,6 @@
{
ALOGV("~JetPlayer");
release();
-
}
//-------------------------------------------------------------------------------------------------
@@ -138,7 +138,8 @@
JET_Shutdown(mEasData);
EAS_Shutdown(mEasData);
}
- mIoWrapper.clear();
+ delete mIoWrapper;
+ mIoWrapper = NULL;
if (mAudioTrack != 0) {
mAudioTrack->stop();
mAudioTrack->flush();
@@ -329,6 +330,7 @@
Mutex::Autolock lock(mMutex);
+ delete mIoWrapper;
mIoWrapper = new MidiIoWrapper(path);
EAS_RESULT result = JET_OpenFile(mEasData, mIoWrapper->getLocator());
@@ -347,6 +349,7 @@
Mutex::Autolock lock(mMutex);
+ delete mIoWrapper;
mIoWrapper = new MidiIoWrapper(fd, offset, length);
EAS_RESULT result = JET_OpenFile(mEasData, mIoWrapper->getLocator());
diff --git a/media/libmedia/NdkWrapper.cpp b/media/libmedia/NdkWrapper.cpp
index 936e92f..5e47b48 100644
--- a/media/libmedia/NdkWrapper.cpp
+++ b/media/libmedia/NdkWrapper.cpp
@@ -574,17 +574,13 @@
//////////// AMediaCodecCryptoInfoWrapper
// static
-sp<AMediaCodecCryptoInfoWrapper> AMediaCodecCryptoInfoWrapper::Create(sp<MetaData> meta) {
- if (meta == NULL) {
- ALOGE("Create: Unexpected. No meta data for sample.");
- return NULL;
- }
+sp<AMediaCodecCryptoInfoWrapper> AMediaCodecCryptoInfoWrapper::Create(MetaDataBase &meta) {
uint32_t type;
const void *crypteddata;
size_t cryptedsize;
- if (!meta->findData(kKeyEncryptedSizes, &type, &crypteddata, &cryptedsize)) {
+ if (!meta.findData(kKeyEncryptedSizes, &type, &crypteddata, &cryptedsize)) {
return NULL;
}
@@ -597,7 +593,7 @@
const void *cleardata;
size_t clearsize;
- if (meta->findData(kKeyPlainSizes, &type, &cleardata, &clearsize)) {
+ if (meta.findData(kKeyPlainSizes, &type, &cleardata, &clearsize)) {
if (clearsize != cryptedsize) {
// The two must be of the same length.
ALOGE("Create: mismatch cryptedsize: %zu != clearsize: %zu", cryptedsize, clearsize);
@@ -607,7 +603,7 @@
const void *key;
size_t keysize;
- if (meta->findData(kKeyCryptoKey, &type, &key, &keysize)) {
+ if (meta.findData(kKeyCryptoKey, &type, &key, &keysize)) {
if (keysize != kAESBlockSize) {
// Keys must be 16 bytes in length.
ALOGE("Create: Keys must be %zu bytes in length: %zu", kAESBlockSize, keysize);
@@ -617,7 +613,7 @@
const void *iv;
size_t ivsize;
- if (meta->findData(kKeyCryptoIV, &type, &iv, &ivsize)) {
+ if (meta.findData(kKeyCryptoIV, &type, &iv, &ivsize)) {
if (ivsize != kAESBlockSize) {
// IVs must be 16 bytes in length.
ALOGE("Create: IV must be %zu bytes in length: %zu", kAESBlockSize, ivsize);
@@ -626,7 +622,7 @@
}
int32_t mode;
- if (!meta->findInt32(kKeyCryptoMode, &mode)) {
+ if (!meta.findInt32(kKeyCryptoMode, &mode)) {
mode = CryptoPlugin::kMode_AES_CTR;
}
diff --git a/media/libmedia/include/media/JetPlayer.h b/media/libmedia/include/media/JetPlayer.h
index 63d1980..bb569bc 100644
--- a/media/libmedia/include/media/JetPlayer.h
+++ b/media/libmedia/include/media/JetPlayer.h
@@ -87,7 +87,7 @@
int mMaxTracks; // max number of MIDI tracks, usually 32
EAS_DATA_HANDLE mEasData;
- sp<MidiIoWrapper> mIoWrapper;
+ MidiIoWrapper* mIoWrapper;
EAS_PCM* mAudioBuffer;// EAS renders the MIDI data into this buffer,
sp<AudioTrack> mAudioTrack; // and we play it in this audio track
int mTrackBufferSize;
diff --git a/media/libmedia/include/media/MidiIoWrapper.h b/media/libmedia/include/media/MidiIoWrapper.h
index a27b410..b5e565e 100644
--- a/media/libmedia/include/media/MidiIoWrapper.h
+++ b/media/libmedia/include/media/MidiIoWrapper.h
@@ -23,11 +23,11 @@
namespace android {
-class MidiIoWrapper : public RefBase {
+class MidiIoWrapper {
public:
- MidiIoWrapper(const char *path);
- MidiIoWrapper(int fd, off64_t offset, int64_t size);
- MidiIoWrapper(DataSourceBase *source);
+ explicit MidiIoWrapper(const char *path);
+ explicit MidiIoWrapper(int fd, off64_t offset, int64_t size);
+ explicit MidiIoWrapper(DataSourceBase *source);
~MidiIoWrapper();
diff --git a/media/libmedia/include/media/NdkWrapper.h b/media/libmedia/include/media/NdkWrapper.h
index 49d728d..b71b758 100644
--- a/media/libmedia/include/media/NdkWrapper.h
+++ b/media/libmedia/include/media/NdkWrapper.h
@@ -149,7 +149,7 @@
};
struct AMediaCodecCryptoInfoWrapper : public RefBase {
- static sp<AMediaCodecCryptoInfoWrapper> Create(sp<MetaData> meta);
+ static sp<AMediaCodecCryptoInfoWrapper> Create(MetaDataBase &meta);
AMediaCodecCryptoInfoWrapper(int numsubsamples,
uint8_t key[16],