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

Commit 63d433bf authored by Songyue Han's avatar Songyue Han Committed by Android (Google) Code Review
Browse files

Merge "MediaCodecList: Add codecs with its own name first. Then add aliases." into main

parents ad35a542 e21ca2e6
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -75,19 +75,30 @@ public:
    JavaMediaCodecListWrapper(sp<IMediaCodecList> mcl)
            : mCodecList(mcl) {
        size_t numCodecs = mcl->countCodecs();
        // First add the codecs with its unique codec name.
        for (size_t ix = 0; ix < numCodecs; ++ix) {
            sp<MediaCodecInfo> info = mcl->getCodecInfo(ix);
            Vector<AString> namesAndAliases;
            info->getAliases(&namesAndAliases);
            namesAndAliases.insertAt(0);
            namesAndAliases.editItemAt(0) = info->getCodecName();
            for (const AString &nameOrAlias : namesAndAliases) {
                if (mInfoIndex.count(nameOrAlias) > 0) {
            AString name = info->getCodecName();
            // The codec names are guaranteed to be unique because:
            // 1. Codecs hal names are unique.
            // 2. MediaCodecListWriter splits MediaCodecInfos supporting
            //    multiple media types and assigns each split a unique name.
            // 3. codecName = supportMultipleMediaTypes ? splitName : halName
            mInfoIndex.emplace(name, mInfoList.size());
            mInfoList.emplace_back(Info { info, name });
        }
        // Then add codecs with its aliases. Skip aliases that have been used.
        for (size_t ix = 0; ix < numCodecs; ++ix) {
            sp<MediaCodecInfo> info = mcl->getCodecInfo(ix);
            Vector<AString> aliases;
            info->getAliases(&aliases);
            for (const AString &alias : aliases) {
                if (mInfoIndex.count(alias) > 0) {
                    // skip duplicate names or aliases
                    continue;
                }
                mInfoIndex.emplace(nameOrAlias, mInfoList.size());
                mInfoList.emplace_back(Info { info, nameOrAlias });
                mInfoIndex.emplace(alias, mInfoList.size());
                mInfoList.emplace_back(Info { info, alias });
            }
        }
    }