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/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index b0c82f2..49e3555 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -1180,7 +1180,7 @@
if (audio && mAudioIsVorbis) {
int32_t numPageSamples;
- if (!mb->meta_data()->findInt32(kKeyValidSamples, &numPageSamples)) {
+ if (!mb->meta_data().findInt32(kKeyValidSamples, &numPageSamples)) {
numPageSamples = -1;
}
@@ -1191,12 +1191,12 @@
sp<AMessage> meta = ab->meta();
int64_t timeUs;
- CHECK(mb->meta_data()->findInt64(kKeyTime, &timeUs));
+ CHECK(mb->meta_data().findInt64(kKeyTime, &timeUs));
meta->setInt64("timeUs", timeUs);
if (trackType == MEDIA_TRACK_TYPE_VIDEO) {
int32_t layerId;
- if (mb->meta_data()->findInt32(kKeyTemporalLayerId, &layerId)) {
+ if (mb->meta_data().findInt32(kKeyTemporalLayerId, &layerId)) {
meta->setInt32("temporal-layer-id", layerId);
}
}
@@ -1209,7 +1209,7 @@
}
int64_t durationUs;
- if (mb->meta_data()->findInt64(kKeyDuration, &durationUs)) {
+ if (mb->meta_data().findInt64(kKeyDuration, &durationUs)) {
meta->setInt64("durationUs", durationUs);
}
@@ -1220,14 +1220,14 @@
uint32_t dataType; // unused
const void *seiData;
size_t seiLength;
- if (mb->meta_data()->findData(kKeySEI, &dataType, &seiData, &seiLength)) {
+ if (mb->meta_data().findData(kKeySEI, &dataType, &seiData, &seiLength)) {
sp<ABuffer> sei = ABuffer::CreateAsCopy(seiData, seiLength);;
meta->setBuffer("sei", sei);
}
const void *mpegUserDataPointer;
size_t mpegUserDataLength;
- if (mb->meta_data()->findData(
+ if (mb->meta_data().findData(
kKeyMpegUserData, &dataType, &mpegUserDataPointer, &mpegUserDataLength)) {
sp<ABuffer> mpegUserData = ABuffer::CreateAsCopy(mpegUserDataPointer, mpegUserDataLength);
meta->setBuffer("mpegUserData", mpegUserData);
@@ -1359,8 +1359,8 @@
for (; id < count; ++id) {
int64_t timeUs;
MediaBufferBase *mbuf = mediaBuffers[id];
- if (!mbuf->meta_data()->findInt64(kKeyTime, &timeUs)) {
- mbuf->meta_data()->dumpToLog();
+ if (!mbuf->meta_data().findInt64(kKeyTime, &timeUs)) {
+ mbuf->meta_data().dumpToLog();
track->mPackets->signalEOS(ERROR_MALFORMED);
break;
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
index 88594d2..2a08f62 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
@@ -1071,7 +1071,7 @@
codecBuffer->setRange(0, mediaBuf->size());
memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->size());
- sp<MetaData> meta_data = mediaBuf->meta_data();
+ MetaDataBase &meta_data = mediaBuf->meta_data();
cryptInfo = NuPlayerDrm::getSampleCryptoInfo(meta_data);
} else { // No mediaBuf
ALOGE("onInputBufferFetched: buffer->data()/mediaBuf are NULL for %p",
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp
index b7c9db7..165e483 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp
@@ -265,18 +265,13 @@
return ret;
}
-NuPlayerDrm::CryptoInfo *NuPlayerDrm::getSampleCryptoInfo(sp<MetaData> meta)
+NuPlayerDrm::CryptoInfo *NuPlayerDrm::getSampleCryptoInfo(MetaDataBase &meta)
{
uint32_t type;
const void *crypteddata;
size_t cryptedsize;
- if (meta == NULL) {
- ALOGE("getSampleCryptoInfo: Unexpected. No meta data for sample.");
- return NULL;
- }
-
- if (!meta->findData(kKeyEncryptedSizes, &type, &crypteddata, &cryptedsize)) {
+ if (!meta.findData(kKeyEncryptedSizes, &type, &crypteddata, &cryptedsize)) {
return NULL;
}
size_t numSubSamples = cryptedsize / sizeof(size_t);
@@ -288,7 +283,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("getSampleCryptoInfo mismatch cryptedsize: %zu != clearsize: %zu",
@@ -299,7 +294,7 @@
const void *key;
size_t keysize;
- if (meta->findData(kKeyCryptoKey, &type, &key, &keysize)) {
+ if (meta.findData(kKeyCryptoKey, &type, &key, &keysize)) {
if (keysize != kBlockSize) {
ALOGE("getSampleCryptoInfo Keys must be %d bytes in length: %zu",
kBlockSize, keysize);
@@ -310,7 +305,7 @@
const void *iv;
size_t ivsize;
- if (meta->findData(kKeyCryptoIV, &type, &iv, &ivsize)) {
+ if (meta.findData(kKeyCryptoIV, &type, &iv, &ivsize)) {
if (ivsize != kBlockSize) {
ALOGE("getSampleCryptoInfo IV must be %d bytes in length: %zu",
kBlockSize, ivsize);
@@ -320,7 +315,7 @@
}
int32_t mode;
- if (!meta->findInt32(kKeyCryptoMode, &mode)) {
+ if (!meta.findInt32(kKeyCryptoMode, &mode)) {
mode = CryptoPlugin::kMode_AES_CTR;
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.h b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.h
index 6b8a2d9..50f69ff 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.h
@@ -109,7 +109,7 @@
size_t *clearbytes,
size_t *encryptedbytes);
- static CryptoInfo *getSampleCryptoInfo(sp<MetaData> meta);
+ static CryptoInfo *getSampleCryptoInfo(MetaDataBase &meta);
}; // NuPlayerDrm