From patchwork Thu Jul 29 06:00:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 29110 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp5517332ios; Wed, 28 Jul 2021 23:00:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwj2tC2U08bjAuvw9Qs4amDMUDQ45W2J1L6V7GkES4CdUAabGR5yKV6Ihvk3ptDRF3vafP X-Received: by 2002:a17:906:1fd3:: with SMTP id e19mr2983960ejt.421.1627538457813; Wed, 28 Jul 2021 23:00:57 -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 di25si1894123edb.456.2021.07.28.23.00.57; Wed, 28 Jul 2021 23:00:57 -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=prhqaTBj; 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 2F56768A15F; Thu, 29 Jul 2021 09:00:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2050.outbound.protection.outlook.com [40.107.21.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A3D926880BA for ; Thu, 29 Jul 2021 09:00:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ANOvsCSbl03XQ/o6dn31U83PlTuVCYF0vdJSV1iE5XTG01QMhcCgExskyG+sD+NJcK1Cf7zn2Bk4B3HWlywgp0tF8pGR289jlwIuorKA6OwRi/L3Pqvdh3VKULkTjXGSantWiuol+TGnxiBCexYVDAwak/z79XYDqNr68DtGGIkeTKmlTpJIHByLBGBV3Mn3t8qnDbSbSKRYghXwpKiR4gj5SF1MwZg8xLQbwju7hA3xQsImmalOV4DILaP4GrPzol28FedHo2bajLV7S27uuJJW/wYMPQNEGIeGeN+eDf/BRr2IgnTRgXkLuGbdVI5ModhU5IIbVyGTd5LCm1gHww== 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=+uFDMLMQA3ZNF4SbU2xK+FMj1DOBDd6Jg58Room9W8s=; b=FumMQVj7zPM3gW2hRORNuPxosX88fmXwyoVddzC0uI22qHLBgqJ48uHnNO+z1LiC944RYQa708ZvtsMQwDd7bll8rx+Dk+YM63ifB3qV/hRonbMBV5kWluFjqt1hKzMDQwUMGkIGsb/5jCe8gX8XjcMRRw8lsnho1XLHJ/CyS6CQelwkKt5dfEEGVQunbfF9hT6HmZ+Z8JEVxqaYoPHoSu6Xv1xxcsvUGXt/rFC26n5A92ZCRFNEikp0b15K+CpFHfpSwiXuqC6A6BdN20gwc4ROl6H9c8wbAXfK11sDbRGoXWe/QAfpJReUoo10d1Divse3i1Gzc2ILALTAcRrdTg== 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=+uFDMLMQA3ZNF4SbU2xK+FMj1DOBDd6Jg58Room9W8s=; b=prhqaTBjqwF8F5CUjcfq2f3fakYfv3HKjzq88mJlXn9qIun2qDK6io28Eb7YNHSjKVTQSqrjsk8FurgY9o86/QEttFyBzK0D0E491uruEQNiw4G4AAw9MVUcEbWDMyEdKhMq3DqRhFPHKGit6TyvtzHPQjzv78kCSJCvUQ8m0LU= Authentication-Results: ffmpeg.org; dkim=none (message not signed) header.d=none;ffmpeg.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM7PR04MB7127.eurprd04.prod.outlook.com (2603:10a6:20b:113::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Thu, 29 Jul 2021 06:00:42 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8%3]) with mapi id 15.20.4352.031; Thu, 29 Jul 2021 06:00:42 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 Jul 2021 14:00:25 +0800 Message-Id: <20210729060027.9513-1-ming.qian@nxp.com> X-Mailer: git-send-email 2.32.0 X-ClientProxiedBy: SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) To AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv11149.swis.cn-sha01.nxp.com (119.31.174.70) by SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend Transport; Thu, 29 Jul 2021 06:00:41 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a3d9071c-c784-4da2-5fb2-08d9525632d5 X-MS-TrafficTypeDiagnostic: AM7PR04MB7127: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1850; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iqx90au/4JXfMduAFLncGTuBNwI0jnaTR1Q+GumRruAqWO0aHmPcpSoXf75/vgtGNDGeK7O74DCPeONAaHxMQ1gXO5PxCPlyf0u/q9/k8L1HSH7WOdGU5WaUO1KrFrS4Yk8VvNaqy2HA1A/bjloy/3Dg2DDZFzQ8+QmGbyww7kxfHkGU6Ru3hwgvaBicxBT4ta4kWPoACzE2VPiEtmEbiUbb08nhaa4ySgkECNP8gIzlC8UbU2eqGwrATGXaxkamwrXKPjp1qi99eEDfEaxgBHru5ILWqvvU+2ifg4uSsvzw0k1G9ze4Y6Nb3W2PCvCaBkuQ/QawCVHNZVY0M5p2qyhvqFAo6v66hmtUNSVJ/zOmOK5cxJ5u251iVqLcQ9ygq47ZzSS3HcCmGjukL7STzz8DiO8jeXpAtUJnvJtEUXp+Nqg7Ytm2Qn6m4ud72UuhAtl+hQHtnb+A2rKgriMDnYBIMAomST1QyibLGIzRjryrk6SvzPC3pxBt+NpksOdf6Fo+tR7+H5OUQYriHyPsVzG95sB4cfj0tYcHVWeXFyBgjhjcqZ60hI0bAh9B0zTUH7zN7ftpF0emOZi7+0fYKCzfAE1vzjxGZd0d2OFPXyth0Zu7ObEgzll9LSCU7RcEVbbyVywAz2TgRNL/55VzxWKHKFwRWuO6rARTCud9HQjitRqSJayhmd1YEAVfG6wU0nUAAZmOU7BUZSEo3MBMww== 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)(376002)(366004)(39860400002)(396003)(136003)(346002)(66476007)(44832011)(66946007)(66556008)(6916009)(316002)(478600001)(86362001)(186003)(2906002)(8936002)(5660300002)(6666004)(6486002)(1076003)(52116002)(7696005)(8676002)(36756003)(2616005)(38100700002)(956004)(38350700002)(26005)(83380400001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: iUeKlZ/oVd5BbzRQQsENIpvozZfXMys68JgI/NT4gx8ob6UT/UosV9MO7Kf9lhsEWosqzqND71xg1V1tD9KCgTA2k34+eP7QB8bCnIi3WDLn+z1IK6lePG/yM775psAxATwDFiOK6CcqBs2jHPbGir+u61AiKrlYoGS95uO3cdYX04qTgzUFyBkENpVGQU06Hw36V8nwHJiGJUy5v0pV4njerqt2anSWeeMt+5eoN4LgGIV/PMBDU7QRQKrN/6uLszKdD3/epzu/JCY5/9hd8lDzgcIREB7sdrxLm97P1eB3a6jCyzUTZ++kfaDktN3gif5Z64wqCi2nhZinQkweTw74nvfE4EZiC/kI8AhXmtw12x+ay9DIqmo8gQfqMqt7QcAuud78WhyBkaxpM+duX6xUmg+GDPZROd0GuK9fI02AsTh2lWed0bQ5egAX+lwKEc4FYMIcnsIBv7HlXSnir7dmOl73hQ9msDQEhhRrp5hTE3PI8D5Xu538CQC/4c/es6xfkHmwQGMZZMtzVfzCMTNgQiSSy+URRhfmBoZeSzsfRImgzx3MUrVFAZ17FGZWJiLUcwcqXKzmiVDm0n1QAlaFWAu3+wh5zwAQefXD4C0YhG9ULnbPXrwUkrwVeaUlNBsqDSBNrSQiRuBZLCO6cOq7cB4V0AkTf3lWWHghrwd/Pary0X3NH70jPrqyU93K8StZk1OoHGghzi54BAQwj1aykXB8rmGovgiTn5wZ9oYzq4kp04TKKMTTxBBDgAS8Hht8mT927/lASaGxqE2IAy3JL1LdXicvKytg1VzwrtYY2nrM92rOG+YAaRPXKyvv2dtRq69kE78/YuvwFTqUB8DcrUPb3Ih5F8vQEQY2yUGLiqtF2/lxmu91DzwQKFptP89F2x/BQWtv5Kx8meJr9qJE8p56iP/+Xz8NYHosITaMlf5yLy3T8o5ekxt0KOkgdMVOwdJ7qu6Iu+MdB9B5hafehxl6hWFzKVGub6DdvAXxHzhPRBzSQcwDVAMFnGnGCHNMEr04t9l1JsF/u4FRRTKrUmr/GOJRNjsQvp/ARa/9/FpQpIbLAZtKifDqtu5eb7N/8QJ2MP6EIHkI/eAlpkkZ9ToBpLH8kDJ0ezV+oM978pgZ9UrpvCMRhmYhU7cE61GdaVd5GIdJ/snC42l+a5xFxFshC3Bc/VFz+jQBSVM+N+fTfkKV3MEZ8IdwKkpgK7DMlECtVKftSx9Ruu1p0wat45qYQVRMnUJnx55vwjKwf5c2sn99h34REQQmIAs2dMdLFZPWnpEKoMw2G0gAPOLJMkyCQ/zgTKysbyDsgPGm2ZfPt2nKvTTRCdE9hu+V X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3d9071c-c784-4da2-5fb2-08d9525632d5 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2021 06:00:42.5564 (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: 5Sw7EMtFPxSXmC4xboI5qsnoM9xLoaZfcpkZ4SA3qLQ+osYIS7D8tgOf2TIgxyVnBIRX6v7rvbULpPPBro5zOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7127 Subject: [FFmpeg-devel] [PATCH v3 1/3] avcodec/v4l2_context: don't reinit output queue when dynamic resolution change 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2VBYWfSDq7Ke in the v4l2 stateful video document, we can see the following description: During the resolution change sequence, the OUTPUT queue must remain streaming. Calling VIDIOC_STREAMOFF() on the OUTPUT queue would abort the sequence and initiate a seek. In principle, the OUTPUT queue operates separately from the CAPTURE queue and this remains true for the duration of the entire resolution change sequence as well. so don't reinit the output queue when handling the resolution change event Signed-off-by: Ming Qian --- libavcodec/v4l2_context.c | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index ff1ea8e57b08..dda5157698c3 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -162,9 +162,8 @@ static int v4l2_handle_event(V4L2Context *ctx) { V4L2m2mContext *s = ctx_to_m2mctx(ctx); struct v4l2_format cap_fmt = s->capture.format; - struct v4l2_format out_fmt = s->output.format; struct v4l2_event evt = { 0 }; - int full_reinit, reinit, ret; + int reinit, ret; ret = ioctl(s->fd, VIDIOC_DQEVENT, &evt); if (ret < 0) { @@ -180,25 +179,12 @@ static int v4l2_handle_event(V4L2Context *ctx) if (evt.type != V4L2_EVENT_SOURCE_CHANGE) return 0; - ret = ioctl(s->fd, VIDIOC_G_FMT, &out_fmt); - if (ret) { - av_log(logger(ctx), AV_LOG_ERROR, "%s VIDIOC_G_FMT\n", s->output.name); - return 0; - } - ret = ioctl(s->fd, VIDIOC_G_FMT, &cap_fmt); if (ret) { av_log(logger(ctx), AV_LOG_ERROR, "%s VIDIOC_G_FMT\n", s->capture.name); return 0; } - full_reinit = v4l2_resolution_changed(&s->output, &out_fmt); - if (full_reinit) { - s->output.height = v4l2_get_height(&out_fmt); - s->output.width = v4l2_get_width(&out_fmt); - s->output.sample_aspect_ratio = v4l2_get_sar(&s->output); - } - reinit = v4l2_resolution_changed(&s->capture, &cap_fmt); if (reinit) { s->capture.height = v4l2_get_height(&cap_fmt); @@ -206,18 +192,9 @@ static int v4l2_handle_event(V4L2Context *ctx) s->capture.sample_aspect_ratio = v4l2_get_sar(&s->capture); } - if (full_reinit || reinit) + if (reinit) s->reinit = 1; - if (full_reinit) { - ret = ff_v4l2_m2m_codec_full_reinit(s); - if (ret) { - av_log(logger(ctx), AV_LOG_ERROR, "v4l2_m2m_codec_full_reinit\n"); - return AVERROR(EINVAL); - } - goto reinit_run; - } - if (reinit) { if (s->avctx) ret = ff_set_dimensions(s->avctx, s->capture.width, s->capture.height); From patchwork Thu Jul 29 06:00:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 29111 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp5517447ios; Wed, 28 Jul 2021 23:01:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSb6+oEV9SevEDg+qaLV4DbUwSS+Z9vXwMUPcVlo908Qq501pdZUD7Ay5bH4hP0GD9K8GR X-Received: by 2002:a17:906:2c45:: with SMTP id f5mr2988170ejh.464.1627538468391; Wed, 28 Jul 2021 23:01:08 -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 ku15si1881729ejc.731.2021.07.28.23.01.08; Wed, 28 Jul 2021 23:01:08 -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="m37re/19"; 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 6608768A28C; Thu, 29 Jul 2021 09:00:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2050.outbound.protection.outlook.com [40.107.21.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D1D4768A107 for ; Thu, 29 Jul 2021 09:00:49 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DZZg/I3cAlKAgjiNP/5UZNQTbFOu8XfMUxrla8gifRTseGhiSPu7KHIUK2GyUy0L9sg/a1BiDU52bQZPjD85nYr0aQtnT26ZKmkuXDo8I/u/Lo1rbAiAcG+97Bnv7EjZ+NB/ywexkoE+yGvTbtagpqnadN/4HhWu7uBD+YpfTL2/ZC/sRg24UYOw4SUD2xSWfx3WNN5cS0tWWPC61f7RrJxOWplMVaEGDn51+9w5yPccpYkhjXdfa9j8wIy2wpgPVa811uhj1DN1w7MjlwqX5uSHTRFsy+leIOQvRWEuE1txfexsxwqSgoh5OGOm20hxw0rGxqSfdWpl9IUOYRD2Qw== 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=nB1dbceK0gwm9f+9sIqxPNzLCFkR+7NQ3cNoIfiX+js=; b=NikfBZJHmwe9iLx8L21AvyDDGRti2iCg8K7rbYHLw6l49ChRr2ooLYEt6t+TbN5WfSITl0WU8kYqQjLm/6++1QuOApeHIHGR9zkhhClfmDBmLl8EMTbe/QVqYJQNjQA7aLNKgn9ou9Oqk8TMZ9uTw0CRMJm6qwQ8UeGFOWGQwZSbGhByVDZ1oLLm6AUSaaCpqmG9PO7MNBSNZ8EHPchTHt2g7BHkBDtvIapbXiu1h2Xx2ODhsOU+oM1NkiHgmjxRfMSJiriyv8EHBdzO1FZgcq1YiYKb1Tt2nJawYBVo2XyJmUcF7NqPQuR6RqHsvho6N9guR2RKMaKFvuYp3mkpUw== 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=nB1dbceK0gwm9f+9sIqxPNzLCFkR+7NQ3cNoIfiX+js=; b=m37re/19lLeNiGqi180Dn3bXWlkSh7xRiqS+U01WU/CLZh8gDxw1H02t0YOXYqpQAkdAVj7ujrDF6IbzrUg13bq6T9Pdrw0voAVq/Rl4Mp5Uaam4V+RFFki5vVW+wt1CpPru15t1pp9WGipsB6Npb/NuiNoQ4HnFackpz8ym8r8= Authentication-Results: ffmpeg.org; dkim=none (message not signed) header.d=none;ffmpeg.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM7PR04MB7127.eurprd04.prod.outlook.com (2603:10a6:20b:113::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Thu, 29 Jul 2021 06:00:43 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8%3]) with mapi id 15.20.4352.031; Thu, 29 Jul 2021 06:00:43 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 Jul 2021 14:00:26 +0800 Message-Id: <20210729060027.9513-2-ming.qian@nxp.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210729060027.9513-1-ming.qian@nxp.com> References: <20210729060027.9513-1-ming.qian@nxp.com> X-ClientProxiedBy: SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) To AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv11149.swis.cn-sha01.nxp.com (119.31.174.70) by SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend Transport; Thu, 29 Jul 2021 06:00:42 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 124c199a-7a38-4bb3-778b-08d9525633a6 X-MS-TrafficTypeDiagnostic: AM7PR04MB7127: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1186; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XeceTmcj+8jp3bQoB6FjXsj+2Shi0NU9PKcgBudahYYhrOcikTSAUaFPruKBcJV99IraMYr5stkHM6TV6CG27vjRZ3HAC7hiWBvXgpvZ23hEXRVVRfX5/1roTKnliUUXklbsItVB/4HXdlxi7FTiYzCgIP9MfWp28DCvC2hL4yQk1rQ0wDFFgDv2279Bf4ei0HZZls5njWEoIiYJASyCxABJev2idHmoFiI97kisJ1p0MCT8RrxA4Z5x6TwUPjwP8hsRv4VRz2//CL55Wdvglq0nCqlMUaQb/SSDQuLOIbe9hJkbSHXNSESqoWc66mEIKKfUi5hmHJSMhaaXD1uyvWkYQLZvK76Xk8ukfBWMErpT4sZI0pEeZb/Td46JQ01Fjczwa5aTy7RTBaKd8sN3Pd6tRihKAKhJ8BfYmdzvoocsJ29rAOZHXDD5FBmJHrDY1hcNqRDe7/R9d+SZwH6+sDIJ0gntZhcySYyzWbTBR0ftYHej4865I3vbRNj2pS13/2DgUWOGBa4YxuQ4Ztbz0RRQ2Csfr9y31OFV5Cs9LV5/diq72Cs8Fp8KqZbgPDYlssZg5i0SPeJxo3O+hjnGpmwlxYzh+2NUFS7qwXte3f5d1eZt3UKvv4DewcyPZYqgSl8L8Yaj9i6KqYTTEQ3mOecSVnRVIv/r1OiDhH9/T9txYQCfORi7FhU/VMZN6Fsm+ybDU3VM1K66Y6NANoo0Dg== 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)(376002)(366004)(39860400002)(396003)(136003)(346002)(66476007)(44832011)(66946007)(66556008)(6916009)(316002)(478600001)(86362001)(186003)(2906002)(8936002)(5660300002)(6666004)(6486002)(1076003)(52116002)(7696005)(8676002)(36756003)(2616005)(38100700002)(956004)(38350700002)(26005)(83380400001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 28Jkbz5anUw70Ro183CAWI05ANLj3T38EDY1UAiCTsxcioI5g8xgU7vaTmKBJXm1yTInoNRL3YSO4IqOFvB4Rq0e6dv5ak0Qr9zfy5KuCCoWqSo5Lbb2Kb/VvsN+oc/03/TnHbjTJkM6KxYcr3wm49/RM8cPnWdS/IvyjsGC0TvKI3/12KpsdXbNBvSj1Tqo8q0wKCGPfRoQ89UfdJfvYSxovPraDLTth3lNcND8aSbXRbr4r7xI/0Ch5h5LPHoAtFvpYXbh+Z40sTUahhX4Yim/7Oml8qL8DXFk4Yc9xZfHx7T8f3ie+b5zwiiob1xUP1+FDr9sNamxBPjJVLG1xcfzcdSzXOG7lDXed4CxfYIGomyu7ZsGG3O5Ks2KDDhf/rjPJgAtplJv6/sYQL7sC/1LSImzt0+z/eoTqJgUHDWxEJ+VLXgqmQ40xq7hXS7ZJmF+6ywh3AyaW+6CGaODrLgUeW/5hDYibvvd/lLqsfFJ2iSlLZEEIkIQQV4EGJQ+Idu7Lva85R3v6uKC0LbebhBBJPiElPxakCXT4qhAHfZ8RtMhEitvg+Hhx8qllMWszCfXoBBY9QQKli8KP04ZPafGHpxI4/V+tRR5oDpWElxsr8V4kesTcbd2eVqeVaDZwOg+PDy8bLuh8Rs+4rD56nN1rjxh0Rpv/72Kq8FwPjlZFHjmOpCkMO/GHccEEF/QQIazh6qxmg1t03xj+znBG3J/KvAetn7vkU2HphwLccwOKC1T8Im+SjFpVvDx9WdoZbr37vW3jQhG1hJQztI68HXqLKmEpfQCJYoexIN2PEnX3etUgavnuPKtSlRECosljTTsR474jaPGkIDVNP+hmYqez6MwFSTpq8vGbrRMVXo/ktK/9NsrB8NCx0XJ58QVwO9neBw7jb+foiJSYCv1mnaFIUKUNYAB6I8Q6Eda3tWS3Vj/sdEiAlytPAV65dHKQQWBfy9cQJHvs/99ABLnQdQTMMziUBw3kxLw+GzL66xn0Ac1CboUCj+hcae0wQhT40+O96ALEISnYW+GW1S20X9deC1t6A/89ySaqp+UzNhomTcACzQBMFSJqHijRcg1YYNdShKO/bcEsQMq5cnolMl2Zq22bSw338SMcP2qu6lVCmI0bY6B11uxCBTp3wA/ATbrEGLBAkYRUJgmE12bNh+0cQ2Q/s8XmXu2aVAs1kVY7glBMB+nGODXCz9+kw4WTFR0HP/TO/qVdnFw0M8KBJDQ5t5yfYLRHocuEJ9HPi84cEzJ+2ZTs09MF+EfvJgGcHuA/OghGBDPZ97GVQ+pPsrnooXFwJIiBmBRaS6merlpEwbi7yxM7uxBafWklsZX X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 124c199a-7a38-4bb3-778b-08d9525633a6 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2021 06:00:43.8467 (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: QDLrPG0P/nSkYe4W5cuUE7ZlIGL0TSGku24P3+sIOs8evIn3jmfJJLgM/OumpT1+0PRoJK+IJlgwH3R8A9ye6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7127 Subject: [FFmpeg-devel] [PATCH v3 2/3] avcodec/v4l2_context: resume the decoding process after source change event received. 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qr4pwTF8CGrJ client need to resume the decoding process after it dequeues the source change event. no matter what's the return value of v4l2_resolution_changed(). if the client doesn't resume the decoding process, the decoder may keep waiting in documentation of v4l2 stateful decoder, we can see the following description: The client must continue the sequence as described below to continue the decoding process. 1. Dequeue the source change event. Important A source change triggers an implicit decoder drain, similar to the explicit Drain sequence. The decoder is stopped after it completes. The decoding process must be resumed with either a pair of calls to VIDIOC_STREAMOFF() and VIDIOC_STREAMON() on the CAPTURE queue, or a call to VIDIOC_DECODER_CMD() with the V4L2_DEC_CMD_START command. 2. Continue with the Capture Setup sequence. Signed-off-by: Ming Qian --- libavcodec/v4l2_context.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index dda5157698c3..df41e982fc56 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -163,7 +163,7 @@ static int v4l2_handle_event(V4L2Context *ctx) V4L2m2mContext *s = ctx_to_m2mctx(ctx); struct v4l2_format cap_fmt = s->capture.format; struct v4l2_event evt = { 0 }; - int reinit, ret; + int ret; ret = ioctl(s->fd, VIDIOC_DQEVENT, &evt); if (ret < 0) { @@ -185,35 +185,26 @@ static int v4l2_handle_event(V4L2Context *ctx) return 0; } - reinit = v4l2_resolution_changed(&s->capture, &cap_fmt); - if (reinit) { + if (v4l2_resolution_changed(&s->capture, &cap_fmt)) { s->capture.height = v4l2_get_height(&cap_fmt); s->capture.width = v4l2_get_width(&cap_fmt); s->capture.sample_aspect_ratio = v4l2_get_sar(&s->capture); } - if (reinit) - s->reinit = 1; + s->reinit = 1; - if (reinit) { - if (s->avctx) - ret = ff_set_dimensions(s->avctx, s->capture.width, s->capture.height); - if (ret < 0) - av_log(logger(ctx), AV_LOG_WARNING, "update avcodec height and width\n"); + if (s->avctx) + ret = ff_set_dimensions(s->avctx, s->capture.width, s->capture.height); + if (ret < 0) + av_log(logger(ctx), AV_LOG_WARNING, "update avcodec height and width\n"); - ret = ff_v4l2_m2m_codec_reinit(s); - if (ret) { - av_log(logger(ctx), AV_LOG_ERROR, "v4l2_m2m_codec_reinit\n"); - return AVERROR(EINVAL); - } - goto reinit_run; + ret = ff_v4l2_m2m_codec_reinit(s); + if (ret) { + av_log(logger(ctx), AV_LOG_ERROR, "v4l2_m2m_codec_reinit\n"); + return AVERROR(EINVAL); } - /* dummy event received */ - return 0; - /* reinit executed */ -reinit_run: return 1; } From patchwork Thu Jul 29 06:00:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Qian X-Patchwork-Id: 29112 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp5517577ios; Wed, 28 Jul 2021 23:01:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwV/lqDucFQG7TWjRwtOrvfZweyXwIs94jwc0DR3xSbAnweM4ANAvH6lewccEW8SD0zSaJw X-Received: by 2002:a17:906:3042:: with SMTP id d2mr3067986ejd.234.1627538478237; Wed, 28 Jul 2021 23:01:18 -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 c10si2195464ejf.272.2021.07.28.23.01.17; Wed, 28 Jul 2021 23:01:18 -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="XAECE/hg"; 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 7847268A2F4; Thu, 29 Jul 2021 09:01:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2050.outbound.protection.outlook.com [40.107.21.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EE79968A107 for ; Thu, 29 Jul 2021 09:00:54 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k6RT0XXgvsxwvMzKRW7zJUmTvnOB4yFvu6Ao+5sIv+O4YCmSyzxYMe/b9Ev8Ur1fAVYQ9QtcNfr7Dj3fSg8IxgqOgDMNTivKPuUhkyiwZh5XflRMA9CVVpsxTS4qtMK35wFvxJF/fx7UMUUsrtjJ68oGz+Tcl+QCHelCqwqYa6pLK5r3bMj3V6YD10xjQXMVvP6oiVEoB4p9mHhkyfFfqQSUGCaPzJ2h4NNUFy0U959+cqF0R8CQSX+m+Qxr2KJ8Q5PmmIPgXzmsxLKLTyvoJ/5gJ4Dg+CAuTR2kMUvVzb6LP0L8l2Ca3WdbQkr55uBwbLzEXWvZ32puK5WZojvDWA== 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=1LarHqNcyX232QmEHD8bEyBSQqSKrSimSDygWuNJ0UU=; b=ctlAD34kbTQHxm8W0rqyj12kxXOHngeaDwsYQ4yE+ulAMSgE3/zkiiQ7S3vfvavHYI4VgcUH8NrPvG9nXyWB8QzYv7KA7UbYFVRsT6kw6E4D9xZxUuZ9mdnr6qqAGphK+9mdZkr13+RAjtlwmrLxX3pDFpu2efkItihaCNiKEo1Yzc3wPW+ArbYetAhhcw5WwjIi3UjBucOpZVDPFP/ypZEqd3fjptPL3BrfK4A6IUC6AlVowmvexgRxbSLD+WA2ZWP0qjSNQW+zVS3HHd7WjQXvL2wGPueORFUKYc6nQHgP48MH99bALhiWONlZUa4HCIWN11svzHp0zAYtqs3L/Q== 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=1LarHqNcyX232QmEHD8bEyBSQqSKrSimSDygWuNJ0UU=; b=XAECE/hg4eW+cfDh/Z6QQlFHqbeq9GbverGEI4ulCa+Zg6oKaDvyQ5CgXQkBGZSWAi6msn7TAD2q5uYmQCPu0F9wXZAs21H0Ju1e4SVr51TwTHRQwTYYtEbspdXVh+/dAMR4LsVncfOldUM9ysdWnlUyrhkz7daqntEbqv86AaY= Authentication-Results: ffmpeg.org; dkim=none (message not signed) header.d=none;ffmpeg.org; dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM7PR04MB7127.eurprd04.prod.outlook.com (2603:10a6:20b:113::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Thu, 29 Jul 2021 06:00:45 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::81e3:1e06:83ee:5db8%3]) with mapi id 15.20.4352.031; Thu, 29 Jul 2021 06:00:45 +0000 From: Ming Qian To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 Jul 2021 14:00:27 +0800 Message-Id: <20210729060027.9513-3-ming.qian@nxp.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210729060027.9513-1-ming.qian@nxp.com> References: <20210729060027.9513-1-ming.qian@nxp.com> X-ClientProxiedBy: SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) To AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv11149.swis.cn-sha01.nxp.com (119.31.174.70) by SG2PR02CA0113.apcprd02.prod.outlook.com (2603:1096:4:92::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend Transport; Thu, 29 Jul 2021 06:00:44 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4ca1ffa3-0dfa-4357-4aad-08d95256346a X-MS-TrafficTypeDiagnostic: AM7PR04MB7127: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1303; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: anYnoKTjyukpsUJMtO1KsQLKSImD9/4CbE43yTRGKJqki8ocPCouJgkC2r0EFLagXhfmUpsBRjRS0PZ3TiDU43PqUpmGpb7HZ34/jae19VGxbYolO8mWJL0zVg+ljre3Pj/j0WSC+DxXO8CVtalTdgFrobCruOxu0v/V13GaazBkzJKkO5XHzimjHOSwiI4Yzqlp7+5hZwZtz867C5EGePjHaiqne8XxI9DU085OjLhpKUST+FTf+Tw7i0l82+DCMuCrQrIV1BO2r1gb10dshgHlRFfw992jWS9MYQ9BYtOKIf4pwLpcEPXPbseGXo9u7r4B4xuaBGWeji6PegbAUhULj3z0Sey6S0IyRtOY+ZhARUmqDLB75rkrql+DbU+jHiXJztU66SXcDRP28rKy2/uxn5cBahdgUAIW75AyDgkoSLn1zdHwJ2LdGjqvnZl8YRu/Xzlgj6q8ZjfIRXpJotvlJyuhkYWBRnyQ9LB+cNya7qbhh32Wq1k/P75GY8DfmBlPoojP+qHSJJBgnaIcwRdKb7ZGX+FH17m8Jdda/AXTsXUzie4MVIFvwXB7nmWFqVZk8ACsbig0MQA77CjLyd91mQLhOx7UGMCNQEL2gRG0FCWg3FTsjKPkqFS1xF5osyJCJ23U4UDWr9uL+tWxZYsJDL1ygSVEGvrXtpDrhDJOSF5T3PRLsVYDm4uVEoZvTjYTizmwLTqjGZngi2/cFNQ9nviyXjPv0v3R8peESco= 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)(376002)(366004)(39860400002)(396003)(136003)(346002)(66476007)(44832011)(66946007)(66556008)(6916009)(316002)(478600001)(86362001)(186003)(2906002)(8936002)(5660300002)(6666004)(6486002)(1076003)(52116002)(7696005)(8676002)(36756003)(2616005)(38100700002)(956004)(38350700002)(26005)(83380400001)(70780200001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JaJED7KKDBoowFSZRLz21jIxGxPFVFbO/LuqXYtG3msHl3l64d1jlpyWBSh/d7rTrAkLz2tHloXc7P0+MVdA2nOG1Z4kQ9v3aVfdF8sTGwf6n9ruoci3Eg5C5KYv7OoFKjXLWq/ZS07sdMYb+V+YQEMXoPaWFI4Eocyy7bQrhuXR/1louMOteNPuRbwMLHYl245CRYEA1FQ/k70G+K91gC5+iqapI9YteE6bHE+cEtzlVsITaBrk4QW0812OlSwyG70wX/AYf7Q4RAFLXfXdGE7zavXck2I8glFthOe8CcUM21sDbwrD/yr5uxIf1rjYgSmQ8cwPzme8esHvbTDZFZdkM0Vg3HNy0yqNxphTEsQSqlIsK7FRMrOTk47M4TmCbf4s5dDgpHQE08DxBGFTNl9ccQeEnNV4JKOyhwkHXgckANm5XtczKU3eLbxanKTjzuJaMHjdMEAfC7X/7Y9CG+/fOd7hdhqJyfImKNcBs+Emfr3oTbUqRBuLMhDSuIHZo1aw1260xwpP7Q2yG/jkw2dh0NHA0/rbdhT6F+GYNTVpgwtq2t4gQyXAWY69W1UTvS4jYRNwBaeInQh5pa2xlM9yr3P472z30fxVgVwh51yGyrfzDfckAogCk3cRgJDGWZp5VQ1zuAsmCtapwWmk5/8WlLrhF56gzqy5L1xgDlvOkCWgT734HQXDSUhxvL1aQPPKCVFBUqu2OVlw0aVWx2k4blRN4fQ+UIToN/RYzaOujA4WKVSGK1euoGtjMtoWJ/Q3td+6XacIrNjUnBj1Jh2NgR03uFKHR0JUEWAOGtVsOe0uvNBSPe5MrRdbuBUZBv7TJN0JJ3Gh1ibD9w87BZr8yo/E3/O8ntnG99gKxl+PbJMm2SfKkV526AUSoJX2WaODVsSKg4sZW27DbJ07mptRb40R6paaimQ5kv6RkRnKCysJhWK6GM4UvR7JcJSGWZP6IBJozZpacokG/IXtzKTyvcjgHpnOVFIbtODc+Naeb20/nn2BdX0ie9zXJhndX3cW8b/lWhCLk7FiAqL8bJjtqu6Pu8egYmNtMTsSw2V09IjlZDa7ngXHR0ZqrzAn0a9o2pEEzMptql32rsCkBUKxGEh5lelVKeB2Jq598+bODRkaKtyUk5HPe14+gax/MAjG1CS5iiOGeita2HDTP36yHDgm6PNceWrwQdW1FX/HgtE6fQwG1sESLHZ3CAqY5Z7EuwvepYn+HojZ6nNIwDFid1TKVeg1FeIqYSFAhaOSpJNkfq/sebcnE229dooRjPf6gxSiv1a/oPfnGAjO6cCrLUwDA0Y66TNQGBuN/cj7yKaC00aMXLkdBivKlUh4 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ca1ffa3-0dfa-4357-4aad-08d95256346a X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2021 06:00:45.2880 (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: tU0taBoXDLZ4FpgO5g2+Tp8CHb5neuSwM5yhpdeaCkLuqU9kQ8D0pGQJeK5NAXXeKAjueNE98OXa6WQF9ZT4pQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7127 Subject: [FFmpeg-devel] [PATCH v3 3/3] avcodec/v4l2_m2m_dec: start capture after source change event is received 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: fK+3/JdTGu16 if client start the capture queue without waiting the source change event, there may be some timing issues. For example, in client, the sequence is: capture streamon -> source change -> capture streamoff -> capture streamon. but in driver side, the sequence may be: source change -> capture streamon -> capture streamoff -> capture streamon. Then it may led to some unforeseen and serious problems. So to avoid such timing issues, the client should setup the capture queue after the first source change event is received. Signed-off-by: Ming Qian --- libavcodec/v4l2_context.c | 6 +++++- libavcodec/v4l2_m2m.c | 1 + libavcodec/v4l2_m2m.h | 1 + libavcodec/v4l2_m2m_dec.c | 34 +++++++++++++++------------------- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index df41e982fc56..543fc9523cf1 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -179,6 +179,7 @@ static int v4l2_handle_event(V4L2Context *ctx) if (evt.type != V4L2_EVENT_SOURCE_CHANGE) return 0; + s->source_change_cnt++; ret = ioctl(s->fd, VIDIOC_G_FMT, &cap_fmt); if (ret) { av_log(logger(ctx), AV_LOG_ERROR, "%s VIDIOC_G_FMT\n", s->capture.name); @@ -272,7 +273,7 @@ static V4L2Buffer* v4l2_dequeue_v4l2buf(V4L2Context *ctx, int timeout) } /* if we are draining and there are no more capture buffers queued in the driver we are done */ - if (!V4L2_TYPE_IS_OUTPUT(ctx->type) && ctx_to_m2mctx(ctx)->draining) { + if (!V4L2_TYPE_IS_OUTPUT(ctx->type) && ctx_to_m2mctx(ctx)->draining && ctx->streamon) { for (i = 0; i < ctx->num_buffers; i++) { /* capture buffer initialization happens during decode hence * detection happens at runtime @@ -542,6 +543,9 @@ int ff_v4l2_context_set_status(V4L2Context* ctx, uint32_t cmd) int type = ctx->type; int ret; + if (ctx->streamon == (cmd == VIDIOC_STREAMON)) + return 0; + ret = ioctl(ctx_to_m2mctx(ctx)->fd, cmd, &type); if (ret < 0) return AVERROR(errno); diff --git a/libavcodec/v4l2_m2m.c b/libavcodec/v4l2_m2m.c index cdfd579810f2..e2d5d8c968a9 100644 --- a/libavcodec/v4l2_m2m.c +++ b/libavcodec/v4l2_m2m.c @@ -422,6 +422,7 @@ int ff_v4l2_m2m_create_context(V4L2m2mPriv *priv, V4L2m2mContext **s) priv->context->output.num_buffers = priv->num_output_buffers; priv->context->self_ref = priv->context_ref; priv->context->fd = -1; + priv->context->source_change_cnt = 0; priv->context->frame = av_frame_alloc(); if (!priv->context->frame) { diff --git a/libavcodec/v4l2_m2m.h b/libavcodec/v4l2_m2m.h index b67b21633109..72f1a579f1ca 100644 --- a/libavcodec/v4l2_m2m.h +++ b/libavcodec/v4l2_m2m.h @@ -53,6 +53,7 @@ typedef struct V4L2m2mContext { sem_t refsync; atomic_uint refcount; int reinit; + int source_change_cnt; /* null frame/packet received */ int draining; diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 224eb3d5e7be..60eb39deef88 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -51,7 +51,7 @@ static int v4l2_try_start(AVCodecContext *avctx) } } - if (capture->streamon) + if (capture->streamon || !s->source_change_cnt) return 0; /* 2. get the capture format */ @@ -146,28 +146,24 @@ static int v4l2_receive_frame(AVCodecContext *avctx, AVFrame *frame) return ret; } - if (s->draining) - goto dequeue; - - ret = ff_v4l2_context_enqueue_packet(output, &s->buf_pkt); - if (ret < 0 && ret != AVERROR(EAGAIN)) - goto fail; - - /* if EAGAIN don't unref packet and try to enqueue in the next iteration */ - if (ret != AVERROR(EAGAIN)) - av_packet_unref(&s->buf_pkt); - if (!s->draining) { - ret = v4l2_try_start(avctx); - if (ret) { - /* cant recover */ - if (ret != AVERROR(ENOMEM)) - ret = 0; + ret = ff_v4l2_context_enqueue_packet(output, &s->buf_pkt); + if (ret < 0 && ret != AVERROR(EAGAIN)) goto fail; - } + + /* if EAGAIN don't unref packet and try to enqueue in the next iteration */ + if (ret != AVERROR(EAGAIN)) + av_packet_unref(&s->buf_pkt); + } + + ret = v4l2_try_start(avctx); + if (ret) { + /* can't recover */ + if (ret != AVERROR(ENOMEM)) + ret = 0; + goto fail; } -dequeue: return ff_v4l2_context_dequeue_frame(capture, frame, -1); fail: av_packet_unref(&s->buf_pkt);