summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-12-06 02:44:14 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-12-06 02:44:14 +0000
commit40d3aeea11af7ee82ca65436651f5931aa061d6f (patch)
treee5d8e6c8d7809ff0d86118e56ac8e7f1954aef2e
parent20016efdd603930da1792739b7be3ae8874cbb74 (diff)
parent1814597d3549ae45f4ccf26510aa12482b022cd3 (diff)
downloadav-android12-gsi.tar.gz
Merge "Merge cherrypicks of [20068332] into sc-platform-release. am: e78e8a125b" into android12-gsiandroid12-gsi
-rw-r--r--media/libstagefright/NuMediaExtractor.cpp95
-rw-r--r--media/libstagefright/include/media/stagefright/NuMediaExtractor.h2
2 files changed, 36 insertions, 61 deletions
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 68933242a8..2b45f2d16d 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -72,31 +72,17 @@ NuMediaExtractor::~NuMediaExtractor() {
}
}
-status_t NuMediaExtractor::setDataSource(
- const sp<MediaHTTPService> &httpService,
- const char *path,
- const KeyedVector<String8, String8> *headers) {
- Mutex::Autolock autoLock(mLock);
-
- if (mImpl != NULL || path == NULL) {
- return -EINVAL;
- }
-
- sp<DataSource> dataSource =
- DataSourceFactory::getInstance()->CreateFromURI(httpService, path, headers);
-
- if (dataSource == NULL) {
- return -ENOENT;
- }
+status_t NuMediaExtractor::initMediaExtractor(const sp<DataSource>& dataSource) {
+ status_t err = OK;
mImpl = MediaExtractorFactory::Create(dataSource);
-
if (mImpl == NULL) {
+ ALOGE("%s: failed to create MediaExtractor", __FUNCTION__);
return ERROR_UNSUPPORTED;
}
+
setEntryPointToRemoteMediaExtractor();
- status_t err = OK;
if (!mCasToken.empty()) {
err = mImpl->setMediaCas(mCasToken);
if (err != OK) {
@@ -105,6 +91,10 @@ status_t NuMediaExtractor::setDataSource(
}
}
+ // Get the name of the implementation.
+ mName = mImpl->name();
+
+ // Update the duration and bitrate
err = updateDurationAndBitrate();
if (err == OK) {
mDataSource = dataSource;
@@ -113,6 +103,27 @@ status_t NuMediaExtractor::setDataSource(
return OK;
}
+status_t NuMediaExtractor::setDataSource(
+ const sp<MediaHTTPService> &httpService,
+ const char *path,
+ const KeyedVector<String8, String8> *headers) {
+ Mutex::Autolock autoLock(mLock);
+
+ if (mImpl != NULL || path == NULL) {
+ return -EINVAL;
+ }
+
+ sp<DataSource> dataSource =
+ DataSourceFactory::getInstance()->CreateFromURI(httpService, path, headers);
+
+ if (dataSource == NULL) {
+ return -ENOENT;
+ }
+
+ // Initialize MediaExtractor using the data source
+ return initMediaExtractor(dataSource);
+}
+
status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
ALOGV("setDataSource fd=%d (%s), offset=%lld, length=%lld",
@@ -131,27 +142,8 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
return err;
}
- mImpl = MediaExtractorFactory::Create(fileSource);
-
- if (mImpl == NULL) {
- return ERROR_UNSUPPORTED;
- }
- setEntryPointToRemoteMediaExtractor();
-
- if (!mCasToken.empty()) {
- err = mImpl->setMediaCas(mCasToken);
- if (err != OK) {
- ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
- return err;
- }
- }
-
- err = updateDurationAndBitrate();
- if (err == OK) {
- mDataSource = fileSource;
- }
-
- return OK;
+ // Initialize MediaExtractor using the file source
+ return initMediaExtractor(fileSource);
}
status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
@@ -166,32 +158,13 @@ status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
return err;
}
- mImpl = MediaExtractorFactory::Create(source);
-
- if (mImpl == NULL) {
- return ERROR_UNSUPPORTED;
- }
- setEntryPointToRemoteMediaExtractor();
-
- if (!mCasToken.empty()) {
- err = mImpl->setMediaCas(mCasToken);
- if (err != OK) {
- ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
- return err;
- }
- }
-
- err = updateDurationAndBitrate();
- if (err == OK) {
- mDataSource = source;
- }
-
- return err;
+ // Initialize MediaExtractor using the given data source
+ return initMediaExtractor(source);
}
const char* NuMediaExtractor::getName() const {
Mutex::Autolock autoLock(mLock);
- return mImpl == nullptr ? nullptr : mImpl->name().string();
+ return mImpl == nullptr ? nullptr : mName.string();
}
static String8 arrayToString(const std::vector<uint8_t> &array) {
diff --git a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
index d17a480bb8..52ea28b9ca 100644
--- a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
@@ -146,6 +146,7 @@ private:
Vector<TrackInfo> mSelectedTracks;
int64_t mTotalBitrate; // in bits/sec
int64_t mDurationUs;
+ String8 mName;
void setEntryPointToRemoteMediaExtractor();
@@ -165,6 +166,7 @@ private:
bool getTotalBitrate(int64_t *bitRate) const;
status_t updateDurationAndBitrate();
status_t appendVorbisNumPageSamples(MediaBufferBase *mbuf, const sp<ABuffer> &buffer);
+ status_t initMediaExtractor(const sp<DataSource>& dataSource);
DISALLOW_EVIL_CONSTRUCTORS(NuMediaExtractor);
};