Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a98db787 authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Change NuMediaExtractor's API to support different kinds of data sources."

parents b388e531 918c7652
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -19,7 +19,9 @@

#include <media/stagefright/foundation/ABase.h>
#include <utils/Errors.h>
#include <utils/KeyedVector.h>
#include <utils/RefBase.h>
#include <utils/String8.h>
#include <utils/Vector.h>

namespace android {
@@ -38,7 +40,11 @@ struct NuMediaExtractor : public RefBase {

    NuMediaExtractor();

    status_t setDataSource(const char *path);
    status_t setDataSource(
            const char *path,
            const KeyedVector<String8, String8> *headers = NULL);

    status_t setDataSource(int fd, off64_t offset, off64_t size);

    size_t countTracks() const;
    status_t getTrackFormat(size_t index, sp<AMessage> *format) const;
+13 −1
Original line number Diff line number Diff line
@@ -142,7 +142,19 @@ sp<DataSource> DataSource::CreateFromURI(
        if (httpSource->connect(uri, headers) != OK) {
            return NULL;
        }
        source = new NuCachedSource2(httpSource);

        String8 cacheConfig;
        bool disconnectAtHighwatermark;
        if (headers != NULL) {
            KeyedVector<String8, String8> copy = *headers;
            NuCachedSource2::RemoveCacheSpecificHeaders(
                    &copy, &cacheConfig, &disconnectAtHighwatermark);
        }

        source = new NuCachedSource2(
                httpSource,
                cacheConfig.isEmpty() ? NULL : cacheConfig.string());

# if CHROMIUM_AVAILABLE
    } else if (!strncasecmp("data:", uri, 5)) {
        source = new DataUriSource(uri);
+34 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/DataSource.h>
#include <media/stagefright/FileSource.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
@@ -51,8 +52,13 @@ NuMediaExtractor::~NuMediaExtractor() {
    mSelectedTracks.clear();
}

status_t NuMediaExtractor::setDataSource(const char *path) {
    sp<DataSource> dataSource = DataSource::CreateFromURI(path);
status_t NuMediaExtractor::setDataSource(
        const char *path, const KeyedVector<String8, String8> *headers) {
    if (mImpl != NULL) {
        return -EINVAL;
    }

    sp<DataSource> dataSource = DataSource::CreateFromURI(path, headers);

    if (dataSource == NULL) {
        return -ENOENT;
@@ -67,6 +73,27 @@ status_t NuMediaExtractor::setDataSource(const char *path) {
    return OK;
}

status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
    if (mImpl != NULL) {
        return -EINVAL;
    }

    sp<FileSource> fileSource = new FileSource(dup(fd), offset, size);

    status_t err = fileSource->initCheck();
    if (err != OK) {
        return err;
    }

    mImpl = MediaExtractor::Create(fileSource);

    if (mImpl == NULL) {
        return ERROR_UNSUPPORTED;
    }

    return OK;
}

size_t NuMediaExtractor::countTracks() const {
    return mImpl == NULL ? 0 : mImpl->countTracks();
}
@@ -91,6 +118,11 @@ status_t NuMediaExtractor::getTrackFormat(
    sp<AMessage> msg = new AMessage;
    msg->setString("mime", mime);

    int64_t durationUs;
    if (meta->findInt64(kKeyDuration, &durationUs)) {
        msg->setInt64("durationUs", durationUs);
    }

    if (!strncasecmp("video/", mime, 6)) {
        int32_t width, height;
        CHECK(meta->findInt32(kKeyWidth, &width));