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

Commit d018b8ff authored by Lajos Molnar's avatar Lajos Molnar Committed by Android (Google) Code Review
Browse files

Merge "MediaCodecList: handle errors gracefully" into lmp-dev

parents 2461e0cf 6ff58f04
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -107,6 +107,7 @@ private:
    status_t initializeCapabilities(const CodecCapabilities &caps);
    status_t initializeCapabilities(const CodecCapabilities &caps);
    void addDetail(const AString &key, const AString &value);
    void addDetail(const AString &key, const AString &value);
    void addFeature(const AString &key, int32_t value);
    void addFeature(const AString &key, int32_t value);
    void removeMime(const char *mime);
    void complete();
    void complete();


    DISALLOW_EVIL_CONSTRUCTORS(MediaCodecInfo);
    DISALLOW_EVIL_CONSTRUCTORS(MediaCodecInfo);
+8 −0
Original line number Original line Diff line number Diff line
@@ -206,6 +206,14 @@ status_t MediaCodecInfo::addMime(const char *mime) {
    return OK;
    return OK;
}
}


void MediaCodecInfo::removeMime(const char *mime) {
    ssize_t ix = getCapabilityIndex(mime);
    if (ix >= 0) {
        mCaps.removeItemsAt(ix);
        // mCurrentCaps will be removed when completed
    }
}

status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) {
status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) {
    mCurrentCaps->mProfileLevels.clear();
    mCurrentCaps->mProfileLevels.clear();
    mCurrentCaps->mColorFormats.clear();
    mCurrentCaps->mColorFormats.clear();
+21 −5
Original line number Original line Diff line number Diff line
@@ -482,11 +482,21 @@ status_t MediaCodecList::addMediaCodecFromAttributes(
    }
    }


    mCurrentInfo = new MediaCodecInfo(name, encoder, type);
    mCurrentInfo = new MediaCodecInfo(name, encoder, type);
    // The next step involves trying to load the codec, which may
    // fail.  Only list the codec if this succeeds.
    // However, keep mCurrentInfo object around until parsing
    // of full codec info is completed.
    if (initializeCapabilities(type) == OK) {
        mCodecInfos.push_back(mCurrentInfo);
        mCodecInfos.push_back(mCurrentInfo);
    return initializeCapabilities(type);
    }
    return OK;
}
}


status_t MediaCodecList::initializeCapabilities(const char *type) {
status_t MediaCodecList::initializeCapabilities(const char *type) {
    if (type == NULL) {
        return OK;
    }

    ALOGV("initializeCapabilities %s:%s",
    ALOGV("initializeCapabilities %s:%s",
            mCurrentInfo->mName.c_str(), type);
            mCurrentInfo->mName.c_str(), type);


@@ -553,12 +563,18 @@ status_t MediaCodecList::addTypeFromAttributes(const char **attrs) {
    }
    }


    status_t ret = mCurrentInfo->addMime(name);
    status_t ret = mCurrentInfo->addMime(name);
    if (ret == OK) {
    if (ret != OK) {
        ret = initializeCapabilities(name);
    }
        return ret;
        return ret;
    }
    }


    // The next step involves trying to load the codec, which may
    // fail.  Handle this gracefully (by not reporting such mime).
    if (initializeCapabilities(name) != OK) {
        mCurrentInfo->removeMime(name);
    }
    return OK;
}

// legacy method for non-advanced codecs
// legacy method for non-advanced codecs
ssize_t MediaCodecList::findCodecByType(
ssize_t MediaCodecList::findCodecByType(
        const char *type, bool encoder, size_t startIndex) const {
        const char *type, bool encoder, size_t startIndex) const {