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

Commit 83afcd20 authored by Lajos Molnar's avatar Lajos Molnar Committed by android-build-merger
Browse files

Merge changes Ie3033144,Ib4008117 into nyc-dev

am: 6fae62de

* commit '6fae62de':
  WebmWriter: respect track add order
  WebmWriter: do not crash on missing format keys

Change-Id: Iad2fa90b0bb0687f0151b5a23d1dfb964612d123
parents 9f82b731 6fae62de
Loading
Loading
Loading
Loading
+35 −13
Original line number Diff line number Diff line
@@ -84,9 +84,13 @@ WebmWriter::WebmWriter(int fd)
sp<WebmElement> WebmWriter::videoTrack(const sp<MetaData>& md) {
    int32_t width, height;
    const char *mimeType;
    CHECK(md->findInt32(kKeyWidth, &width));
    CHECK(md->findInt32(kKeyHeight, &height));
    CHECK(md->findCString(kKeyMIMEType, &mimeType));
    if (!md->findInt32(kKeyWidth, &width)
            || !md->findInt32(kKeyHeight, &height)
            || !md->findCString(kKeyMIMEType, &mimeType)) {
        ALOGE("Missing format keys for video track");
        md->dumpToLog();
        return NULL;
    }
    const char *codec;
    if (!strncasecmp(
            mimeType,
@@ -99,7 +103,8 @@ sp<WebmElement> WebmWriter::videoTrack(const sp<MetaData>& md) {
            strlen(MEDIA_MIMETYPE_VIDEO_VP9))) {
        codec = "V_VP9";
    } else {
        CHECK(!"Unsupported codec");
        ALOGE("Unsupported codec: %s", mimeType);
        return NULL;
    }
    return WebmElement::VideoTrackEntry(codec, width, height, md);
}
@@ -114,10 +119,14 @@ sp<WebmElement> WebmWriter::audioTrack(const sp<MetaData>& md) {
    const void *headerData3;
    size_t headerSize1, headerSize2 = sizeof(headerData2), headerSize3;

    CHECK(md->findInt32(kKeyChannelCount, &nChannels));
    CHECK(md->findInt32(kKeySampleRate, &samplerate));
    CHECK(md->findData(kKeyVorbisInfo, &type, &headerData1, &headerSize1));
    CHECK(md->findData(kKeyVorbisBooks, &type, &headerData3, &headerSize3));
    if (!md->findInt32(kKeyChannelCount, &nChannels)
            || !md->findInt32(kKeySampleRate, &samplerate)
            || !md->findData(kKeyVorbisInfo, &type, &headerData1, &headerSize1)
            || !md->findData(kKeyVorbisBooks, &type, &headerData3, &headerSize3)) {
        ALOGE("Missing format keys for audio track");
        md->dumpToLog();
        return NULL;
    }

    size_t codecPrivateSize = 1;
    codecPrivateSize += XiphLaceCodeLen(headerSize1);
@@ -243,6 +252,11 @@ void WebmWriter::release() {
    mFd = -1;
    mInitCheck = NO_INIT;
    mStarted = false;
    for (size_t ix = 0; ix < kMaxStreams; ++ix) {
        mStreams[ix].mTrackEntry.clear();
        mStreams[ix].mSource.clear();
    }
    mStreamsInOrder.clear();
}

status_t WebmWriter::reset() {
@@ -275,6 +289,8 @@ status_t WebmWriter::reset() {
        if (durationUs < minDurationUs) {
            minDurationUs = durationUs;
        }

        mStreams[i].mThread.clear();
    }

    if (numTracks() > 1) {
@@ -389,6 +405,11 @@ status_t WebmWriter::addSource(const sp<IMediaSource> &source) {
    // Go ahead to add the track.
    mStreams[streamIndex].mSource = source;
    mStreams[streamIndex].mTrackEntry = mStreams[streamIndex].mMakeTrack(source->getFormat());
    if (mStreams[streamIndex].mTrackEntry == NULL) {
        mStreams[streamIndex].mSource.clear();
        return BAD_VALUE;
    }
    mStreamsInOrder.push_back(mStreams[streamIndex].mTrackEntry);

    return OK;
}
@@ -429,7 +450,10 @@ status_t WebmWriter::start(MetaData *params) {
            mTimeCodeScale = tcsl;
        }
    }
    CHECK_GT(mTimeCodeScale, 0);
    if (mTimeCodeScale == 0) {
        ALOGE("movie time scale is 0");
        return BAD_VALUE;
    }
    ALOGV("movie time scale: %" PRIu64, mTimeCodeScale);

    /*
@@ -451,10 +475,8 @@ status_t WebmWriter::start(MetaData *params) {
    info = WebmElement::SegmentInfo(mTimeCodeScale, 0);

    List<sp<WebmElement> > children;
    for (size_t i = 0; i < kMaxStreams; ++i) {
        if (mStreams[i].mTrackEntry != NULL) {
            children.push_back(mStreams[i].mTrackEntry);
        }
    for (size_t i = 0; i < mStreamsInOrder.size(); ++i) {
        children.push_back(mStreamsInOrder[i]);
    }
    tracks = new WebmMaster(kMkvTracks, children);

+1 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ private:
        }
    };
    WebmStream mStreams[kMaxStreams];
    Vector<sp<WebmElement>> mStreamsInOrder;

    sp<WebmFrameSinkThread> mSinkThread;