[FFmpeg-devel] [PATCH 2/2] avcodec/mediacodec_wrapper: use MediaCodecInfo.isSoftwareOnly() when available
Matthieu Bouron
matthieu.bouron at gmail.com
Wed Mar 10 15:23:01 EET 2021
On Mon, Mar 08, 2021 at 10:12:38AM +0100, Matthieu Bouron wrote:
> On Wed, Feb 17, 2021 at 04:51:09PM +0100, sfan5 wrote:
> >
>
> > From 22ebde779f61fb030633a881ef320264ea446b6b Mon Sep 17 00:00:00 2001
> > From: sfan5 <sfan5 at live.de>
> > Date: Thu, 11 Feb 2021 20:48:54 +0100
> > Subject: [PATCH 2/2] avcodec/mediacodec_wrapper: use
> > MediaCodecInfo.isSoftwareOnly() when available
> >
> > Added in Android 10 it provides a reliable way of filtering out
> > software decoders, unlike existing string-based checks.
> > ---
> > libavcodec/mediacodec_wrapper.c | 13 +++++++++++++
> > 1 file changed, 13 insertions(+)
> >
> > diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c
> > index f1945bcfc0..c829941d6b 100644
> > --- a/libavcodec/mediacodec_wrapper.c
> > +++ b/libavcodec/mediacodec_wrapper.c
> > @@ -45,6 +45,7 @@ struct JNIAMediaCodecListFields {
> > jmethodID get_codec_capabilities_id;
> > jmethodID get_supported_types_id;
> > jmethodID is_encoder_id;
> > + jmethodID is_software_only_id;
> >
> > jclass codec_capabilities_class;
> > jfieldID color_formats_id;
> > @@ -81,6 +82,7 @@ static const struct FFJniField jni_amediacodeclist_mapping[] = {
> > { "android/media/MediaCodecInfo", "getCapabilitiesForType", "(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;", FF_JNI_METHOD, offsetof(struct JNIAMediaCodecListFields, get_codec_capabilities_id), 1 },
> > { "android/media/MediaCodecInfo", "getSupportedTypes", "()[Ljava/lang/String;", FF_JNI_METHOD, offsetof(struct JNIAMediaCodecListFields, get_supported_types_id), 1 },
> > { "android/media/MediaCodecInfo", "isEncoder", "()Z", FF_JNI_METHOD, offsetof(struct JNIAMediaCodecListFields, is_encoder_id), 1 },
> > + { "android/media/MediaCodecInfo", "isSoftwareOnly", "()Z", FF_JNI_METHOD, offsetof(struct JNIAMediaCodecListFields, is_software_only_id), 0 },
> >
> > { "android/media/MediaCodecInfo$CodecCapabilities", NULL, NULL, FF_JNI_CLASS, offsetof(struct JNIAMediaCodecListFields, codec_capabilities_class), 1 },
> > { "android/media/MediaCodecInfo$CodecCapabilities", "colorFormats", "[I", FF_JNI_FIELD, offsetof(struct JNIAMediaCodecListFields, color_formats_id), 1 },
> > @@ -441,6 +443,17 @@ char *ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int e
> > goto done_with_info;
> > }
> >
> > + if (jfields.is_software_only_id) {
> > + int is_software_only = (*env)->CallBooleanMethod(env, info, jfields.is_software_only_id);
> > + if (ff_jni_exception_check(env, 1, log_ctx) < 0) {
> > + goto done;
> > + }
> > +
> > + if (is_software_only) {
> > + goto done_with_info;
> > + }
> > + }
> > +
> > codec_name = (*env)->CallObjectMethod(env, info, jfields.get_name_id);
> > if (ff_jni_exception_check(env, 1, log_ctx) < 0) {
> > goto done;
> > --
> > 2.30.1
> >
>
> LGTM, I'll push the patch in two days if there is no objection.
> Thanks,
Applied as a7425f712aeed6e18204a68810529895fdbdb1be.
Thanks.
--
Matthieu B.
More information about the ffmpeg-devel
mailing list