diff mbox series

[FFmpeg-devel,2/2] avcodec/mediacodecenc: check missing Surface

Message ID tencent_5A2D979A0540FA9A4A9FEDAB774E9570A408@qq.com
State Accepted
Commit 567633895bafbf1fba26de937535ee35c135b814
Headers show
Series [FFmpeg-devel,1/2] avcodec/mediacodec: fix missing crop info when use NDK MediaCodec | expand

Checks

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

Commit Message

Zhao Zhili Nov. 23, 2022, 4:49 p.m. UTC
From: Zhao Zhili <zhilizhao@tencent.com>

It's an invalid combination of Java MediaCodec with ANativeWindow.
---
 libavcodec/mediacodecenc.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff mbox series

Patch

diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c
index 7cdde59945..a4390a9df6 100644
--- a/libavcodec/mediacodecenc.c
+++ b/libavcodec/mediacodecenc.c
@@ -167,6 +167,16 @@  static av_cold int mediacodec_init(AVCodecContext *avctx)
             av_log(avctx, AV_LOG_ERROR, "Missing hw_device_ctx or hwaccel_context for AV_PIX_FMT_MEDIACODEC\n");
             goto bailout;
         }
+        /* Although there is a method ANativeWindow_toSurface() introduced in
+         * API level 26, it's easier and safe to always require a Surface for
+         * Java MediaCodec.
+         */
+        if (!s->use_ndk_codec && !s->window->surface) {
+            ret = AVERROR(EINVAL);
+            av_log(avctx, AV_LOG_ERROR, "Missing jobject Surface for AV_PIX_FMT_MEDIACODEC. "
+                    "Please note that Java MediaCodec doesn't work with ANativeWindow.\n");
+            goto bailout;
+        }
     }
 
     for (int i = 0; i < FF_ARRAY_ELEMS(color_formats); i++) {