From patchwork Mon Mar 16 02:03:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 18216 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a0c:ab15:0:0:0:0:0 with SMTP id h21csp681927qvb; Sun, 15 Mar 2020 19:03:45 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuxGRUWwWwpetjUrUgdwAF52rbpvW5680dleeB2BXa0h19liKCPGKE8FK6Yu6uvu8Bq/jfk X-Received: by 2002:a17:906:180e:: with SMTP id v14mr13465537eje.355.1584324224859; Sun, 15 Mar 2020 19:03:44 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q24si8770449eja.172.2020.03.15.19.03.44; Sun, 15 Mar 2020 19:03:44 -0700 (PDT) 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=Mna1YIrQ; 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 BA86268B3F8; Mon, 16 Mar 2020 04:03:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140073.outbound.protection.outlook.com [40.107.14.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 331C468AE2D for ; Mon, 16 Mar 2020 04:03:36 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=maJjmhzs3HL7KNdVmA1u5GzmNPr++wcYOjolVi2I8OS766+5us1/NXDCuNhy1XHEuB+G87Kazp+/zp72jYkJPxcEr/RiYscurfttG1uPYkggAsaw75nowi92elKCSNVu9NgsWDcRaydpKt+mz347dS/pGuoS2YeRQ4xUJOfQrY9QCEpgAGkBPAJoBb71Jz1Jl8/h0DENFPvONXf6bnVrVYe2nPgrKMjX5m2zCVcmp+Pv63aqhZpGRGPPT5aSULbsaf4mA6onBaw6WGcj/ORD76BS7v4n0D7F7vh1RnTbT2wuXwR5gKdnImzwDlb/rj7qqLyBnb6yJbpdW0dBd/IU5Q== 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=PEGQ0HR2CU6uGRJXRFDXZ97vIbhIptlVHBm8jmEOYJ0=; b=DT6Rzo23fzKXFA/53irJBXfNn1ItCMfcgF2uIzqQ4BOlG0MKJXDIeph3lqynE85mwwJH3Xv03MeBRTUGsIG17nJcAI0hvcPj9cC9mUZMOJuNDNXbdx2GU3IDYALiGsQtbJ2DCKtzmCg52Gfq/1z+CXVbz1XPm4ErW8vs8VNAJhEYWy93UBls7ZyAs8uhoOU/Oo9dUAECattRwWoFtuVBwgQ544MG5zGVSfEuyV1Oa2jO9eqQLwq9Z3tbng+36QG7RAl1SFszyZ1zjv4tZszwmyF5us8YRSkZoihjvotbzDrAdv8w8W3JZhsS9Ap65Is5m93CM8mwHOSOuV9fCO7bJg== 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=PEGQ0HR2CU6uGRJXRFDXZ97vIbhIptlVHBm8jmEOYJ0=; b=Mna1YIrQccNHTYDxoG2fpDRnYrtqEl7FwBhrKX3EQRZn37tBLLIzoWn9AqER877ewahYUBQyXFtuDNJnTTmNaWjdRjWTXJYNaMB2R7B9AJDbARId/WZLWsy0958elrHuRE96Ikj4qdToiW5652Oq7wG2bk0TPY+3cfqwPl6NkBg= 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 VE1PR04MB6606.eurprd04.prod.outlook.com (20.179.235.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.18; Mon, 16 Mar 2020 02:03:34 +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; Mon, 16 Mar 2020 02:03:34 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Mon, 16 Mar 2020 10:03:06 +0800 Message-Id: <20200316020306.27607-1-ming.qian@nxp.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: SG2PR02CA0097.apcprd02.prod.outlook.com (2603:1096:4:92::13) 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 SG2PR02CA0097.apcprd02.prod.outlook.com (2603:1096:4:92::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.14 via Frontend Transport; Mon, 16 Mar 2020 02:03:32 +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: 2e84a09f-9d45-4de9-1226-08d7c94e3b65 X-MS-TrafficTypeDiagnostic: VE1PR04MB6606: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:249; X-Forefront-PRVS: 03449D5DD1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(396003)(376002)(39860400002)(346002)(136003)(199004)(6486002)(86362001)(186003)(2906002)(6666004)(316002)(26005)(5660300002)(6512007)(956004)(66476007)(2616005)(8676002)(6506007)(52116002)(1076003)(66946007)(66556008)(8936002)(44832011)(16526019)(81156014)(36756003)(6916009)(478600001)(81166006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR04MB6606; 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: KghViDr5fsjetPhgVMk4+hAkyKst8QZixarnq7GDZgJ5HzdUdo7Taw4ZaBh9wdMFMQOMILZj6/z2jiZkWvo85rH7865sZAzNg5EtyLUsoxMZChjmPDz8nIYGFz+fwzyhFO/iH+UXJVfpmwcvVixc0zDUq/Df1SITvwnX0yHt+M5OoNfUW2hX3DxiNinziM/qjaMYKG9xc7NsyAkxsRX7FqtKSz5RvxOxCSok9aJwX0jqEu8ZsaeEWAT9GzNZFV5zTAIlyDxrVlKAgdlV4SGBjT0GZ3PGUDTAs4Jw0JCp7hi08AnTZMxswdm3wY292seyuDInP1efWnQZpzCntbl6oD8X06H+MOsei9NGTSpjTckPSOM27epqESttIpKm/po17yzaw6iQB6Z3gj1EwQIOEuwnutDtmiygS7a5F/iXhx2S01zoCSnLIEWq0+FjBzgC X-MS-Exchange-AntiSpam-MessageData: Tmx6EwM6sQ4XSOE/X2FZrxpHOV52eNBCtvnA3HB4SQktbSj2RpOTpXqs5yjNUFNbZVVUgbpeudNq3vgicixBn0hQeoUtQlc2kRgDAoz81a4lbTMa5whe/MG6pzxV/kHhTlb7SVRxOl4EhPFc/Mk8wg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e84a09f-9d45-4de9-1226-08d7c94e3b65 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2020 02:03:33.9954 (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: ZZjupoIVhdxiJq7Ke/zC0fmbU18YYGf4ttWmaRC3DfprCRF//vCPFS5y8JehhXMbLKY6wy9bGCXKzvTsOyRsmw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6606 Subject: [FFmpeg-devel] [PATCH] 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" X-TUID: Zyp156oBE3vZ Content-Length: 3830 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 Signed-off-by: Ming Qian --- libavcodec/v4l2_context.c | 5 +++++ libavcodec/v4l2_m2m_dec.c | 10 ++++++++++ libavcodec/v4l2_m2m_enc.c | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+) 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..4862a4c0e5 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -123,6 +123,16 @@ 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 ret; + } + return 0; } diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index 5b954f4435..3abdd47a4a 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,6 +182,10 @@ static int v4l2_prepare_encoder(V4L2m2mContext *s) /** * requirements */ + ret = v4l2_subscribe_eos_event(s); + if (ret) + return ret; + ret = v4l2_check_b_frame_support(s); if (ret) return ret;