From patchwork Mon Dec 11 12:27:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 6695 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2686842jah; Mon, 11 Dec 2017 04:26:19 -0800 (PST) X-Google-Smtp-Source: ACJfBov3B+PnsAYqADEcZCyJmyjW8Tnp8Xs68ONJKRY5Mg/rY1FDT5kzoQjP5id5QaJmFk3SX5U3 X-Received: by 10.223.135.250 with SMTP id c55mr199094wrc.183.1512995179029; Mon, 11 Dec 2017 04:26:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512995178; cv=none; d=google.com; s=arc-20160816; b=La9tHEa6L+PNFYNzMgKr6W/gqOkmWTnIossrBMyUBQea6gDr+QUNhYbAOlvthjEt/u Q0Dfst+DMM056BQE5eE8SPdBsLaFl+QNSx6zij17vjkX6xCvOdbz4T/toIcmNcu0mhOA JPLUrqFl4ovFMgtZlxXrW+gNnnRzkFrOu9zQqWPoYyJz4Gyk6mgVg3vwIpYwQkOsXRrh cdSof6eE/mGIT2gmiTXQRHzfsVC4rwO656mqjEjl73vBO84+w+d4Zmb02q8Nm2PWuO/e 9rUNMs9fcoDCZEMZhXTkwuDcoegY8cZa6PSkVUYlfrIKKujDhab5IGC1fJvxhZ32Ofl/ Z2jQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc: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=tSNJhmSMwW2BPuH0N9h1JNNFAH/91Gubltc1T3ynZ48=; b=erg9ylie0oBJyILIj7Pd5hsXAZcJwSns0Ndp8lBn7yif+wJBVA7CxawMiiq6sIhrCu GR6kFhN/ZvbPKzpcPqjTCaTylUsjSUthvJmWdNP5Xo2gzZXp/XoWkLAWurHsFswqGw3s Vh8QRBH0dYkbfUySSi59JVlm9vpdSCysu10DEulMljtqka8v7X17JB5/f+47KVF6j4mC cHdm0uhatJREx21nlKoWVAbFP7rbSx9llXzJ14+Jro55qXiwV4Iz8MrLeWiKxNFcMEZT pSzJzjfK9vUxvgZjlDujHdWaosYjDqS985Wd6xVfukwp7938G2FJbOeyAZQ+XIqQAX3M jxBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Dx43jJoy; 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 r7si5264366wmc.49.2017.12.11.04.26.18; Mon, 11 Dec 2017 04:26:18 -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=Dx43jJoy; 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 6158A68A4C7; Mon, 11 Dec 2017 14:26:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2089568A143 for ; Mon, 11 Dec 2017 14:26:04 +0200 (EET) Received: by mail-wm0-f41.google.com with SMTP id f140so13741554wmd.2 for ; Mon, 11 Dec 2017 04:26:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=U07NXJR1Pxd9fV550uCWEY81/7eYJU1T5Bvs8Opkmec=; b=Dx43jJoy1WnniAGPeGHrZu4dtzZhPEsNnDhdXorJhvsLoF3mEOMz1GliW06vIYYHO5 fVlCWQ6tCPp9gEWEqTbjaE2Jd8hWQrH35FCvTSvi00zXv0Tuj2ihModt/tFYzVqYTG6k trBDmWLLGWmPQKQFZtvzS1UvXug67rHbHIYXQc5YHtsYDG/5omMtSTfCDgTFXTe6JROZ n7oUUJRJFvLfGJO6qnYevAXiO45uCGiGNF30rZbigAlGE7Fpw7WO/2An1lu7pcuOBVDE QmCIB/tXfgoTKgVE6/awdPiuk3NkEeYsqEpMquw4EqHWFHd1L2PxELYpAMJyl40wiMah Yo3A== 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:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=U07NXJR1Pxd9fV550uCWEY81/7eYJU1T5Bvs8Opkmec=; b=suzo4BPra/PswZcqWtJ6UC0F0xFTMP8KIL1oe6wg0z+lQufgVpzszZ13fboxWjHkGu 8R+NGrlBWUGoayCdxdUx4UMLo7xqOA9mYa+ZVEOwrZNgzU7UPCvXRCAXUDOcXaLXDfYt BZy4Fgxo5k0d9o08lpKagmC6rbcBo0LnP4Y5nNXOex7G+71l+EKeVPvH+9lpCrMHlK7K 0Squm0zOG+K/B8yOhAp+4WYy7qBA0enDqe0eF8RyYXJTWUxL3FGY4bKJK+8I8RbEqbuE lnCGRHkRR/3oNJ/+XGDEjj1Cju3xYkVomfnSzbk+705gRhPuBgcfGQjADZo6TUwozifr Y3NQ== X-Gm-Message-State: AKGB3mKcCn1idhdDu8sekwY3Yj4oPFYDgOUrk+8tN9TBvjMDINaMMM24 o7Ubx/cyAAhFi9cBDOHF0oIahA== X-Received: by 10.28.58.15 with SMTP id h15mr631496wma.150.1512995170893; Mon, 11 Dec 2017 04:26:10 -0800 (PST) Received: from tsuri.lan (AMontsouris-653-1-95-226.w86-212.abo.wanadoo.fr. [86.212.118.226]) by smtp.gmail.com with ESMTPSA id m127sm8930336wmm.48.2017.12.11.04.26.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 11 Dec 2017 04:26:10 -0800 (PST) Date: Mon, 11 Dec 2017 13:27:51 +0100 From: Matthieu Bouron To: FFmpeg development discussions and patches Message-ID: <20171211122751.GE470@tsuri.lan> References: <20171202231409.32371-1-ffmpeg@tmm1.net> <20171204013222.36272-1-ffmpeg@tmm1.net> <20171204101952.GA470@tsuri.lan> <20171204105244.GB470@tsuri.lan> <20171204114545.GC470@tsuri.lan> <20171204135022.GD470@tsuri.lan> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20171204135022.GD470@tsuri.lan> User-Agent: Mutt/1.9.1 (2017-09-22) Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] libavutil/hwcontext: add AV_HWDEVICE_TYPE_MEDIACODEC 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 Cc: matthieu.bouron@stupeflix.com, nfxjfg@googlemail.com, Aman Gupta , sw@jkqxz.net Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On Mon, Dec 04, 2017 at 02:50:22PM +0100, Matthieu Bouron wrote: [...] > > It works but output the following error: > > Invalid setup for format mediacodec: does not match the type of the provided device context. > Invalid return from get_format(): mediacodec not in possible list. > > avctx->get_format is set to a function that returns AV_PIX_FMT_MEDIACODEC. New patch attached including the 2 fixes posted in my previous emails. Regards, --- Matthieu B. From aacfb16369f4e49d67c3e8bd2528b1ebeec80d96 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Sun, 3 Dec 2017 17:32:21 -0800 Subject: [PATCH 1/2] libavutil/hwcontext: add AV_HWDEVICE_TYPE_MEDIACODEC Signed-off-by: Matthieu Bouron --- libavutil/Makefile | 2 ++ libavutil/hwcontext.c | 4 ++++ libavutil/hwcontext.h | 1 + libavutil/hwcontext_internal.h | 1 + libavutil/hwcontext_mediacodec.c | 50 ++++++++++++++++++++++++++++++++++++++++ libavutil/hwcontext_mediacodec.h | 36 +++++++++++++++++++++++++++++ 6 files changed, 94 insertions(+) create mode 100644 libavutil/hwcontext_mediacodec.c create mode 100644 libavutil/hwcontext_mediacodec.h diff --git a/libavutil/Makefile b/libavutil/Makefile index 721784086c..66b894d66e 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -37,6 +37,7 @@ HEADERS = adler32.h \ hwcontext_drm.h \ hwcontext_dxva2.h \ hwcontext_qsv.h \ + hwcontext_mediacodec.h \ hwcontext_vaapi.h \ hwcontext_videotoolbox.h \ hwcontext_vdpau.h \ @@ -166,6 +167,7 @@ OBJS-$(CONFIG_OPENCL) += hwcontext_opencl.o OBJS-$(CONFIG_VAAPI) += hwcontext_vaapi.o OBJS-$(CONFIG_VIDEOTOOLBOX) += hwcontext_videotoolbox.o OBJS-$(CONFIG_VDPAU) += hwcontext_vdpau.o +OBJS-$(CONFIG_MEDIACODEC) += hwcontext_mediacodec.o OBJS += $(COMPAT_OBJS:%=../compat/%) diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c index f47158f811..31ac12807b 100644 --- a/libavutil/hwcontext.c +++ b/libavutil/hwcontext.c @@ -55,6 +55,9 @@ static const HWContextType * const hw_table[] = { #endif #if CONFIG_VIDEOTOOLBOX &ff_hwcontext_type_videotoolbox, +#endif +#if CONFIG_MEDIACODEC + &ff_hwcontext_type_mediacodec, #endif NULL, }; @@ -69,6 +72,7 @@ static const char *const hw_type_names[] = { [AV_HWDEVICE_TYPE_VAAPI] = "vaapi", [AV_HWDEVICE_TYPE_VDPAU] = "vdpau", [AV_HWDEVICE_TYPE_VIDEOTOOLBOX] = "videotoolbox", + [AV_HWDEVICE_TYPE_MEDIACODEC] = "mediacodec", }; enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name) diff --git a/libavutil/hwcontext.h b/libavutil/hwcontext.h index 8d27b987df..f5a4b62387 100644 --- a/libavutil/hwcontext.h +++ b/libavutil/hwcontext.h @@ -35,6 +35,7 @@ enum AVHWDeviceType { AV_HWDEVICE_TYPE_D3D11VA, AV_HWDEVICE_TYPE_DRM, AV_HWDEVICE_TYPE_OPENCL, + AV_HWDEVICE_TYPE_MEDIACODEC, }; typedef struct AVHWDeviceInternal AVHWDeviceInternal; diff --git a/libavutil/hwcontext_internal.h b/libavutil/hwcontext_internal.h index 28ff0f9ee6..332062ddaa 100644 --- a/libavutil/hwcontext_internal.h +++ b/libavutil/hwcontext_internal.h @@ -166,5 +166,6 @@ extern const HWContextType ff_hwcontext_type_qsv; extern const HWContextType ff_hwcontext_type_vaapi; extern const HWContextType ff_hwcontext_type_vdpau; extern const HWContextType ff_hwcontext_type_videotoolbox; +extern const HWContextType ff_hwcontext_type_mediacodec; #endif /* AVUTIL_HWCONTEXT_INTERNAL_H */ diff --git a/libavutil/hwcontext_mediacodec.c b/libavutil/hwcontext_mediacodec.c new file mode 100644 index 0000000000..b0d8993e15 --- /dev/null +++ b/libavutil/hwcontext_mediacodec.c @@ -0,0 +1,50 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include "buffer.h" +#include "common.h" +#include "hwcontext.h" +#include "hwcontext_internal.h" +#include "hwcontext_mediacodec.h" + +static int mc_device_create(AVHWDeviceContext *ctx, const char *device, + AVDictionary *opts, int flags) +{ + if (device && device[0]) { + av_log(ctx, AV_LOG_ERROR, "Device selection unsupported.\n"); + return AVERROR_UNKNOWN; + } + + return 0; +} + +const HWContextType ff_hwcontext_type_mediacodec = { + .type = AV_HWDEVICE_TYPE_MEDIACODEC, + .name = "mediacodec", + + .device_hwctx_size = sizeof(AVMediaCodecDeviceContext), + + .device_create = mc_device_create, + + .pix_fmts = (const enum AVPixelFormat[]){ + AV_PIX_FMT_MEDIACODEC, + AV_PIX_FMT_NONE + }, +}; diff --git a/libavutil/hwcontext_mediacodec.h b/libavutil/hwcontext_mediacodec.h new file mode 100644 index 0000000000..101a9806d5 --- /dev/null +++ b/libavutil/hwcontext_mediacodec.h @@ -0,0 +1,36 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H +#define AVUTIL_HWCONTEXT_MEDIACODEC_H + +/** + * MediaCodec details. + * + * Allocated as AVHWDeviceContext.hwctx + */ +typedef struct AVMediaCodecDeviceContext { + /** + * android/view/Surface handle, to be filled by the user. + * + * This is the default surface used by decoders on this device. + */ + void *surface; +} AVMediaCodecDeviceContext; + +#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */