From patchwork Tue Dec 12 09:33:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 6699 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3843298jah; Tue, 12 Dec 2017 01:32:10 -0800 (PST) X-Google-Smtp-Source: ACJfBouTSp2qLI4QeyUC3/orX0BH8ho2NBiqecmDw2RTeH/gaStyr08wUUhNRvj4t1IBdZH5YCXT X-Received: by 10.28.129.69 with SMTP id c66mr1149241wmd.29.1513071130849; Tue, 12 Dec 2017 01:32:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513071130; cv=none; d=google.com; s=arc-20160816; b=AvyotVa8q3kN4oEWNYGtbjD6MnHtOGRp3/+N3kk+SkdBWc09Pm0uee7e0JaimoQFXp qMbkqE4ykwaIHPkqXI8RklcPL3w98B4xCIOsKhVq5C8G/cwFWQFEJOQafVhrSfv2S8/j DHcTR4nvZ1gvXM1TEK6KJw0mT5ZMe240yamkiydK+lRI/VHZMfe5gpGrgEYdl9e4yzir use0oLI3wB+T4m4CwuiLL2J3qK2AYSOi4vRFflN5SiVPJKH14zqNEBDTsTZ5mGuV0YzX IXXHIujyEz3r3YOmX8qU3R0EY+wtNJlV5aJuhFTb14kgWIXR9fZMzQ5UjxePWtSoDhcJ wQWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:user-agent :in-reply-to:content-disposition:mime-version:references:message-id :to:from:date:dkim-signature:delivered-to:arc-authentication-results; bh=W/fjxvsEJPiubw1QC6cRrQiZz0PvhKqFNArv/hKnInA=; b=uwzBR+ayMsqkFuG1a5VdRPuxrzoJwsEJ/gtvkGbuBh7K+prMowfCb/8rwoxxl7lLbv lXuDhGPeUnN4io8yZNXHW5YvL3VqUfJAcTsQeBvS2y30bQd44xeq3tjx3oK+gKyYRaQf 8+gJ0wqCRpfM9n3lZGWkOtAfmw1Y9mmFSs3cwI2U6x37BDWVSyggUUgy59NGvwcOSE4m 0VJFOubRpKwFuMP9o9ggZ9Q8iHA9wdVrMpGpxVGhWpvENYKZKWQ25hqpAFq3w6ZvSqR9 DdMYi3QiJETjskq8IEzimMyN00rQWzICK2On6fYYSrpHmucEsl9cGkHF/kTe3uWGZdkR Nxcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=DAoKWncL; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f9si11036993wrc.486.2017.12.12.01.32.10; Tue, 12 Dec 2017 01:32: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=@gmail.com header.s=20161025 header.b=DAoKWncL; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E219768A63B; Tue, 12 Dec 2017 11:31:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f177.google.com (mail-wr0-f177.google.com [209.85.128.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BB62D68A61F for ; Tue, 12 Dec 2017 11:31:49 +0200 (EET) Received: by mail-wr0-f177.google.com with SMTP id z18so20386284wrb.8 for ; Tue, 12 Dec 2017 01:31:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=xpCDOkbb/pegTkvbV6VnIG5Yji6erpm6np+WiXPZjQA=; b=DAoKWncLMvDQqk6eVtz1OfzMwysCen5XUgtYc5/DrWs92MT0+/4Y6lPIUj0RyTNFGf 0QDXkXU4idpKxWWrOuAHxqDlKcK9/r5fmA88q53dXn+XZ5JCYUe8fFKem8SxgrBabAW1 7bkjuxra4YkoMTNdEBmN+5K6FhZqHP50s6tZ5cjVSkPI0/KrH5qrMqJK2YkRd6irfuRT HkYVLxRscLbQNqG7QyUV4uR/iNnRcYBjEsxfCpmbLlqIhmkBHDvjcBMUFfmAIiW05meP vQOKwxYES97Am280Net+VbQQ9kE9PHo/xR4NjWs7e/sgIHxdVpHGcTY9pkKH1zRk8lUt lQSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=xpCDOkbb/pegTkvbV6VnIG5Yji6erpm6np+WiXPZjQA=; b=lwmvoNpM1NGmqqRd78S0JY/+miYqyKv8XWB7CTo4GlZAgIW1bynmCszhbMLIR1ew8N mmwjY4NHAwJqESNUV/Qif21wLvTpxujK275cjXuj3R4VQOP8wAwkY0pemwXPgP9TF2aK Xp25py8yDKVn42Zb78nBcXdn1+CH4BriFeyfPUsJoSCmObEJgtaGm8i0RPJlwrqN2Ooe YiSd+jPhLQzn5/YWmRvlTW9Tc1ddINt/NLh1WB6QzT4IvtXtLymJA2KmqGn3BknH+nuU An3NbLYblq1LznXdCq2gvpIIjpyyX7qevE/0ZGqB/H3k99VZxLY39KFxMk5FD7kqT07g sfXA== X-Gm-Message-State: AKGB3mL/U7JIPZdBn7G6L2cYJ9Ae3R0O7iM29mbSBDmFs6SQVAMChghr kgGlikBG7oTfKFLkmSG0qArOPQ== X-Received: by 10.223.169.135 with SMTP id b7mr2961808wrd.171.1513071116994; Tue, 12 Dec 2017 01:31:56 -0800 (PST) Received: from tsuri.lan (AMontsouris-653-1-284-55.w90-44.abo.wanadoo.fr. [90.44.35.55]) by smtp.gmail.com with ESMTPSA id e132sm11684365wmd.40.2017.12.12.01.31.55 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Dec 2017 01:31:56 -0800 (PST) Date: Tue, 12 Dec 2017 10:33:38 +0100 From: Matthieu Bouron To: FFmpeg development discussions and patches Message-ID: <20171212093338.GH470@tsuri.lan> References: <20171202231409.32371-1-ffmpeg@tmm1.net> <20171204013222.36272-2-ffmpeg@tmm1.net> <20171211123318.GF470@tsuri.lan> <20171211123458.GG470@tsuri.lan> <1395f7b9-3891-ab8c-f69e-42f9c89b04cb@jkqxz.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1395f7b9-3891-ab8c-f69e-42f9c89b04cb@jkqxz.net> User-Agent: Mutt/1.9.1 (2017-09-22) Subject: Re: [FFmpeg-devel] [PATCH v2 2/2] libavcodec/mediacodec: use AVMediaCodecDeviceContext hw_device_ctx if set X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On Mon, Dec 11, 2017 at 10:10:24PM +0000, Mark Thompson wrote: > On 11/12/17 12:34, Matthieu Bouron wrote: > >> > >> New patch attached fixing errors in get_format() by keeping the original > >> AVCodecHWConfigInternal (ad-hoc) and adding a new one (hw-device) with the > >> device_type field set to the MediaCodec. > >> > >> The updated patchset works without errors with both the old hwaccel method and > >> the new device_ctx method. > > > > From 2bbdae2141ba8ca8db54175f4440ac8190f5953d Mon Sep 17 00:00:00 2001 > > From: Aman Gupta > > Date: Sun, 3 Dec 2017 17:32:22 -0800 > > Subject: [PATCH 2/2] libavcodec/mediacodec: use AVMediaCodecDeviceContext > > hw_device_ctx if set > > > > Signed-off-by: Matthieu Bouron > > --- > > libavcodec/mediacodecdec.c | 8 ++++++++ > > libavcodec/mediacodecdec_common.c | 14 +++++++++++++- > > 2 files changed, 21 insertions(+), 1 deletion(-) > > > > diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c > > index 86cc629430..c8ad0b80e7 100644 > > --- a/libavcodec/mediacodecdec.c > > +++ b/libavcodec/mediacodecdec.c > > @@ -543,6 +543,14 @@ static const AVCodecHWConfigInternal *mediacodec_hw_configs[] = { > > }, > > .hwaccel = NULL, > > }, > > + &(const AVCodecHWConfigInternal) { > > + .public = { > > + .pix_fmt = AV_PIX_FMT_MEDIACODEC, > > + .methods = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX, > > This wants to be combined with the previous entry (or together the methods): ff_get_format() looks for the first entry matching the pix_fmt, so it will never find this one. I think this might work anyway because AD_HOC is technically "do whatever you like, I can't check it", but it also wouldn't notice e.g. a non-matching device in that case. Patch updated with the two entries merged. Thanks. I tested with both methods (hw device ctx and the old hwaccel way) and no error came up. diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 86cc629430..7b282a1d68 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -538,8 +538,9 @@ static const AVCodecHWConfigInternal *mediacodec_hw_configs[] = { &(const AVCodecHWConfigInternal) { .public = { .pix_fmt = AV_PIX_FMT_MEDIACODEC, - .methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC, - .device_type = AV_HWDEVICE_TYPE_NONE, + .methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC | + AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX, + .device_type = AV_HWDEVICE_TYPE_MEDIACODEC, }, .hwaccel = NULL, }, diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index cb2f6ae5e5..a9147f3a08 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -24,6 +24,7 @@ #include #include "libavutil/common.h" +#include "libavutil/hwcontext_mediacodec.h" #include "libavutil/mem.h" #include "libavutil/log.h" #include "libavutil/pixfmt.h" @@ -476,7 +477,18 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s, if (pix_fmt == AV_PIX_FMT_MEDIACODEC) { AVMediaCodecContext *user_ctx = avctx->hwaccel_context; - if (user_ctx && user_ctx->surface) { + if (avctx->hw_device_ctx) { + AVHWDeviceContext *device_ctx = (AVHWDeviceContext*)(avctx->hw_device_ctx->data); + if (device_ctx->type == AV_HWDEVICE_TYPE_MEDIACODEC) { + if (device_ctx->hwctx) { + AVMediaCodecDeviceContext *mediacodec_ctx = (AVMediaCodecDeviceContext *)device_ctx->hwctx; + s->surface = ff_mediacodec_surface_ref(mediacodec_ctx->surface, avctx); + av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface); + } + } + } + + if (!s->surface && user_ctx && user_ctx->surface) { s->surface = ff_mediacodec_surface_ref(user_ctx->surface, avctx); av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface); }