From patchwork Tue Mar 17 11:22:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 18264 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 722E6449E8D for ; Tue, 17 Mar 2020 13:23:38 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4FA0B68B5F3; Tue, 17 Mar 2020 13:23:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2087.outbound.protection.outlook.com [40.107.21.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6B6FB68B5EE for ; Tue, 17 Mar 2020 13:23:32 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JIGezHEGCcxV5JhTvM7EGmw+EA/HVgxSITZ3yRwEY69oADisZWvKMI3AEiRNUb5lmuezmyab2pU5nAKYsVuBvbgsnmEGjlwMfvDeWlYviuL+Liqbr1NUnxz0Ymqf4tmnGfTQ0LwSfJIH4ZCjTwbwNnDq8pfoWufQCaszkaF60jmHP5dM4gYesrcMMvsp81LgUIK6kKROC23NRF0z95yuFNwPIG4d1nzRQnnUhWTBUAWsIiz8uK8wkFPQDZn1CHqF5EjWk21M7tf9fhyJXt6Tw0RSiCg9987hVRUtDCG08U42g1w9zaiQp/phRCT7Q+mph3fwPNJ3/rcK8aRWgz9qSg== 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-SenderADCheck; bh=UsLpobkzQv0+2zYP2FAzqdGWFaYf4aCLSnyUGToaaeI=; b=WLCvBsniSSOpciraVlPc4sy+giKVUtMTACjLW/RiUhrCUD6fsE7osf2ApPQI0aBp9va7nfm5eSQh1YQkhBw2xNK40aLwn6KLaAsK3kgiM6EOC1x9tMxr/Dd2HZhsEcOl9FD7TaUGwg0XFfk+oktiVsSOpj/V3jShadA47qdztSfTQZ8rZZbJYaMVbHVBX5OxvzlLctXllioiMJ/b/vYcEmO09M/se1/1SThHL7wszCBclMNiuFUNGufiZyh2EoPm1jbMbMjmrs9ciX8DVsKe1pIBHPSA+R48W3DS5Hy0VAEoZP8bUstheThvrW45wo0dsJTuPiLwgKGkXDb1um+m0Q== 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=UsLpobkzQv0+2zYP2FAzqdGWFaYf4aCLSnyUGToaaeI=; b=LiIB9qAIt99ZVhqCprHZZuH1RdzdZOqsSbYF06+wPqUIVnGccwgcq4j6uH5We31E5gcp5UjxNIswsBL3Ki/w4sHHS/I+7lRwhG07z4YNxW9K//LiXom7b9pCza2HXorK3Pf94nPQ3gWWa9n1xdoysVR2HGnoGNoRHBz0BR7MsoQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ming.qian@nxp.com; Received: from VE1PR04MB6368.eurprd04.prod.outlook.com (20.179.232.146) by VE1PR04MB6718.eurprd04.prod.outlook.com (20.179.234.221) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.18; Tue, 17 Mar 2020 11:23:23 +0000 Received: from VE1PR04MB6368.eurprd04.prod.outlook.com ([fe80::c962:b871:9b:853]) by VE1PR04MB6368.eurprd04.prod.outlook.com ([fe80::c962:b871:9b:853%7]) with mapi id 15.20.2814.021; Tue, 17 Mar 2020 11:23:22 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Mar 2020 19:22:59 +0800 Message-Id: <20200317112259.29898-1-ming.qian@nxp.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: SG2PR02CA0079.apcprd02.prod.outlook.com (2603:1096:4:90::19) To VE1PR04MB6368.eurprd04.prod.outlook.com (2603:10a6:803:11b::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from NXL53318.am.freescale.net (119.31.174.68) by SG2PR02CA0079.apcprd02.prod.outlook.com (2603:1096:4:90::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.14 via Frontend Transport; Tue, 17 Mar 2020 11:23:21 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [119.31.174.68] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 99d25246-6958-4f32-34d4-08d7ca659a3e X-MS-TrafficTypeDiagnostic: VE1PR04MB6718: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:568; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(396003)(346002)(136003)(376002)(199004)(6512007)(26005)(6486002)(478600001)(86362001)(2906002)(6666004)(6506007)(52116002)(1076003)(44832011)(81156014)(956004)(2616005)(6916009)(16526019)(81166006)(8676002)(186003)(36756003)(316002)(66476007)(66556008)(8936002)(66946007)(5660300002); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR04MB6718; H:VE1PR04MB6368.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aH9t20qU/HpFR9NF5p8z8dWIrNkMSd5HDe0li5zjn8fC/nnEWz2lDNXzXY0/pqMQAAbZaAjtXwj4Vn6gSmDWJYgqYUcxopIwgMlSeqFgm4eTz31e2n03y09wDDgm+dqGrvsYfKr92YfkLPhPug8pWYUPBoFlex1mIzcJppeXXkyU/TeNArNm9J5jKB7xfHE9uT0vMTqrsnRvv2dNaEGFIbT0Mpj5fuqBJCPyA24LN08Q3Hbc0gIpZrUQFI5C3xN3l74WvaolMsKrHWNE/RuIvYk5TrGo/IRliM5KOvfY2K8JFtU5Ow8hKZQBnLXVXu2R5o4fHZtQD/nf0OGeo5cnH1vletHEopjsYwibvgMVUrRbPUw0ExqmH4q6QULsqto9qKfXuw4MeCPUMKDUeAv6DYE0r3tTEPjT9/irlrn6Bb1JR0OmvqVcRA5633ZVhoUH X-MS-Exchange-AntiSpam-MessageData: q8/yiaZjwobakqpcDDZZIFMF2sPd5Oq5hLKrsRSS/MZR7CwKDbyrxW5JIMubo6RG1IfHNoIpTLwn9cFMbo8nQfrIxGq+JpWYyfBRJP+bLAg/aoajy69CizBheeSadVMJSWYT+F201k/AcWvKZaMo+g== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99d25246-6958-4f32-34d4-08d7ca659a3e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 11:23:22.7368 (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: IX8gs/0wIOlKpMbW9GvMVtxCxu5kH9lKvTZkUnjLF4D/+t4TC6xxgOSkmxqzTxzt0jw88X80ltwh9wr62SigoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6718 Subject: [FFmpeg-devel] [PATCH v2] avcodec/v4l2_m2m: handle the v4l2 eos event 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" when the last frame of capture is dequeueed, driver may send this V4L2_EVENT_EOS event, if this event is received, then we can set the capture port done if the v4l2 m2m driver don't support V4L2_EVENT_EOS, just output some error message, not make it error. Without this patch imx8qm often hangs at the end of encoding/decoding when flushing the capture buffers Signed-off-by: Ming Qian --- libavcodec/v4l2_context.c | 5 +++++ libavcodec/v4l2_m2m_dec.c | 9 +++++++++ libavcodec/v4l2_m2m_enc.c | 22 +++++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index 8110bbb555..c10862aa12 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -171,6 +171,11 @@ static int v4l2_handle_event(V4L2Context *ctx) return 0; } + if (evt.type == V4L2_EVENT_EOS) { + ctx->done = 1; + return 0; + } + if (evt.type != V4L2_EVENT_SOURCE_CHANGE) return 0; diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index d666edffe4..7a4d2a43cb 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -123,6 +123,15 @@ static int v4l2_prepare_decoder(V4L2m2mContext *s) } } + memset(&sub, 0, sizeof(sub)); + sub.type = V4L2_EVENT_EOS; + ret = ioctl(s->fd, VIDIOC_SUBSCRIBE_EVENT, &sub); + if (ret < 0) { + av_log(s->avctx, AV_LOG_ERROR, + "the v4l2 driver does not support VIDIOC_SUBSCRIBE_EVENT\n" + "you must provide an eos event to finish encode\n"); + } + return 0; } diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index 5b954f4435..849d28e9a8 100644 --- a/libavcodec/v4l2_m2m_enc.c +++ b/libavcodec/v4l2_m2m_enc.c @@ -155,6 +155,24 @@ static int v4l2_check_b_frame_support(V4L2m2mContext *s) return AVERROR_PATCHWELCOME; } +static int v4l2_subscribe_eos_event(V4L2m2mContext *s) +{ + struct v4l2_event_subscription sub; + int ret; + + memset(&sub, 0, sizeof(sub)); + sub.type = V4L2_EVENT_EOS; + ret = ioctl(s->fd, VIDIOC_SUBSCRIBE_EVENT, &sub); + if (ret < 0) { + av_log(s->avctx, AV_LOG_ERROR, + "the v4l2 driver does not support VIDIOC_SUBSCRIBE_EVENT\n" + "you must provide an eos event to finish encode\n"); + return ret; + } + + return 0; +} + static int v4l2_prepare_encoder(V4L2m2mContext *s) { AVCodecContext *avctx = s->avctx; @@ -164,10 +182,12 @@ static int v4l2_prepare_encoder(V4L2m2mContext *s) /** * requirements */ - ret = v4l2_check_b_frame_support(s); + ret = v4l2_subscribe_eos_event(s); if (ret) return ret; + v4l2_check_b_frame_support(s); + /** * settingss */