Message ID | tencent_DD0450BBA6F827D7AA8653239C694B96E606@qq.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,1/2] avcodec/mediacodec_wrapper: get api level via NDK method | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
tis 2023-01-10 klockan 00:36 +0800 skrev Zhao Zhili: > From: Zhao Zhili <zhilizhao@tencent.com> > > android_get_device_api_level() is a static inline method 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. The code tests on API >= 24 not 29. Or do you mean that android_get_device_api_level() is available since 24 but not used until 29? /Tomas
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Tomas Härdin > Sent: 2023年1月9日 20:32 > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH 1/2] avcodec/mediacodec_wrapper: get api level via NDK method > > tis 2023-01-10 klockan 00:36 +0800 skrev Zhao Zhili: > > From: Zhao Zhili <zhilizhao@tencent.com> > > > > android_get_device_api_level() is a static inline method 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. > > The code tests on API >= 24 not 29. Or do you mean that > android_get_device_api_level() is available since 24 but not used until > 29? If android_get_device_api_level() is a global symbol instead of inline method, I would use dlsym() instead to make it works on build target api level < 24 and device/runtime api level >= 24. > > > /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-request@ffmpeg.org with subject "unsubscribe".
mån 2023-01-09 klockan 22:41 +0800 skrev Zhao Zhili: > > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > Tomas Härdin > > Sent: 2023年1月9日 20:32 > > To: FFmpeg development discussions and patches < > > ffmpeg-devel@ffmpeg.org> > > Subject: Re: [FFmpeg-devel] [PATCH 1/2] avcodec/mediacodec_wrapper: > > get api level via NDK method > > > > tis 2023-01-10 klockan 00:36 +0800 skrev Zhao Zhili: > > > From: Zhao Zhili <zhilizhao@tencent.com> > > > > > > android_get_device_api_level() is a static inline method 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. > > > > The code tests on API >= 24 not 29. Or do you mean that > > android_get_device_api_level() is available since 24 but not used > > until > > 29? > > If android_get_device_api_level() is a global symbol instead of > inline method, I would > use dlsym() instead to make it works on build target api level < 24 > and device/runtime > api level >= 24. Perhaps a comment would be appropriate here as well then. A lot of the NDK vs JNI vs versions of either isn't entirely obvious /Tomas
diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index 4d6e9487b8..b675623a0b 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -2513,6 +2513,10 @@ FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime_type, int ndk int ff_Build_SDK_INT(AVCodecContext *avctx) { int ret = -1; + +#if __ANDROID_API__ >= 24 + ret = android_get_device_api_level(); +#else JNIEnv *env = NULL; jclass versionClass; jfieldID sdkIntFieldID; @@ -2522,5 +2526,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; }