Re: [FFmpeg-devel] [PATCH 2/2] avcodec/mediacodec_wrapper: use MediaCodecInfo.isSoftwareOnly() when available
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 > > 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. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
Re: [FFmpeg-devel] [PATCH 2/2] avcodec/mediacodec_wrapper: use MediaCodecInfo.isSoftwareOnly() when available
On Wed, Feb 17, 2021 at 04:51:09PM +0100, sfan5 wrote: > > From 22ebde779f61fb030633a881ef320264ea446b6b Mon Sep 17 00:00:00 2001 > From: sfan5 > 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, -- Matthieu B. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH 2/2] avcodec/mediacodec_wrapper: use MediaCodecInfo.isSoftwareOnly() when available
>From 22ebde779f61fb030633a881ef320264ea446b6b Mon Sep 17 00:00:00 2001 From: sfan5 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 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".