Remove libmediametrics dependency from libmediaextractor
- Removes media metrics related methods in the extractor plugin.
- Puts metrics related code in one place, RemoteMediaExtractor.
Test: build & pass android.media.cts.MediaExtractorTest
Bug: 67908556
Change-Id: I5e06e6b6b5c047a3c68d90479e55f1df9061da45
diff --git a/media/extractors/mp4/MPEG4Extractor.cpp b/media/extractors/mp4/MPEG4Extractor.cpp
index 8823c79..938bd5d 100644
--- a/media/extractors/mp4/MPEG4Extractor.cpp
+++ b/media/extractors/mp4/MPEG4Extractor.cpp
@@ -5375,11 +5375,6 @@
return NULL;
}
-void MPEG4Extractor::populateMetrics() {
- ALOGV("MPEG4Extractor::populateMetrics");
- // write into mAnalyticsItem
-}
-
static bool LegacySniffMPEG4(
const sp<DataSource> &source, String8 *mimeType, float *confidence) {
uint8_t header[8];
diff --git a/media/extractors/mp4/MPEG4Extractor.h b/media/extractors/mp4/MPEG4Extractor.h
index 76b549d..8bfecaa 100644
--- a/media/extractors/mp4/MPEG4Extractor.h
+++ b/media/extractors/mp4/MPEG4Extractor.h
@@ -69,8 +69,6 @@
protected:
virtual ~MPEG4Extractor();
- virtual void populateMetrics();
-
private:
struct PsshInfo {
diff --git a/media/libmediaextractor/Android.bp b/media/libmediaextractor/Android.bp
index c57cd41..dcdb320 100644
--- a/media/libmediaextractor/Android.bp
+++ b/media/libmediaextractor/Android.bp
@@ -1,5 +1,6 @@
cc_library_shared {
name: "libmediaextractor",
+
include_dirs: [
"frameworks/av/include",
"frameworks/av/media/libmediaextractor/include",
@@ -14,7 +15,6 @@
],
shared_libs: [
- "libmediametrics",
"libstagefright_foundation",
"libutils",
"libcutils",
diff --git a/media/libmediaextractor/MediaExtractor.cpp b/media/libmediaextractor/MediaExtractor.cpp
index 6ba7c0e..2241567 100644
--- a/media/libmediaextractor/MediaExtractor.cpp
+++ b/media/libmediaextractor/MediaExtractor.cpp
@@ -19,68 +19,26 @@
#include <utils/Log.h>
#include <pwd.h>
-#include <media/MediaAnalyticsItem.h>
#include <media/MediaExtractor.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MetaData.h>
namespace android {
-// key for media statistics
-static const char *kKeyExtractor = "extractor";
-
MediaExtractor::MediaExtractor() {
if (!LOG_NDEBUG) {
uid_t uid = getuid();
struct passwd *pw = getpwuid(uid);
ALOGV("extractor created in uid: %d (%s)", getuid(), pw->pw_name);
}
-
- mAnalyticsItem = NULL;
- if (MEDIA_LOG) {
- mAnalyticsItem = new MediaAnalyticsItem(kKeyExtractor);
- (void) mAnalyticsItem->generateSessionID();
- }
}
-MediaExtractor::~MediaExtractor() {
-
- // log the current record, provided it has some information worth recording
- if (MEDIA_LOG) {
- if (mAnalyticsItem != NULL) {
- if (mAnalyticsItem->count() > 0) {
- mAnalyticsItem->setFinalized(true);
- mAnalyticsItem->selfrecord();
- }
- }
- }
- if (mAnalyticsItem != NULL) {
- delete mAnalyticsItem;
- mAnalyticsItem = NULL;
- }
-}
+MediaExtractor::~MediaExtractor() {}
sp<MetaData> MediaExtractor::getMetaData() {
return new MetaData;
}
-status_t MediaExtractor::getMetrics(Parcel *reply) {
-
- if (mAnalyticsItem == NULL || reply == NULL) {
- return UNKNOWN_ERROR;
- }
-
- populateMetrics();
- mAnalyticsItem->writeToParcel(reply);
-
- return OK;
-}
-
-void MediaExtractor::populateMetrics() {
- ALOGV("MediaExtractor::populateMetrics");
- // normally overridden in subclasses
-}
-
uint32_t MediaExtractor::flags() const {
return CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_PAUSE | CAN_SEEK;
}
diff --git a/media/libmediaextractor/include/media/MediaExtractor.h b/media/libmediaextractor/include/media/MediaExtractor.h
index 2dcced3..f197b5e 100644
--- a/media/libmediaextractor/include/media/MediaExtractor.h
+++ b/media/libmediaextractor/include/media/MediaExtractor.h
@@ -24,14 +24,10 @@
#include <utils/Errors.h>
#include <utils/RefBase.h>
-// still doing some on/off toggling here.
-#define MEDIA_LOG 1
-
namespace android {
class DataSource;
class IMediaSource;
-class MediaAnalyticsItem;
class MediaExtractorFactory;
class MetaData;
class Parcel;
@@ -55,8 +51,6 @@
// returns an empty metadata object.
virtual sp<MetaData> getMetaData();
- status_t getMetrics(Parcel *reply);
-
enum Flags {
CAN_SEEK_BACKWARD = 1, // the "seek 10secs back button"
CAN_SEEK_FORWARD = 2, // the "seek 10secs forward button"
@@ -123,14 +117,9 @@
MediaExtractor();
virtual ~MediaExtractor();
- MediaAnalyticsItem *mAnalyticsItem;
-
- virtual void populateMetrics();
-
private:
MediaExtractor(const MediaExtractor &);
MediaExtractor &operator=(const MediaExtractor &);
- friend class MediaExtractorFactory;
};
// purposely not defined anywhere so that this will fail to link if
diff --git a/media/libstagefright/MediaExtractorFactory.cpp b/media/libstagefright/MediaExtractorFactory.cpp
index e1e04eb..8a90e93 100644
--- a/media/libstagefright/MediaExtractorFactory.cpp
+++ b/media/libstagefright/MediaExtractorFactory.cpp
@@ -37,11 +37,6 @@
namespace android {
-// attrs for media statistics
-static const char *kExtractorMime = "android.media.mediaextractor.mime";
-static const char *kExtractorTracks = "android.media.mediaextractor.ntrk";
-static const char *kExtractorFormat = "android.media.mediaextractor.fmt";
-
// static
sp<IMediaExtractor> MediaExtractorFactory::Create(
const sp<DataSource> &source, const char *mime) {
@@ -133,31 +128,6 @@
mime, confidence);
MediaExtractor *ret = creator(source, meta);
-
- if (ret != NULL) {
- // track the container format (mpeg, aac, wvm, etc)
- if (MEDIA_LOG) {
- if (ret->mAnalyticsItem != NULL) {
- size_t ntracks = ret->countTracks();
- ret->mAnalyticsItem->setCString(kExtractorFormat, ret->name());
- // tracks (size_t)
- ret->mAnalyticsItem->setInt32(kExtractorTracks, ntracks);
- // metadata
- sp<MetaData> pMetaData = ret->getMetaData();
- if (pMetaData != NULL) {
- String8 xx = pMetaData->toString();
- // 'titl' -- but this verges into PII
- // 'mime'
- const char *mime = NULL;
- if (pMetaData->findCString(kKeyMIMEType, &mime)) {
- ret->mAnalyticsItem->setCString(kExtractorMime, mime);
- }
- // what else is interesting and not already available?
- }
- }
- }
- }
-
return ret;
}
diff --git a/media/libstagefright/RemoteMediaExtractor.cpp b/media/libstagefright/RemoteMediaExtractor.cpp
index 1dd7986..2a16e16 100644
--- a/media/libstagefright/RemoteMediaExtractor.cpp
+++ b/media/libstagefright/RemoteMediaExtractor.cpp
@@ -14,16 +14,71 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
+#define LOG_TAG "RemoteMediaExtractor"
+#include <utils/Log.h>
+
#include <media/stagefright/InterfaceUtils.h>
+#include <media/MediaAnalyticsItem.h>
#include <media/MediaSource.h>
#include <media/stagefright/RemoteMediaExtractor.h>
+// still doing some on/off toggling here.
+#define MEDIA_LOG 1
+
namespace android {
-RemoteMediaExtractor::RemoteMediaExtractor(const sp<MediaExtractor> &extractor)
- :mExtractor(extractor) {}
+// key for media statistics
+static const char *kKeyExtractor = "extractor";
-RemoteMediaExtractor::~RemoteMediaExtractor() {}
+// attrs for media statistics
+static const char *kExtractorMime = "android.media.mediaextractor.mime";
+static const char *kExtractorTracks = "android.media.mediaextractor.ntrk";
+static const char *kExtractorFormat = "android.media.mediaextractor.fmt";
+
+RemoteMediaExtractor::RemoteMediaExtractor(const sp<MediaExtractor> &extractor)
+ :mExtractor(extractor) {
+
+ mAnalyticsItem = nullptr;
+ if (MEDIA_LOG) {
+ mAnalyticsItem = new MediaAnalyticsItem(kKeyExtractor);
+ (void) mAnalyticsItem->generateSessionID();
+
+ // track the container format (mpeg, aac, wvm, etc)
+ size_t ntracks = extractor->countTracks();
+ mAnalyticsItem->setCString(kExtractorFormat, extractor->name());
+ // tracks (size_t)
+ mAnalyticsItem->setInt32(kExtractorTracks, ntracks);
+ // metadata
+ sp<MetaData> pMetaData = extractor->getMetaData();
+ if (pMetaData != nullptr) {
+ String8 xx = pMetaData->toString();
+ // 'titl' -- but this verges into PII
+ // 'mime'
+ const char *mime = nullptr;
+ if (pMetaData->findCString(kKeyMIMEType, &mime)) {
+ mAnalyticsItem->setCString(kExtractorMime, mime);
+ }
+ // what else is interesting and not already available?
+ }
+ }
+}
+
+RemoteMediaExtractor::~RemoteMediaExtractor() {
+ // log the current record, provided it has some information worth recording
+ if (MEDIA_LOG) {
+ if (mAnalyticsItem != nullptr) {
+ if (mAnalyticsItem->count() > 0) {
+ mAnalyticsItem->setFinalized(true);
+ mAnalyticsItem->selfrecord();
+ }
+ }
+ }
+ if (mAnalyticsItem != nullptr) {
+ delete mAnalyticsItem;
+ mAnalyticsItem = nullptr;
+ }
+}
size_t RemoteMediaExtractor::countTracks() {
return mExtractor->countTracks();
@@ -43,7 +98,12 @@
}
status_t RemoteMediaExtractor::getMetrics(Parcel *reply) {
- return mExtractor->getMetrics(reply);
+ if (mAnalyticsItem == nullptr || reply == nullptr) {
+ return UNKNOWN_ERROR;
+ }
+
+ mAnalyticsItem->writeToParcel(reply);
+ return OK;
}
uint32_t RemoteMediaExtractor::flags() const {
diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
index b5a4b34..98b8b4d 100644
--- a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
@@ -22,6 +22,8 @@
namespace android {
+class MediaAnalyticsItem;
+
// IMediaExtractor wrapper to the MediaExtractor.
class RemoteMediaExtractor : public BnMediaExtractor {
public:
@@ -43,6 +45,8 @@
private:
sp<MediaExtractor> mExtractor;
+ MediaAnalyticsItem *mAnalyticsItem;
+
explicit RemoteMediaExtractor(const sp<MediaExtractor> &extractor);
DISALLOW_EVIL_CONSTRUCTORS(RemoteMediaExtractor);