Loading media/codec2/sfplugin/Codec2InfoBuilder.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()); } Loading Loading @@ -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); } } } } } Loading media/libmedia/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -223,7 +223,6 @@ cc_library_static { "com.android.media", ], srcs: ["MidiIoWrapper.cpp"], static_libs: [ Loading Loading @@ -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", ], Loading media/libmedia/MediaCodecInfo.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading media/libmedia/include/media/MediaCodecInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading media/libstagefright/ACodec.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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); } } } Loading Loading
media/codec2/sfplugin/Codec2InfoBuilder.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()); } Loading Loading @@ -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); } } } } } Loading
media/libmedia/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -223,7 +223,6 @@ cc_library_static { "com.android.media", ], srcs: ["MidiIoWrapper.cpp"], static_libs: [ Loading Loading @@ -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", ], Loading
media/libmedia/MediaCodecInfo.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
media/libmedia/include/media/MediaCodecInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
media/libstagefright/ACodec.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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); } } } Loading