From patchwork Tue Mar 17 11:39:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 18267 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 0C06E44ACFC for ; Tue, 17 Mar 2020 13:39:56 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D152568B5FB; Tue, 17 Mar 2020 13:39:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00089.outbound.protection.outlook.com [40.107.0.89]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8695A68AF1F for ; Tue, 17 Mar 2020 13:39:49 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QHiNsjGpxYzFceM0Fl/J5wROvj4PpMgFxFKQWn1yc6Ag8rxT4Ttoh/+VrnveHtC1EBR82bjAOhCjSJ1H6Wwwd4JxYJeOHtDdsKdTFsiOJooj3pkadAYchhmerFd1EctJzfMeTatR1moj2+NY5hUURfdzP7Abjq87YaLPb+bFXwT5CR39JQsncEG6N3IMtIW50JmJLvn1JsSiJr0bWxhz4b0TGDKN9FRrUENW26MwqQkjEUu0N+lAtqYE0rLuiDe5S31ulZ2OsoLvYHL1J1C7qlYDShTUySRKK/DMNGupygyby/4+Xsn74/7DEpdRDbzqCYThXy2LcRm7gHtGcjW2dg== 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=0IIVtzI4M5wi1CNhIwuSyli4UvHRx1grMZCeJ/SjY7E=; b=DtrkCL0MGAMobmW0PnG3AlwaK+jQGdXqMufebIc3HLQ4CIRmoH127e9MIMFOo3H6ySRXfhQjDvJca9BKE8Sx4IafwgpPU5z4C+d4Bqgh+6tWvBSHiywWjKzP/f4oS8DK6t6tfi+RzdrcuW3h24XsDWB+sNribJug6yOE/9ieI2SNVI9ksjBv0jUNSaagRcOK7cDb7smV+ZP9EICLJn8855cvWAWIHPBaqJwMcxjw7P9mVALxR47OcX5FXDD/t95vWIxlpY6jsubgYuFOxRWENMbnlEyCGwqXx61aCWoaPtNawjIrKNpbRdPrzYZGpdnbWpwT3BluXuvlDZ1r/VRt1Q== 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=0IIVtzI4M5wi1CNhIwuSyli4UvHRx1grMZCeJ/SjY7E=; b=YSAJOBU+C+EUXwLqwvGTlIbYUyDEXV2C9U4UivlPmA0c+9/V/OLG+6mxfcoubhMQdIKtg5ssTxZ/B2UmiY5zPbuzeQ3m9OlaMWBlqRzHSNxKf/pyIl5aNZELR6Kr9lHbU09/8oMG7BwH0tnJVSUBFFQmPSY7mAjL5P6Gk+bTnDM= 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 VE1PR04MB6733.eurprd04.prod.outlook.com (20.179.233.84) 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:39:48 +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:39:48 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Mar 2020 19:39:27 +0800 Message-Id: <20200317113927.31649-1-ming.qian@nxp.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: SG2PR06CA0174.apcprd06.prod.outlook.com (2603:1096:1:1e::28) 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 SG2PR06CA0174.apcprd06.prod.outlook.com (2603:1096:1:1e::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.19 via Frontend Transport; Tue, 17 Mar 2020 11:39:45 +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: 4d7f2a84-8b1a-4b43-b73f-08d7ca67e521 X-MS-TrafficTypeDiagnostic: VE1PR04MB6733: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:568; X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(346002)(396003)(366004)(39860400002)(376002)(199004)(478600001)(86362001)(2906002)(6486002)(81166006)(44832011)(956004)(6916009)(186003)(5660300002)(8676002)(81156014)(8936002)(16526019)(316002)(26005)(52116002)(6506007)(66946007)(36756003)(66556008)(1076003)(2616005)(6512007)(66476007)(6666004); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR04MB6733; 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: k/uwD+dkkEEQpq2CXCQ5ZouCy277LT3urGfMAQ3+ZlbyGZ256w/q19SoLqHL3BzGrft2/8qInlOCp2KVdL5I8M/AE7emPjLEepc5+lkD61YXSeu3gEj2SMS+y9GzG9BffIX9X1s2AaEJ0mGGpwG2+Fonn67IHwenRGMBOtf7Duq/vThS8UVpYYxBy9bpykJwrchHx/QQuMSf3Df/1mBR1k0S4NbkrAWuR3MTHYKsosS0BP8etBXWzSGMxy9jVXfwbO6cCb3uW8STc9xAKzSbIcgUXDeENAIfQ86fn6AGbbKF/qZ/bf9t9okr/gR0lB+b8IvYj+RheK71DMMlys/dEUcQddjdup2WQM6hfcJF6TzkhUVPgrH1RP0rPFjQm0/x5J7glgZFuJc0+zUBp83u2A+Gd+V57aFOIoliemYeolLpDlQoF/xeUxf/ouYQtM1S X-MS-Exchange-AntiSpam-MessageData: RAjoos/kzEpo7kAhkjL79x7+5Q1lz4WoVJmpkK5avwgx6WEr5GcP82Gdkx0NNNLABxbzVdOPsrcbJScdjQQHyYRYvWRoZcSuXIdHy/4hqHcSL7oyD0Y8LxpSKfJdrKdMkYJ+NZy+7+EUXHoRmbUZ5g== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d7f2a84-8b1a-4b43-b73f-08d7ca67e521 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Mar 2020 11:39:47.8194 (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: zl/ue5N+D/KudULDbNAosystkyK68aa9nXypmjl9J+7Yle1YjKSYdKzIIzXsyAPqZ+bLRxCNiK/CC2bJ9s0bjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6733 Subject: [FFmpeg-devel] [PATCH v3] 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 | 20 ++++++++++++++++++++ 3 files changed, 34 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..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 84de63ec9d..13bd9d29f4 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,8 @@ static int v4l2_prepare_encoder(V4L2m2mContext *s) /** * requirements */ + v4l2_subscribe_eos_event(s); + ret = v4l2_check_b_frame_support(s); if (ret) return ret;