From patchwork Fri Nov 12 08:36:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 31373 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp1530811iob; Fri, 12 Nov 2021 00:37:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJwcjv97J1F5ls56s57EMqO0+b7rKDacehAt0gdv+OArAemNEFvny+FBWSBbPhukq7WJHBiu X-Received: by 2002:a17:906:7c4:: with SMTP id m4mr18229285ejc.18.1636706232530; Fri, 12 Nov 2021 00:37:12 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ho6si12249680ejc.590.2021.11.12.00.37.11; Fri, 12 Nov 2021 00:37:12 -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=@nxp.com header.s=selector2 header.b=nq4Wq1PX; arc=fail (body hash mismatch); 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=nxp.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5BB1168AE25; Fri, 12 Nov 2021 10:36:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown [40.107.2.79]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1F0D868AE10 for ; Fri, 12 Nov 2021 10:36:50 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a47zEOAHfyN4n1p3H0skEL8+HrxUbUxvv6ejQNwKNob7Tz4UXWYT8IdDCxvXNZ3RPLXs3BISO8LEse0YK9h0REkbvkaCef0yR+In4YvgqFR4LumcQBzwaRCugY0scb43semql3Gg/roVTL2lRvCH0G/lrBp9Jb9Pw0lLaGHWMPFLOu+fnuxdDWse2bFlqcF6l8dhWamujQRNiNlVDGqnLcSKdUMuxm3/8QgYe8PZLqQROTPGGRTtGqzkHdcjQhEL0NHqsPajaZRCZMVCjtcNPuxway5FZpTEmJ0NmZM66hmtZJaIL4omQB9FfGz+mZUIhimTbcIdocvowQYwGlM40g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wE7Kx511jccDLRIOY1DYLPcwW3AVlt307vFP/ZfKPU0=; b=If+D/qqBs5aOiz3UBH3B4OXfX31Qc0xl4mTjd1SY/xKOAIkZ+BC1Jx56d+UjOb4LtVrPA1IeTjLczsG8xKGtXkNdJIA/bW+XvEexuJR8q1PBWUeKgy2OlNnObFXLgKUGNcjgaeB7/11uBOZ0NlYPCn4JVHLbVWv7H8q+uWkUWNp1domCXQZyZtg3fQJ2jyuVQU/1IcvoZLdFDv1diPCLBZq4yC+JWqi7XrpIiZS7jbnyG3IieOa334jRyjfeAZxti25BTU51ezX/xVq6wegfc0cF/Dn4hq+o2u0vWEdduM9i+c880nDJjKr8s//C3JBG4blPoO91mZfB1IYCfbA2eA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wE7Kx511jccDLRIOY1DYLPcwW3AVlt307vFP/ZfKPU0=; b=nq4Wq1PXMgMzPlfX/LIBRP1o01MD4ZiLESRqvyTA/H6C3oSyZCY5hnmYOzrlVYZx6N4PljFnOI8KSRmw7fZBfwRbTc0UJOl8HK7ep/anIePc93urLajOd/FRwkctFrGBVgCLikcTRGersUPAz7ioE54lfXDWJOfGtMfNviSm17c= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM6PR04MB5928.eurprd04.prod.outlook.com (2603:10a6:20b:a3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.22; Fri, 12 Nov 2021 08:36:43 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886%5]) with mapi id 15.20.4690.026; Fri, 12 Nov 2021 08:36:43 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Nov 2021 16:36:01 +0800 Message-Id: <20211112083601.6804-2-ming.qian@nxp.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211112083601.6804-1-ming.qian@nxp.com> References: <20211112083601.6804-1-ming.qian@nxp.com> X-ClientProxiedBy: SI2PR02CA0047.apcprd02.prod.outlook.com (2603:1096:4:196::14) To AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) MIME-Version: 1.0 Received: from lsv11149.swis.cn-sha01.nxp.com (119.31.174.70) by SI2PR02CA0047.apcprd02.prod.outlook.com (2603:1096:4:196::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.16 via Frontend Transport; Fri, 12 Nov 2021 08:36:41 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ddd33cbc-f5c0-4e94-418d-08d9a5b78df0 X-MS-TrafficTypeDiagnostic: AM6PR04MB5928: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:178; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5+C7CFJTlAAskitTdbcTOhwG/jnWi5djCD71r6c/GKia/XdQ0oku43FoV1bVLKYcq2xgktauQDARe5rWEFkQPtCYMHoKATWcfaa7d6TDOrx712AOFi7sKZLkXLZyG59Ee75ajEY/SPbhXEQoCghIyImcInv/9jTRLa6+JeT/qWoBE+T7iGf48hiIKOh4khudvGgGYG7qVMun0xXC7UotQQo3XOii1NPYJsdGhL1Cwe3EMx/Wj9jypOyyRzN/NbWe8Nym5HaSgDlEDI8c4oCEDyZAH0UtO95wos99rj3376Bw4Pxe6zfEZisCSAC2HYyfypJKrXYcV02B8tqYbQquTCxN/XBKi1i1x8iAZ7IOubFN5bb8B7tMgcohEkT6ouVpQWcz93f1gb5/HKWuOa/0Dpgqyo8vpr9bxgKUq5JbW63TBHc58ChRaKwnma+SxviQ5lnF7PxFaD5CFnWjUkDEikPKsAcHrIGF8/vYiTszp02nt4razGqKEN4lL/SlVowjh5BIzMMGDUefeKJRKdJxvlWVRN3HVtLUZvZ7u7KtaiUyRJLookhycZnqCQYDvWWogLwZX0OO4jVAOj/Cf4sW/57xkLqn0a30/D2joitvd0/ZLz0OHFzMILtgH2sFgctzMfgbHq4me0IpIDqmTmyU0bi6/ahN0CUGhns248H3TNokMK9k2O6dvOaD16pX99wZ2vUFa1l0a3f41e5ZR7XngQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB6341.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(8676002)(66476007)(38100700002)(38350700002)(956004)(66556008)(66946007)(6486002)(1076003)(6916009)(86362001)(5660300002)(7696005)(26005)(2906002)(52116002)(4326008)(316002)(83380400001)(44832011)(508600001)(2616005)(6666004)(36756003)(8936002)(186003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6qrGFWHutEXGaJK9/QtCdsS6F3uBbYPr66drmGeUa+Q44rxyRBR0smQxSAAN0EmRdv4BtLMur8ITw3qWm+kTJueAaRYgA63mQTO8jVoNLFL3AQZmnUGiPLFG5gjpmbbpOIUpXu9zMLHC/Y5b5enQhQqLe07pYBk1uyYxwd9ngLF427ysc9etUru1UQVbn4RoEly46SfHP9hmrRNTCHYq0PSoYgYdWuFICr9eomjIQBJiwFMdE8PiZSu0Usi8U7d6J7b/+bIAuP/eAPOvLsS/BuqMlwSo7Dy2bqw11dUqalCIfe3HJKu36S+xEmkhdQFRIB9v4sEqOXBgwCs7hwMSxDtEr3UYGZdn9jAFnfMk+/NfQhLr0QQNNlld08+49w1PlRQwaNPdcnd48okb7PY2nm+HIfXd48v8MkIEv2871CQaXL9KUiToOTWFnUSd53JGLQoWHwyAzrkKvjlHw+Tlr51Vhbt91vLiLzsEOn8Bl/uflJAmuGfFEZyQgLHl59NZ2RFe5Zf8dSasG++ROXNzLyqaiQolREq09R53EQREyfTNZssqREFvWZSQzvdOoWFaLy/ayvfkQ5YBIf3iJ6EhrjY+7uBkgAaXxFPT5J13Aj5yKbBJsVROfBlFOm6Oa0H28kW5JCHDgNiBB/zfpS7co+slsvvx9d6ey8110c9p7o7JliexwwODsenyAuUcH53vDwSfMmBJv1GV1fIuUtivNb/TKGOgNd0CQkKFJZ8l0kui2xDKeMKhoTFJ9g9wRr01gqY0V5jGBSigBwmBwz920Lx1QlpYk+OR8ktXANznDmNeTMtU/WTinp85Fp24+CTLW8yA8S//q3Cq1wFcs18ROaqOVBZ11FagHAumxTiBKvWTwN+YuamESKQfYddziRkeKpYVbTCsSXcSuLg5SXy+dCd6BT2Ls3VMkkxDBfK0o8Wzp3jD5UwHToziNOvBlmMHbaSh+pHlXtcVe5VubEwKW941tn548QUH4/sgS2lJVu6peqXeWnB/yvjDTbHkt8S4VwTwdgyE4w9AIgkyddlKphYycYdNl4sFr9Gw1VJzoibl3BRp0a/ZU7m68xumsZ5NVOuXhimpaNx7uEUlsFtqW/YMNtxHO6WYunY2AfIkGkhLrGIGveYSGgJMRNVJZVNj/jDPR+FdkJjVJQcUD49wheIXryYQbtEN0E5jNnXYVpzSXXAvkPaOgH7LIWCsIVE2kGzQKAhA9o1SQQihrszOAI3kpWcfQ3U9HBjcBusQ0OW3bSrMGJhGnhlDEBgwHSH0ghtwe9qN73u/ua6YWCbetSl68ojs4jFc3D/sTxyBd+is/qS5p94a52gSvAYPXdw3imJTu83IuW8UJ/l8nPIMSMHkSxadbsQKMkAtE7CHOTnzyp2MhsJhzN6SVk8pNRbN+BXYzhh1lZd5z2J35BzYhz/NrK63ssQd4gdmYpeoeHpGTApzfYBUS8xwcwUdM3yMFokf1pCngTif70CeHnPcyVNbE/+FCe0ktLBsLDuRI97FLeI8A0IdrKFg2yWX7MGJLrAxuFc6D0rO7YN6TYnDEpg/ctx8/IV6vvMEkkXlAjV5ZQiMxyYLAGSb3yP0PtCQH8BF9k8GJC3TPpzpdcN6MT9uvm8QjpskZj1UL5E/lJg= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ddd33cbc-f5c0-4e94-418d-08d9a5b78df0 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2021 08:36:43.0375 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: plLJkfF9vhqGCPBzo0hGqsOSrM6XVG7RcpOqx//jGWoaz2Iqcgi8Q09kN2Km0A6spOPNLGYMPkXOY7bNUHXsQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB5928 Subject: [FFmpeg-devel] [PATCH v1 2/2] avcodec/v4l2_buffer: export v4l2 buffer dma-buf 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: shijie.qin@nxp.com, eagle.zhou@nxp.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: PpuL6yYj8teX Signed-off-by: Ming Qian --- libavcodec/v4l2_buffers.c | 14 ++++++++++++++ libavcodec/v4l2_buffers.h | 1 + libavcodec/v4l2_context.c | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index 4b2679eb3814..efa42f4c58ea 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -21,6 +21,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include #include #include @@ -267,6 +270,8 @@ static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf) if (!*buf) return AVERROR(ENOMEM); + if (in->plane_info[plane].dmafd >= 0) + av_buffer_set_dma_buf(*buf, in->plane_info[plane].dmafd); ret = v4l2_buf_increase_ref(in); if (ret) av_buffer_unref(buf); @@ -494,6 +499,7 @@ int ff_v4l2_buffer_avpkt_to_buf(const AVPacket *pkt, V4L2Buffer *out) int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) { V4L2Context *ctx = avbuf->context; + struct v4l2_exportbuffer exp; int ret, i; avbuf->buf.memory = V4L2_MEMORY_MMAP; @@ -539,6 +545,14 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) if (avbuf->plane_info[i].mm_addr == MAP_FAILED) return AVERROR(ENOMEM); + + exp.type = ctx->type; + exp.index = avbuf->buf.index; + exp.plane = i; + exp.fd = -1; + exp.flags = O_CLOEXEC | O_RDWR; + ioctl(buf_to_m2mctx(avbuf)->fd, VIDIOC_EXPBUF, &exp); + avbuf->plane_info[i].dmafd = exp.fd; } avbuf->status = V4L2BUF_AVAILABLE; diff --git a/libavcodec/v4l2_buffers.h b/libavcodec/v4l2_buffers.h index 3d2ff1b9a5d7..74550544e0eb 100644 --- a/libavcodec/v4l2_buffers.h +++ b/libavcodec/v4l2_buffers.h @@ -55,6 +55,7 @@ typedef struct V4L2Buffer { int bytesperline; void * mm_addr; size_t length; + int dmafd; } plane_info[VIDEO_MAX_PLANES]; int num_planes; diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index b08f0015c2e5..f0406194293d 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -453,6 +453,10 @@ static int v4l2_release_buffers(V4L2Context* ctx) if (p->mm_addr && p->length) if (munmap(p->mm_addr, p->length) < 0) av_log(logger(ctx), AV_LOG_ERROR, "%s unmap plane (%s))\n", ctx->name, av_err2str(AVERROR(errno))); + if (p->dmafd >= 0) { + close(p->dmafd); + p->dmafd = -1; + } } }