From patchwork Wed Nov 23 16:49:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39393 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp3918405pzb; Wed, 23 Nov 2022 08:50:10 -0800 (PST) X-Google-Smtp-Source: AA0mqf5whOS621wPKeE+rjaTgTuvY5PsNQqfbe/PlHpr5NWu6DHr8ik141o7chUCceZU4BOtnBe0 X-Received: by 2002:a05:6402:4:b0:463:cb99:5c8 with SMTP id d4-20020a056402000400b00463cb9905c8mr26288523edu.395.1669222210134; Wed, 23 Nov 2022 08:50:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669222210; cv=none; d=google.com; s=arc-20160816; b=h1WoTwR0z8mKV/Nd5At9P57TfrF0mgqP0BTZuGLYa1SEIcv7N/81G0Qf+/Qix+omqc lAhG/fQvVMzEdI5FlSY71vha1Z54xUVJ1ZqVbzO4i38WNowWGYx/pHgnWpibZAEwuLIC dy5uFmYkArpO2mG1/eiyTeAQ6249AUiTM3UJugrWL+SPC7BIpDwH+6R2T6JQOrym8Zhg 9XWKbYiQ6jT9BaLao5G9FhU85kl1hf7XVVYyEGj9n7iB7Y/6fxbfVAOZu0mjoaJedv2w Bi1ifoJWD+EQAizAjProjSKgSRAq3lO5cx79GQxMoqnZc6aMOtfwXoY85OtWNgXJ2IVL 0zUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=1J4AyH+OEyUzKvP5a1ES0cBWahxDaQHx750yIEwraCE=; b=VHcgP7+YjlQTSYAmBfw8LwWCdVTLEaQsXTokO6B8pqPhJ0Ijcd7TprnBh/0vCjoQJE 1krB5OQ4Trz8pVOGyowzHCWH7FRe9BScauAp+zty8aqXbOfeCVowvAB+Nh7LS10HfQ7u TSLNzbRI/QGOA0y6c5qYYlqpf4mOdnZvLilRAKzJ91VeACpBuiSDq7Hv4jwEiH8TP0Sh 7665iNBUc8krfVrbT3v0XEsGmkM+XPBy64OArWXWJA6nCIu/Ogz9kwsplRHvFQIew3mK f0gfgRLrObYc6cE7rwWM3Xv08UpIt80o1x9kwbdZGXdhaVFG/Sxrc3YOCbvoqrMzfqOm JTqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=b3wp7HNF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id er16-20020a056402449000b0045d8bff7b1asi13946849edb.403.2022.11.23.08.50.08; Wed, 23 Nov 2022 08:50:10 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=b3wp7HNF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D054768B726; Wed, 23 Nov 2022 18:50:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-155.mail.qq.com (out203-205-221-155.mail.qq.com [203.205.221.155]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AB12968B103 for ; Wed, 23 Nov 2022 18:49:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1669222191; bh=DGq4GusJ7UaSv+8bvRicTF2GdY3s7xmKYlSSABbEQNs=; h=From:To:Cc:Subject:Date; b=b3wp7HNFoYkWW0GugsVW3x6w5E7Pfpu/x5l35rHVezjBLnAyRIyz5FYZPkAO28Jnl Uq0fL90KtKCrb7hXfFj0y0Bsj5FUZdYqWD3fjq/45m+F4A2KjR1Ps1xkbqtlt0DJcd 474AnRow1RaI+YPhD9lZ6DozQxHCXZRqX/IgzBLE= Received: from localhost.localdomain ([113.118.113.114]) by newxmesmtplogicsvrszc1-0.qq.com (NewEsmtp) with SMTP id C7281E6D; Thu, 24 Nov 2022 00:49:50 +0800 X-QQ-mid: xmsmtpt1669222190tegqd8ydd Message-ID: X-QQ-XMAILINFO: MK5U7QanZrCw8GyQ3q0yE+2wszmR36w8rUi/E6lg2Gdx2UZHr4FMKjJKFyHV+8 moRG0T7DzPd9ZodbhUquUiui1/x5tT02puIPo9kfkDB4+DzrS1RlYxNo4mefmmFjv1OW2cZdAoHI Si2+BLjJ2XuZyfPvWRRGmiphl6MeaKoNsc8Xh5EC4+etZalMsnO8iaCPhkvbn6VGCP6lVbh1uDB7 zFG7XvWNLSATQejDjxHdCxIlLVCMytAqsEH2LnfLBuF0qogW0Vziuwdktz03FrCy/UwtIfU8euBI qt13hKi7TDXSeDqXpTyaDKkZp4k/jrRiA4Meyi6sQezrtmDintOrFSBOk5jRtxgXOK0S9kBACqoN iEqqCA+VeKiKFMPWXSMM7UVKjqYXzylDImyAmY+LmBzsqw5AWLR4zSQPJbMqLv6KRDsHol5uJ+IF BMUzyanICruJFOXbTWE0q7jvI5yldcIBQmr+zpbcB38R2KAlMvwqEGZbIqsw7EkxJaV1gye+p/4h UXumsOWgu/ds2412oQOVPlS6Yr9/tpAPPNQhRq6o/hfihD4Kk+e8vzg6U6RXTDg9Dw4aGWkgWAhy 8h5RcbAlSBf5kZwhVrnFIfT5nBuOjYIM8Um1yivrZVLXjboM9ySYD9It5Gzxhl+EBUayO8XAVVWT mpijqtAQhYgHrhYCTonNNAtLdeNuIo1PqZIhTJkUAmy0eXY9JBLdCin+c3z6I5DZFAdUlxE3TZVZ nPBLFNeq6QWHMbI7EmNcUbRprf1qL741hfyNy8RJ6BoZ0W6id+RLq1xU8ZVG0l0wvaB5+8N/rD4U 60+iGYzk7LNACpZ04EF8S335IS1L8J/wYldvCyAGf7Q49I2oek3DAloV6Oo+RdO+kxyh1bB2BgCG hGuIXrOX0+CyhAYfX8cM2rV7WJaE+xB2KjxJG9Sy4OHFOY0FYC25V7OZxpATonZ1OJR3BsHJTUrW 6pztY2knVDzfqXEZqGtg== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 24 Nov 2022 00:49:25 +0800 X-OQ-MSGID: <20221123164926.25481-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/mediacodec: fix missing crop info when use NDK MediaCodec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: txU6L+ZPTt04 From: Zhao Zhili --- libavcodec/mediacodec_wrapper.c | 38 ++++++++++++++++++++++++++++--- libavcodec/mediacodec_wrapper.h | 24 +++++++++++++++++++ libavcodec/mediacodecdec_common.c | 4 ++++ 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index 555058e907..193eac8da6 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -1861,12 +1861,16 @@ typedef struct FFAMediaFormatNdk { bool (*getSize)(AMediaFormat*, const char *name, size_t *out); bool (*getBuffer)(AMediaFormat*, const char *name, void** data, size_t *size); bool (*getString)(AMediaFormat*, const char *name, const char **out); + bool (*getRect)(AMediaFormat *, const char *name, + int32_t *left, int32_t *top, int32_t *right, int32_t *bottom); void (*setInt32)(AMediaFormat*, const char* name, int32_t value); void (*setInt64)(AMediaFormat*, const char* name, int64_t value); void (*setFloat)(AMediaFormat*, const char* name, float value); void (*setString)(AMediaFormat*, const char* name, const char* value); void (*setBuffer)(AMediaFormat*, const char* name, const void* data, size_t size); + void (*setRect)(AMediaFormat *, const char *name, + int32_t left, int32_t top, int32_t right, int32_t bottom); } FFAMediaFormatNdk; typedef struct FFAMediaCodecNdk { @@ -1940,9 +1944,12 @@ static FFAMediaFormat *mediaformat_ndk_create(AMediaFormat *impl) if (!format->libmedia) goto error; -#define GET_SYMBOL(sym) \ - format->sym = dlsym(format->libmedia, "AMediaFormat_" #sym); \ - if (!format->sym) \ +#define GET_OPTIONAL_SYMBOL(sym) \ + format->sym = dlsym(format->libmedia, "AMediaFormat_" #sym); + +#define GET_SYMBOL(sym) \ + GET_OPTIONAL_SYMBOL(sym) \ + if (!format->sym) \ goto error; GET_SYMBOL(new) @@ -1956,14 +1963,17 @@ static FFAMediaFormat *mediaformat_ndk_create(AMediaFormat *impl) GET_SYMBOL(getSize) GET_SYMBOL(getBuffer) GET_SYMBOL(getString) + GET_OPTIONAL_SYMBOL(getRect) GET_SYMBOL(setInt32) GET_SYMBOL(setInt64) GET_SYMBOL(setFloat) GET_SYMBOL(setString) GET_SYMBOL(setBuffer) + GET_OPTIONAL_SYMBOL(setRect) #undef GET_SYMBOL +#undef GET_OPTIONAL_SYMBOL if (impl) { format->impl = impl; @@ -2047,6 +2057,15 @@ static int mediaformat_ndk_getString(FFAMediaFormat* ctx, const char *name, cons return ret; } +static int mediaformat_ndk_getRect(FFAMediaFormat *ctx, const char *name, + int32_t *left, int32_t *top, int32_t *right, int32_t *bottom) +{ + FFAMediaFormatNdk *format = (FFAMediaFormatNdk *)ctx; + if (!format->getRect) + return AVERROR_EXTERNAL; + return format->getRect(format->impl, name, left, top, right, bottom); +} + static void mediaformat_ndk_setInt32(FFAMediaFormat* ctx, const char* name, int32_t value) { FFAMediaFormatNdk *format = (FFAMediaFormatNdk *)ctx; @@ -2077,6 +2096,17 @@ static void mediaformat_ndk_setBuffer(FFAMediaFormat* ctx, const char* name, voi format->setBuffer(format->impl, name, data, size); } +static void mediaformat_ndk_setRect(FFAMediaFormat *ctx, const char *name, + int32_t left, int32_t top, int32_t right, int32_t bottom) +{ + FFAMediaFormatNdk *format = (FFAMediaFormatNdk *)ctx; + if (!format->setRect) { + av_log(ctx, AV_LOG_WARNING, "Doesn't support setRect\n"); + return; + } + format->setRect(format->impl, name, left, top, right, bottom); +} + static char *mediacodec_ndk_getName(FFAMediaCodec *ctx) { FFAMediaCodecNdk *codec = (FFAMediaCodecNdk *)ctx; @@ -2433,12 +2463,14 @@ static const FFAMediaFormat media_format_ndk = { .getFloat = mediaformat_ndk_getFloat, .getBuffer = mediaformat_ndk_getBuffer, .getString = mediaformat_ndk_getString, + .getRect = mediaformat_ndk_getRect, .setInt32 = mediaformat_ndk_setInt32, .setInt64 = mediaformat_ndk_setInt64, .setFloat = mediaformat_ndk_setFloat, .setString = mediaformat_ndk_setString, .setBuffer = mediaformat_ndk_setBuffer, + .setRect = mediaformat_ndk_setRect, }; static const FFAMediaCodec media_codec_ndk = { diff --git a/libavcodec/mediacodec_wrapper.h b/libavcodec/mediacodec_wrapper.h index f15ad66d83..1b81e6db84 100644 --- a/libavcodec/mediacodec_wrapper.h +++ b/libavcodec/mediacodec_wrapper.h @@ -73,12 +73,18 @@ struct FFAMediaFormat { int (*getFloat)(FFAMediaFormat* format, const char *name, float *out); int (*getBuffer)(FFAMediaFormat* format, const char *name, void** data, size_t *size); int (*getString)(FFAMediaFormat* format, const char *name, const char **out); + // NDK only, introduced in API level 28 + int (*getRect)(FFAMediaFormat *, const char *name, + int32_t *left, int32_t *top, int32_t *right, int32_t *bottom); void (*setInt32)(FFAMediaFormat* format, const char* name, int32_t value); void (*setInt64)(FFAMediaFormat* format, const char* name, int64_t value); void (*setFloat)(FFAMediaFormat* format, const char* name, float value); void (*setString)(FFAMediaFormat* format, const char* name, const char* value); void (*setBuffer)(FFAMediaFormat* format, const char* name, void* data, size_t size); + // NDK only, introduced in API level 28 + void (*setRect)(FFAMediaFormat*, const char* name, + int32_t left, int32_t top, int32_t right, int32_t bottom); }; FFAMediaFormat *ff_AMediaFormat_new(int ndk); @@ -118,6 +124,14 @@ static inline int ff_AMediaFormat_getString(FFAMediaFormat* format, const char * return format->getString(format, name, out); } +static inline int ff_AMediaFormat_getRect(FFAMediaFormat *format, const char *name, + int32_t *left, int32_t *top, int32_t *right, int32_t *bottom) +{ + if (!format->getRect) + return AVERROR_EXTERNAL; + return format->getRect(format, name, left, top, right, bottom); +} + static inline void ff_AMediaFormat_setInt32(FFAMediaFormat* format, const char* name, int32_t value) { format->setInt32(format, name, value); @@ -143,6 +157,16 @@ static inline void ff_AMediaFormat_setBuffer(FFAMediaFormat* format, const char* format->setBuffer(format, name, data, size); } +static inline void ff_AMediaFormat_setRect(FFAMediaFormat* format, const char* name, + int32_t left, int32_t top, int32_t right, int32_t bottom) +{ + if (!format->setRect) { + av_log(format, AV_LOG_WARNING, "Doesn't support setRect\n"); + return; + } + format->setRect(format, name, left, top, right, bottom); +} + typedef struct FFAMediaCodecCryptoInfo FFAMediaCodecCryptoInfo; struct FFAMediaCodecBufferInfo { diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 80089439ea..03bee11918 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -486,6 +486,10 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte AMEDIAFORMAT_GET_INT32(s->crop_left, "crop-left", 0); AMEDIAFORMAT_GET_INT32(s->crop_right, "crop-right", 0); + // Try "crop" for NDK + if (!(s->crop_right && s->crop_bottom) && s->use_ndk_codec) + ff_AMediaFormat_getRect(s->format, "crop", &s->crop_left, &s->crop_top, &s->crop_right, &s->crop_bottom); + if (s->crop_right && s->crop_bottom) { width = s->crop_right + 1 - s->crop_left; height = s->crop_bottom + 1 - s->crop_top; From patchwork Wed Nov 23 16:49:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39394 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp3918537pzb; Wed, 23 Nov 2022 08:50:22 -0800 (PST) X-Google-Smtp-Source: AA0mqf4gy+oizrIHHivx8HUxayG/LDd2q3xTX3t7Mq30+Ca1nyzbf1oIlWTbDVcGFEQtV1Z06jcd X-Received: by 2002:a17:907:2143:b0:7ae:27ed:e90e with SMTP id rk3-20020a170907214300b007ae27ede90emr24154528ejb.224.1669222222485; Wed, 23 Nov 2022 08:50:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669222222; cv=none; d=google.com; s=arc-20160816; b=aB5+R1MZaCrVBrNVRpXk3NVWNKUs8mSSVIkVqcppN/evA/DsAPM5saQgHdFSe6VKug AuVxjcTuDkRSToBEIKzxiOXurEJXH4UH325Xn1klEvCzyrNGvxVzc4xQuMDm3TYzpg04 XdEq8V6PCMH8uUUiDLC+S2P+bwzPJX/6VJZSZDpzKmGhN3L1PQgQBD7yx7Ltb8MRKkgU JxnvC9UpnbGUm1Jh9K6RPdkC5/OYh2UBESUe21ElQMF3Mm91SmxNF/IP4ZhtfRMFhi8N F1dT7weGJaWgrr11ci0hYaJWzLzkEWFSrWlVKtsuLmCNngmhTSyVftpfDV8XMi7EBVTf kCZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=zBwo9QQIB2ulkGb3NdrJRLiOSP3hxceAof/4j55ZbLY=; b=IK6ijZtX4wWg2cfD1MFAPK5mA/aB9OCjfmDGfE01wYYAOqd29U5DaXfdjGr3VPWOvP 9ghWUZ0Ybj8TrrPTj6iruX4LjbLgc2VRSiesK3bAMnIE7ecMkIqXYBEsnIdn9bD/rJRs bqKlppQNJJGIBUDTK7ZphwJqmq/5EdM7csUP9/N2oFYBLCECeQH3Flgn8KsHf+8xzNwc Jr8VYhS1WrPADxQIZeevaWH+SC5mCkG3b4WYDe3BpgQ6cQE3EAb/N/cpjPxj6y7MelWu yIc1UMe+NA0Y19tpMeeqPdJOAW66IRmbkvwZNC6Q3INwbvpTsriAW1oZ1nU4fkSUdD7V NLDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="nS96/5bp"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ga34-20020a1709070c2200b0078dcddc1b8csi842743ejc.788.2022.11.23.08.50.21; Wed, 23 Nov 2022 08:50:22 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="nS96/5bp"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0481D68B7D2; Wed, 23 Nov 2022 18:50:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-239.mail.qq.com (out203-205-221-239.mail.qq.com [203.205.221.239]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD71368B155 for ; Wed, 23 Nov 2022 18:49:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1669222192; bh=LMCaTz3CyZR5VZSpnuZR3RBqVgSs0VBKSPApB9eOqqc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=nS96/5bpyyL5iun7Zk029Dftqcuslr5EqtCri9DZXOEI5gObjoLLhAYgM29Zf7N7d fGwTi3GHAKObTX6OsNpOJ5sMFCtGBLP3Tmg/65KdkJ1/S13axMFrG8SxMOO6GBkQpq sBvJB/Bei9uMO2kSNpoa1ipmveoxcx2LjjsnlCL4= Received: from localhost.localdomain ([113.118.113.114]) by newxmesmtplogicsvrszc1-0.qq.com (NewEsmtp) with SMTP id C7281E6D; Thu, 24 Nov 2022 00:49:50 +0800 X-QQ-mid: xmsmtpt1669222191t8fm7sfmf Message-ID: X-QQ-XMAILINFO: MyirvGjpKb1jY0yCLrIxh5DA//hfykW1ef1wIBXezqcpSyHTtFED8iN+v8Yd5Q eNl/j4Ud/o81E+qAndDPZD0IVNIYrHTkQSIl4dnOHtgwwUbEjBvbk0Tf3jloQGy3Ec/sBOJ5lKyt 2y0yMhR4c6GY3lMKk8JirXZkIkXwV6rxSmqgql6emDl8+lmkDeHTt2y7wUbHqQEp2Fk8NdTuTC/5 gI3ghP+XToMh0J+k4xGwOWgBTMAlolaEjSe1IwojuAEjlWj1xIwCewvLjUSACZbKdv0iIPsvIATg xiEW0GzKZcsrLGtUy9R4QyxKkz6NZ8bSmSB7f/VEVM+EzjtfxSgMzC7GSZquY2Ezi+3Cds6FOs8M uMQG7c+dZyFaxRHqV05l0w2f1Jw3cAIjkxYIdkaEwRT9uxq0UMeXzfRWbDItQRDm8FQbWUwUpRh3 pG/IlJVAyzBI5dhqJSS/pdAEjRcrptFCxW9StaRzvqd4AB23cp9GPYViZkuO17rZxUggN8ZkHtmz GLCZngbDki1lZa+Td9fOQyK0SoWBb1ASbKvb5AZVlFSzhfMURjht3Q6oabJuOOFpbSYZWFn4mpvR mGcKD6/762frMbvIp94san53OZ9eyKNF87lqmMxWi8Wkwvtwuq01RhW6X+AxP4xBWUGnVZbejiPK 8wj9xCk2zsS/K2yXP6f+7y84WfNsfgkaM1njqIPBTCAkr+yqdpUPIiNuxammBI5A1/5s5TYxtpkt xw3ldo/CiqaZDDLJuAstQ6XTKFDvVzc6x/8USiKThj2I9aFd2PZb2mNutSuBhH4WTEc+bV+p9I/5 JTIBWwFWOdQQwVcjDuoflOtGc4Es+CwUS44TXak+HjYYzdBnrzsbfalEib1SbEWtSm5xx6FV55qe Pk1xV7Yw8mTdkuJk9lV88Btdn2JiO6B1mQs0W2USdMj2pTqcMQ4WxPVwfzM6/05G/ZXD3L9r3Ee/ hzHzDcjp2plO6IOGqDbQ== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 24 Nov 2022 00:49:26 +0800 X-OQ-MSGID: <20221123164926.25481-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221123164926.25481-1-quinkblack@foxmail.com> References: <20221123164926.25481-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/mediacodecenc: check missing Surface X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Du3rlFnQ/eY/ From: Zhao Zhili It's an invalid combination of Java MediaCodec with ANativeWindow. --- libavcodec/mediacodecenc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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++) {