Re: [FFmpeg-devel] [PATCH 2/2] avcodec/mediacodec_wrapper: use MediaCodecInfo.isSoftwareOnly() when available

2021-03-10 Thread Matthieu Bouron
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

2021-03-08 Thread Matthieu Bouron
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

2021-02-17 Thread sfan5


>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".