tis 2023-01-10 klockan 19:30 +0800 skrev Zhao Zhili: > From: Zhao Zhili <zhiliz...@tencent.com> > > android_get_device_api_level() is a static inline before API level > 29. It was implemented via __system_property_get(). We can do the > same thing, but I don't want to mess up with __system_property_get. > --- > libavcodec/mediacodec_wrapper.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/libavcodec/mediacodec_wrapper.c > b/libavcodec/mediacodec_wrapper.c > index 4d6e9487b8..34ec2134aa 100644 > --- a/libavcodec/mediacodec_wrapper.c > +++ b/libavcodec/mediacodec_wrapper.c > @@ -2513,6 +2513,21 @@ FFAMediaCodec* > ff_AMediaCodec_createEncoderByType(const char *mime_type, int ndk > int ff_Build_SDK_INT(AVCodecContext *avctx) > { > int ret = -1; > + > +#if __ANDROID_API__ >= 24 > + // android_get_device_api_level() is a static inline before API > level 29. > + // dlsym() might doesn't work. > + // > + // We can implement android_get_device_api_level() by > + // __system_property_get(), but __system_property_get() has > created a lot of > + // troubles and is deprecated. So avoid using > __system_property_get() for > + // now. > + // > + // Hopy we can remove the conditional compilation finally by > bumping the > + // required API level. > + // > + ret = android_get_device_api_level(); > +#else > JNIEnv *env = NULL; > jclass versionClass; > jfieldID sdkIntFieldID; > @@ -2522,5 +2537,8 @@ int ff_Build_SDK_INT(AVCodecContext *avctx) > sdkIntFieldID = (*env)->GetStaticFieldID(env, versionClass, > "SDK_INT", "I"); > ret = (*env)->GetStaticIntField(env, versionClass, > sdkIntFieldID); > (*env)->DeleteLocalRef(env, versionClass); > +#endif > + av_log(avctx, AV_LOG_DEBUG, "device api level %d\n", ret); > + > return ret; > }
Looks OK /Tomas _______________________________________________ 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".