Loading include/media/MediaCodecInfo.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading media/libmedia/MediaCodecInfo.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading media/libstagefright/MediaCodecList.cpp +21 −5 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading Loading
include/media/MediaCodecInfo.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
media/libmedia/MediaCodecInfo.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading
media/libstagefright/MediaCodecList.cpp +21 −5 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading