Log MediaExtractor entry point to MediaMetrics

Bug: 170386720
Test: atest libctsmediav2extractor_jni
Test: atest CtsMediaTestCases
Change-Id: I648e27b1b483a646df77e2a88ec5ac8af01a0bb9
Merged-In: I648e27b1b483a646df77e2a88ec5ac8af01a0bb9
gugelfrei
Santiago Seifert 4 years ago
parent aab6038b83
commit 733dba7fd3

@ -272,7 +272,7 @@ void SimplePlayer::onMessageReceived(const sp<AMessage> &msg) {
status_t SimplePlayer::onPrepare() {
CHECK_EQ(mState, UNPREPARED);
mExtractor = new NuMediaExtractor;
mExtractor = new NuMediaExtractor(NuMediaExtractor::EntryPoint::OTHER);
status_t err = mExtractor->setDataSource(
NULL /* httpService */, mPath.c_str());

@ -79,7 +79,7 @@ static int decode(
static int64_t kTimeout = 500ll;
sp<NuMediaExtractor> extractor = new NuMediaExtractor;
sp<NuMediaExtractor> extractor = new NuMediaExtractor(NuMediaExtractor::EntryPoint::OTHER);
if (extractor->setDataSource(NULL /* httpService */, path) != OK) {
fprintf(stderr, "unable to instantiate extractor.\n");
return 1;

@ -319,7 +319,8 @@ static int decode(
static int64_t kTimeout = 500ll;
sp<NuMediaExtractor> extractor = new NuMediaExtractor;
sp<NuMediaExtractor> extractor = new NuMediaExtractor(NuMediaExtractor::EntryPoint::OTHER);
if (extractor->setDataSource(NULL /* httpService */, path) != OK) {
fprintf(stderr, "unable to instantiate extractor.\n");
return 1;

@ -62,7 +62,7 @@ static int muxing(
int trimEndTimeMs,
int rotationDegrees,
MediaMuxer::OutputFormat container = MediaMuxer::OUTPUT_FORMAT_MPEG_4) {
sp<NuMediaExtractor> extractor = new NuMediaExtractor;
sp<NuMediaExtractor> extractor = new NuMediaExtractor(NuMediaExtractor::EntryPoint::OTHER);
if (extractor->setDataSource(NULL /* httpService */, path) != OK) {
fprintf(stderr, "unable to instantiate extractor. %s\n", path);
return 1;

@ -38,7 +38,8 @@ enum {
FLAGS,
SETMEDIACAS,
NAME,
GETMETRICS
GETMETRICS,
SETENTRYPOINT
};
class BpMediaExtractor : public BpInterface<IMediaExtractor> {
@ -142,6 +143,13 @@ public:
}
return nm;
}
virtual status_t setEntryPoint(EntryPoint entryPoint) {
Parcel data, reply;
data.writeInterfaceToken(BpMediaExtractor::getInterfaceDescriptor());
data.writeInt32(static_cast<int32_t>(entryPoint));
return remote()->transact(SETENTRYPOINT, data, &reply);
}
};
IMPLEMENT_META_INTERFACE(MediaExtractor, "android.media.IMediaExtractor");
@ -232,6 +240,16 @@ status_t BnMediaExtractor::onTransact(
reply->writeString8(nm);
return NO_ERROR;
}
case SETENTRYPOINT: {
ALOGV("setEntryPoint");
CHECK_INTERFACE(IMediaExtractor, data, reply);
int32_t entryPoint;
status_t err = data.readInt32(&entryPoint);
if (err == OK) {
setEntryPoint(EntryPoint(entryPoint));
}
return err;
}
default:
return BBinder::onTransact(code, data, reply, flags);
}

@ -63,6 +63,15 @@ public:
virtual status_t setMediaCas(const HInterfaceToken &casToken) = 0;
virtual String8 name() = 0;
enum class EntryPoint {
SDK = 1,
NDK_WITH_JVM = 2,
NDK_NO_JVM = 3,
OTHER = 4,
};
virtual status_t setEntryPoint(EntryPoint entryPoint) = 0;
};

@ -50,8 +50,9 @@ NuMediaExtractor::Sample::Sample(MediaBufferBase *buffer, int64_t timeUs)
mSampleTimeUs(timeUs) {
}
NuMediaExtractor::NuMediaExtractor()
: mTotalBitrate(-1LL),
NuMediaExtractor::NuMediaExtractor(EntryPoint entryPoint)
: mEntryPoint(entryPoint),
mTotalBitrate(-1LL),
mDurationUs(-1LL) {
}
@ -93,6 +94,7 @@ status_t NuMediaExtractor::setDataSource(
if (mImpl == NULL) {
return ERROR_UNSUPPORTED;
}
setEntryPointToRemoteMediaExtractor();
status_t err = OK;
if (!mCasToken.empty()) {
@ -134,6 +136,7 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
if (mImpl == NULL) {
return ERROR_UNSUPPORTED;
}
setEntryPointToRemoteMediaExtractor();
if (!mCasToken.empty()) {
err = mImpl->setMediaCas(mCasToken);
@ -168,6 +171,7 @@ status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
if (mImpl == NULL) {
return ERROR_UNSUPPORTED;
}
setEntryPointToRemoteMediaExtractor();
if (!mCasToken.empty()) {
err = mImpl->setMediaCas(mCasToken);
@ -468,6 +472,16 @@ void NuMediaExtractor::releaseAllTrackSamples() {
}
}
void NuMediaExtractor::setEntryPointToRemoteMediaExtractor() {
if (mImpl == NULL) {
return;
}
status_t err = mImpl->setEntryPoint(mEntryPoint);
if (err != OK) {
ALOGW("Failed to set entry point with error %d.", err);
}
}
ssize_t NuMediaExtractor::fetchAllTrackSamples(
int64_t seekTimeUs, MediaSource::ReadOptions::SeekMode mode) {
TrackInfo *minInfo = NULL;

@ -39,6 +39,12 @@ static const char *kKeyExtractor = "extractor";
static const char *kExtractorFormat = "android.media.mediaextractor.fmt";
static const char *kExtractorMime = "android.media.mediaextractor.mime";
static const char *kExtractorTracks = "android.media.mediaextractor.ntrk";
static const char *kExtractorEntryPoint = "android.media.mediaextractor.entry";
static const char *kEntryPointSdk = "sdk";
static const char *kEntryPointWithJvm = "ndk-with-jvm";
static const char *kEntryPointNoJvm = "ndk-no-jvm";
static const char *kEntryPointOther = "other";
RemoteMediaExtractor::RemoteMediaExtractor(
MediaExtractor *extractor,
@ -74,6 +80,9 @@ RemoteMediaExtractor::RemoteMediaExtractor(
}
// what else is interesting and not already available?
}
// By default, we set the entry point to be "other". Clients of this
// class will override this value by calling setEntryPoint.
mMetricsItem->setCString(kExtractorEntryPoint, kEntryPointOther);
}
}
@ -143,6 +152,28 @@ String8 RemoteMediaExtractor::name() {
return String8(mExtractor->name());
}
status_t RemoteMediaExtractor::setEntryPoint(EntryPoint entryPoint) {
const char* entryPointString;
switch (entryPoint) {
case EntryPoint::SDK:
entryPointString = kEntryPointSdk;
break;
case EntryPoint::NDK_WITH_JVM:
entryPointString = kEntryPointWithJvm;
break;
case EntryPoint::NDK_NO_JVM:
entryPointString = kEntryPointNoJvm;
break;
case EntryPoint::OTHER:
entryPointString = kEntryPointOther;
break;
default:
return BAD_VALUE;
}
mMetricsItem->setCString(kExtractorEntryPoint, entryPointString);
return OK;
}
////////////////////////////////////////////////////////////////////////////////
// static

@ -47,12 +47,14 @@ struct NuMediaExtractor : public RefBase {
SAMPLE_FLAG_ENCRYPTED = 2,
};
typedef IMediaExtractor::EntryPoint EntryPoint;
// identical to IMediaExtractor::GetTrackMetaDataFlags
enum GetTrackFormatFlags {
kIncludeExtensiveMetaData = 1, // reads sample table and possibly stream headers
};
NuMediaExtractor();
explicit NuMediaExtractor(EntryPoint entryPoint);
status_t setDataSource(
const sp<MediaHTTPService> &httpService,
@ -128,6 +130,8 @@ private:
uint32_t mTrackFlags; // bitmask of "TrackFlags"
};
const EntryPoint mEntryPoint;
mutable Mutex mLock;
sp<DataSource> mDataSource;
@ -139,6 +143,8 @@ private:
int64_t mTotalBitrate; // in bits/sec
int64_t mDurationUs;
void setEntryPointToRemoteMediaExtractor();
ssize_t fetchAllTrackSamples(
int64_t seekTimeUs = -1ll,
MediaSource::ReadOptions::SeekMode mode =

@ -42,6 +42,7 @@ public:
virtual uint32_t flags() const;
virtual status_t setMediaCas(const HInterfaceToken &casToken);
virtual String8 name();
virtual status_t setEntryPoint(EntryPoint entryPoint);
private:
MediaExtractor *mExtractor;

@ -22,6 +22,7 @@
#include <media/NdkMediaExtractor.h>
#include <media/NdkMediaErrorPriv.h>
#include <media/NdkMediaFormatPriv.h>
#include "NdkJavaVMHelperPriv.h"
#include "NdkMediaDataSourcePriv.h"
@ -63,7 +64,10 @@ EXPORT
AMediaExtractor* AMediaExtractor_new() {
ALOGV("ctor");
AMediaExtractor *mData = new AMediaExtractor();
mData->mImpl = new NuMediaExtractor();
mData->mImpl = new NuMediaExtractor(
NdkJavaVMHelper::getJNIEnv() != nullptr
? NuMediaExtractor::EntryPoint::NDK_WITH_JVM
: NuMediaExtractor::EntryPoint::NDK_NO_JVM );
return mData;
}

@ -71,6 +71,22 @@ bool statsd_extractor(const mediametrics::Item *item)
metrics_proto.set_tracks(ntrk);
}
// android.media.mediaextractor.entry string
std::string entry_point_string;
if (item->getString("android.media.mediaextractor.entry", &entry_point_string)) {
stats::mediametrics::ExtractorData::EntryPoint entry_point;
if (entry_point_string == "sdk") {
entry_point = stats::mediametrics::ExtractorData_EntryPoint_SDK;
} else if (entry_point_string == "ndk-with-jvm") {
entry_point = stats::mediametrics::ExtractorData_EntryPoint_NDK_WITH_JVM;
} else if (entry_point_string == "ndk-no-jvm") {
entry_point = stats::mediametrics::ExtractorData_EntryPoint_NDK_NO_JVM;
} else {
entry_point = stats::mediametrics::ExtractorData_EntryPoint_OTHER;
}
metrics_proto.set_entry_point(entry_point);
}
std::string serialized;
if (!metrics_proto.SerializeToString(&serialized)) {
ALOGE("Failed to serialize extractor metrics");

Loading…
Cancel
Save