summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-11-18 16:26:56 -0800
committerSteve Kondik <steve@cyngn.com>2015-11-20 20:21:18 -0800
commita64bf2af4ef3219d9d897cd1bbc7b67a7e4c3f4c (patch)
tree4d8fea06066885f0af7bd5944d6edf33bee2d829
parent07f1086ff02439dc20f3bff6607be920630185e0 (diff)
downloadframeworks_av-a64bf2af4ef3219d9d897cd1bbc7b67a7e4c3f4c.zip
frameworks_av-a64bf2af4ef3219d9d897cd1bbc7b67a7e4c3f4c.tar.gz
frameworks_av-a64bf2af4ef3219d9d897cd1bbc7b67a7e4c3f4c.tar.bz2
Revert "DataSource: Remove global variables in DataSource related to sniff"
* Don't change the ABI. Fun times. This reverts commit 4440ef8efc77d1bd7838885e83d41e54deb5a3b8. Change-Id: Ie9e0812f5e4ee700c29b76a413083858ec0255c9
-rw-r--r--include/media/stagefright/DataSource.h42
-rw-r--r--media/libstagefright/DataSource.cpp106
2 files changed, 56 insertions, 92 deletions
diff --git a/include/media/stagefright/DataSource.h b/include/media/stagefright/DataSource.h
index 56abe71..de5ddd3 100644
--- a/include/media/stagefright/DataSource.h
+++ b/include/media/stagefright/DataSource.h
@@ -36,40 +36,6 @@ class IDataSource;
struct IMediaHTTPService;
class String8;
struct HTTPBase;
-class DataSource;
-
-class Sniffer : public RefBase {
-public:
- Sniffer();
-
- ////////////////////////////////////////////////////////////////////////////
-
- bool sniff(DataSource *source, String8 *mimeType, float *confidence, sp<AMessage> *meta);
-
- // The sniffer can optionally fill in "meta" with an AMessage containing
- // a dictionary of values that helps the corresponding extractor initialize
- // its state without duplicating effort already exerted by the sniffer.
- typedef bool (*SnifferFunc)(
- const sp<DataSource> &source, String8 *mimeType,
- float *confidence, sp<AMessage> *meta);
-
- //if isExtendedExtractor = true, store the location of the sniffer to register
- void registerSniffer_l(SnifferFunc func);
- void registerDefaultSniffers();
-
- virtual ~Sniffer() {}
-
-private:
- Mutex mSnifferMutex;
- List<SnifferFunc> mSniffers;
- List<SnifferFunc> mExtraSniffers;
- List<SnifferFunc>::iterator extendedSnifferPosition;
-
- void registerSnifferPlugin();
-
- Sniffer(const Sniffer &);
- Sniffer &operator=(const Sniffer &);
-};
class DataSource : public RefBase {
public:
@@ -91,7 +57,7 @@ public:
static sp<DataSource> CreateMediaHTTP(const sp<IMediaHTTPService> &httpService);
static sp<DataSource> CreateFromIDataSource(const sp<IDataSource> &source);
- DataSource() : mSniffer(new Sniffer()) {}
+ DataSource() {}
virtual status_t initCheck() const = 0;
@@ -145,7 +111,11 @@ public:
protected:
virtual ~DataSource() {}
- sp<Sniffer> mSniffer;
+private:
+ static Mutex gSnifferMutex;
+ static List<SnifferFunc> gSniffers;
+ static List<SnifferFunc> gExtraSniffers;
+ static bool gSniffersRegistered;
static void RegisterSniffer_l(SnifferFunc func);
static void RegisterSnifferPlugin();
diff --git a/media/libstagefright/DataSource.cpp b/media/libstagefright/DataSource.cpp
index 2df045f..8b49d18 100644
--- a/media/libstagefright/DataSource.cpp
+++ b/media/libstagefright/DataSource.cpp
@@ -129,31 +129,14 @@ status_t DataSource::getSize(off64_t *size) {
////////////////////////////////////////////////////////////////////////////////
+Mutex DataSource::gSnifferMutex;
+List<DataSource::SnifferFunc> DataSource::gSniffers;
+List<DataSource::SnifferFunc> DataSource::gExtraSniffers;
+bool DataSource::gSniffersRegistered = false;
+
bool DataSource::sniff(
String8 *mimeType, float *confidence, sp<AMessage> *meta) {
- return mSniffer->sniff(this, mimeType, confidence, meta);
-}
-
-// static
-void DataSource::RegisterSniffer_l(SnifferFunc /* func */) {
- return;
-}
-
-// static
-void DataSource::RegisterDefaultSniffers() {
- return;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-Sniffer::Sniffer() {
- registerDefaultSniffers();
-}
-
-bool Sniffer::sniff(
- DataSource *source, String8 *mimeType, float *confidence, sp<AMessage> *meta) {
-
bool forceExtraSniffers = false;
if (*confidence == 3.14f) {
@@ -165,13 +148,19 @@ bool Sniffer::sniff(
*confidence = 0.0f;
meta->clear();
- Mutex::Autolock autoLock(mSnifferMutex);
- for (List<SnifferFunc>::iterator it = mSniffers.begin();
- it != mSniffers.end(); ++it) {
+ {
+ Mutex::Autolock autoLock(gSnifferMutex);
+ if (!gSniffersRegistered) {
+ return false;
+ }
+ }
+
+ for (List<SnifferFunc>::iterator it = gSniffers.begin();
+ it != gSniffers.end(); ++it) {
String8 newMimeType;
float newConfidence;
sp<AMessage> newMeta;
- if ((*it)(source, &newMimeType, &newConfidence, &newMeta)) {
+ if ((*it)(this, &newMimeType, &newConfidence, &newMeta)) {
if (newConfidence > *confidence) {
*mimeType = newMimeType;
*confidence = newConfidence;
@@ -182,12 +171,12 @@ bool Sniffer::sniff(
/* Only do the deeper sniffers if the results are null or in doubt */
if (mimeType->length() == 0 || *confidence < 0.21f || forceExtraSniffers) {
- for (List<SnifferFunc>::iterator it = mExtraSniffers.begin();
- it != mExtraSniffers.end(); ++it) {
+ for (List<SnifferFunc>::iterator it = gExtraSniffers.begin();
+ it != gExtraSniffers.end(); ++it) {
String8 newMimeType;
float newConfidence;
sp<AMessage> newMeta;
- if ((*it)(source, &newMimeType, &newConfidence, &newMeta)) {
+ if ((*it)(this, &newMimeType, &newConfidence, &newMeta)) {
if (newConfidence > *confidence) {
*mimeType = newMimeType;
*confidence = newConfidence;
@@ -200,19 +189,19 @@ bool Sniffer::sniff(
return *confidence > 0.0;
}
-void Sniffer::registerSniffer_l(SnifferFunc func) {
-
- for (List<SnifferFunc>::iterator it = mSniffers.begin();
- it != mSniffers.end(); ++it) {
+// static
+void DataSource::RegisterSniffer_l(SnifferFunc func) {
+ for (List<SnifferFunc>::iterator it = gSniffers.begin();
+ it != gSniffers.end(); ++it) {
if (*it == func) {
return;
}
}
- mSniffers.push_back(func);
+ gSniffers.push_back(func);
}
-void Sniffer::registerSnifferPlugin() {
+void DataSource::RegisterSnifferPlugin() {
static void (*getExtractorPlugin)(MediaExtractor::Plugin *) =
(void (*)(MediaExtractor::Plugin *))loadExtractorPlugin();
@@ -221,40 +210,45 @@ void Sniffer::registerSnifferPlugin() {
getExtractorPlugin(plugin);
}
if (plugin->sniff) {
- for (List<SnifferFunc>::iterator it = mExtraSniffers.begin();
- it != mExtraSniffers.end(); ++it) {
+ for (List<SnifferFunc>::iterator it = gExtraSniffers.begin();
+ it != gExtraSniffers.end(); ++it) {
if (*it == plugin->sniff) {
return;
}
}
- mExtraSniffers.push_back(plugin->sniff);
+ gExtraSniffers.push_back(plugin->sniff);
}
}
-void Sniffer::registerDefaultSniffers() {
- Mutex::Autolock autoLock(mSnifferMutex);
-
- registerSniffer_l(SniffMPEG4);
- registerSniffer_l(SniffMatroska);
- registerSniffer_l(SniffOgg);
- registerSniffer_l(SniffWAV);
- registerSniffer_l(SniffFLAC);
- registerSniffer_l(SniffAMR);
- registerSniffer_l(SniffMPEG2TS);
- registerSniffer_l(SniffMP3);
- registerSniffer_l(SniffAAC);
- registerSniffer_l(SniffMPEG2PS);
- registerSniffer_l(SniffWVM);
- registerSniffer_l(SniffMidi);
- registerSniffer_l(AVUtils::get()->getExtendedSniffer());
- registerSnifferPlugin();
+// static
+void DataSource::RegisterDefaultSniffers() {
+ Mutex::Autolock autoLock(gSnifferMutex);
+ if (gSniffersRegistered) {
+ return;
+ }
+
+ RegisterSniffer_l(SniffMPEG4);
+ RegisterSniffer_l(SniffMatroska);
+ RegisterSniffer_l(SniffOgg);
+ RegisterSniffer_l(SniffWAV);
+ RegisterSniffer_l(SniffFLAC);
+ RegisterSniffer_l(SniffAMR);
+ RegisterSniffer_l(SniffMPEG2TS);
+ RegisterSniffer_l(SniffMP3);
+ RegisterSniffer_l(SniffAAC);
+ RegisterSniffer_l(SniffMPEG2PS);
+ RegisterSniffer_l(SniffWVM);
+ RegisterSniffer_l(SniffMidi);
+ RegisterSniffer_l(AVUtils::get()->getExtendedSniffer());
+ RegisterSnifferPlugin();
char value[PROPERTY_VALUE_MAX];
if (property_get("drm.service.enabled", value, NULL)
&& (!strcmp(value, "1") || !strcasecmp(value, "true"))) {
- registerSniffer_l(SniffDRM);
+ RegisterSniffer_l(SniffDRM);
}
+ gSniffersRegistered = true;
}
// static