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

Commit dbcb4c17 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Allow directly setting a DataSource for NuMediaExtractor

This adds NuMediaExtractor::setDataSource(const sp<DataSource> &source),
which some new code under frameworks/av will use to let applications
provide a custom data source for extractors.

Change-Id: I8fb743441d04b4eadbda3c2d76858c3d60e2a3b2
parent 9a150640
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ struct NuMediaExtractor : public RefBase {

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

    status_t setDataSource(const sp<DataSource> &datasource);

    size_t countTracks() const;
    status_t getTrackFormat(size_t index, sp<AMessage> *format) const;

+13 −3
Original line number Diff line number Diff line
@@ -134,18 +134,28 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {

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

    status_t err = fileSource->initCheck();
    return setDataSource(fileSource);
}

status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
    Mutex::Autolock autoLock(mLock);

    if (mImpl != NULL) {
        return -EINVAL;
    }

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

    mImpl = MediaExtractor::Create(fileSource);
    mImpl = MediaExtractor::Create(source);

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

    mDataSource = fileSource;
    mDataSource = source;

    updateDurationAndBitrate();