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

Commit 018615e3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "media: advertise detached surface capability for non-tunneled video decoders" into main

parents 41829023 d55f06f9
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -687,6 +687,11 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) {
                const MediaCodecsXmlParser::AttributeMap &attrMap = typeIt->second;
                std::unique_ptr<MediaCodecInfo::CapabilitiesWriter> caps =
                    codecInfo->addMediaType(mediaType.c_str());

                // we could detect tunneled playback via the playback interface, but we never did
                // that for the advertised feature, so for now use only the advertised feature.
                bool canDoTunneledPlayback = false;

                for (const auto &v : attrMap) {
                    std::string key = v.first;
                    std::string value = v.second;
@@ -707,6 +712,11 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) {
                        // Ignore trailing bad characters and default to 0.
                        (void)sscanf(value.c_str(), "%d", &intValue);
                        caps->addDetail(key.c_str(), intValue);

                        if (key.compare(
                                MediaCodecInfo::Capabilities::FEATURE_TUNNELED_PLAYBACK) == 0) {
                            canDoTunneledPlayback = true;
                        }
                    } else {
                        caps->addDetail(key.c_str(), value.c_str());
                    }
@@ -774,6 +784,17 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) {
                        }
                    }
                }

                if (android::media::codec::provider_->null_output_surface_support() &&
                        android::media::codec::provider_->null_output_surface()) {
                    // all non-tunneled video decoders support detached surface mode
                    if (trait.kind == C2Component::KIND_DECODER &&
                            trait.domain == C2Component::DOMAIN_VIDEO &&
                            !canDoTunneledPlayback) {
                        caps->addDetail(
                                MediaCodecInfo::Capabilities::FEATURE_DETACHED_SURFACE, 0);
                    }
                }
            }
        }
    }
+4 −1
Original line number Diff line number Diff line
@@ -223,7 +223,6 @@ cc_library_static {
        "com.android.media",
    ],


    srcs: ["MidiIoWrapper.cpp"],

    static_libs: [
@@ -278,6 +277,10 @@ cc_library_shared {
        "libutils",
    ],

    static_libs: [
        "android.media.codec-aconfig-cc",
    ],

    include_dirs: [
        "system/libhidl/transport/token/1.0/utils/include",
    ],
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ constexpr char MediaCodecInfo::Capabilities::FEATURE_INTRA_REFRESH[];
constexpr char MediaCodecInfo::Capabilities::FEATURE_MULTIPLE_FRAMES[];
constexpr char MediaCodecInfo::Capabilities::FEATURE_SECURE_PLAYBACK[];
constexpr char MediaCodecInfo::Capabilities::FEATURE_TUNNELED_PLAYBACK[];
constexpr char MediaCodecInfo::Capabilities::FEATURE_DETACHED_SURFACE[];

void MediaCodecInfo::Capabilities::getSupportedProfileLevels(
        Vector<ProfileLevel> *profileLevels) const {
+1 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ struct MediaCodecInfo : public RefBase {
        constexpr static char FEATURE_MULTIPLE_FRAMES[] = "feature-multiple-frames";
        constexpr static char FEATURE_SECURE_PLAYBACK[] = "feature-secure-playback";
        constexpr static char FEATURE_TUNNELED_PLAYBACK[] = "feature-tunneled-playback";
        constexpr static char FEATURE_DETACHED_SURFACE[] = "feature-detached-surface";

        /**
         * Returns the supported levels for each supported profile in a target array.
+8 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
#endif

#include <android_media_codec.h>

#include <inttypes.h>
#include <utils/Trace.h>

@@ -9314,6 +9316,12 @@ status_t ACodec::queryCapabilities(
                // adaptive playback is not supported
                caps->removeDetail(MediaCodecInfo::Capabilities::FEATURE_ADAPTIVE_PLAYBACK);
            }

            // all non-tunneled video decoders support detached surface mode
            if (android::media::codec::provider_->null_output_surface_support() &&
                    android::media::codec::provider_->null_output_surface()) {
                caps->addDetail(MediaCodecInfo::Capabilities::FEATURE_DETACHED_SURFACE, 0);
            }
        }
    }