summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorZhao Zhili <zhilizhao@tencent.com>2022-11-24 00:49:26 +0800
committerZhao Zhili <zhilizhao@tencent.com>2022-12-08 23:53:20 +0800
commit567633895bafbf1fba26de937535ee35c135b814 (patch)
tree425412fdb0de02c0ae13811355024ac6fa8c4f1f /libavcodec
parenta63834b236c17eae72faf23aebcba32f911809e6 (diff)
avcodec/mediacodecenc: check missing Surface
It's an invalid combination of Java MediaCodec with ANativeWindow. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mediacodecenc.c10
1 files changed, 10 insertions, 0 deletions
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++) {