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

Commit 45a05eb5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "b23270724" into nyc-dev

* changes:
  Handle idle->loaded state transition when loaded->idle is still in progress
  IMediaExtractor: ensure users to check returned value by getTrack.
  Don't CHECK if the source can't be started
  Fix issues with extractor dumpsys
parents 41974795 c18e2734
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1037,6 +1037,10 @@ int main(int argc, char **argv) {
                bool haveVideo = false;
                for (size_t i = 0; i < numTracks; ++i) {
                    sp<IMediaSource> source = extractor->getTrack(i);
                    if (source == nullptr) {
                        fprintf(stderr, "skip NULL track %zu, track count %zu.\n", i, numTracks);
                        continue;
                    }

                    const char *mime;
                    CHECK(source->getFormat()->findCString(
@@ -1099,6 +1103,10 @@ int main(int argc, char **argv) {
                }

                mediaSource = extractor->getTrack(i);
                if (mediaSource == nullptr) {
                    fprintf(stderr, "skip NULL track %zu, total tracks %zu.\n", i, numTracks);
                    return -1;
                }
            }
        }

+8 −2
Original line number Diff line number Diff line
@@ -171,7 +171,8 @@ MyConvertingStreamSource::MyConvertingStreamSource(const char *filename)
    mWriter = new MPEG2TSWriter(
            this, &MyConvertingStreamSource::WriteDataWrapper);

    for (size_t i = 0; i < extractor->countTracks(); ++i) {
    size_t numTracks = extractor->countTracks();
    for (size_t i = 0; i < numTracks; ++i) {
        const sp<MetaData> &meta = extractor->getTrackMetaData(i);

        const char *mime;
@@ -181,7 +182,12 @@ MyConvertingStreamSource::MyConvertingStreamSource(const char *filename)
            continue;
        }

        CHECK_EQ(mWriter->addSource(extractor->getTrack(i)), (status_t)OK);
        sp<IMediaSource> track = extractor->getTrack(i);
        if (track == nullptr) {
            fprintf(stderr, "skip NULL track %zu, total tracks %zu\n", i, numTracks);
            continue;
        }
        CHECK_EQ(mWriter->addSource(track), (status_t)OK);
    }

    CHECK_EQ(mWriter->start(), (status_t)OK);
+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ public:
    DECLARE_META_INTERFACE(MediaExtractor);

    virtual size_t countTracks() = 0;
    // This function could return NULL IMediaSource even when index is within the
    // track count returned by countTracks, since it's possible the track is malformed
    // and it's not detected during countTracks call.
    virtual sp<IMediaSource> getTrack(size_t index) = 0;

    enum GetTrackMetaDataFlags {
+15 −5
Original line number Diff line number Diff line
@@ -209,13 +209,18 @@ String8 ExtractorInstance::toString() const {
    for (size_t i = 0; i < tracks.size(); i++) {
        const String8 desc = trackDescriptions.itemAt(i);
        str.appendFormat("    track {%s} ", desc.string());
        const sp<IMediaSource> source = tracks.itemAt(i).promote();
        wp<IMediaSource> wSource = tracks.itemAt(i);
        if (wSource == NULL) {
            str.append(": null\n");
        } else {
            const sp<IMediaSource> source = wSource.promote();
            if (source == NULL) {
                str.append(": deleted\n");
            } else {
                str.appendFormat(": active\n");
            }
        }
    }
    return str;
}

@@ -232,9 +237,14 @@ void registerMediaSource(
        if (extractor != NULL && extractor == ex) {
            if (instance.tracks.size() > 5) {
                instance.tracks.resize(5);
                instance.trackDescriptions.resize(5);
            }
            instance.tracks.push_front(source);
            instance.trackDescriptions.add(source->getFormat()->toString());
            if (source != NULL) {
                instance.trackDescriptions.push_front(source->getFormat()->toString());
            } else {
                instance.trackDescriptions.push_front(String8::empty());
            }
            break;
        }
    }
+8 −1
Original line number Diff line number Diff line
@@ -305,7 +305,14 @@ status_t NuMediaExtractor::selectTrack(size_t index) {

    sp<IMediaSource> source = mImpl->getTrack(index);

    CHECK_EQ((status_t)OK, source->start());
    if (source == nullptr) {
        return ERROR_MALFORMED;
    }

    status_t ret = source->start();
    if (ret != OK) {
        return ret;
    }

    mSelectedTracks.push();
    TrackInfo *info = &mSelectedTracks.editItemAt(mSelectedTracks.size() - 1);
Loading