From nobody Mon Sep 28 23:12:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 89A4330EF97 for ; Sat, 15 Aug 2026 19:22:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821756; cv=none; b=NrmL7tOrtPKTwnNcysoEKXJgDilqwqMQHBzJtczhGJ4BVk+GgyeLZrfHW8NrWHvFy0c5vREoMwk6TW25z9v+UFBvm+95HDJbF8lM1c8WXEmrDjJnfGqC/lfk9p6vGFVS4NQahLXHAhgszAXfBYT6uCryVK+BXd42xgkx1YjWdCs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821756; c=relaxed/simple; bh=aYg1KsEO1BMPI1NvrP0QlCY+oFgndNkDbagsl25qYmI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B16xndu/KVphPDMu/AnsF6PQgL0ks61KKhrHD8OAxIl3bmbhErMTOvotRK5TdjhipCWICiy5/nSeYmiYD3cND0QBKkgmNWm7dzbzJuI/owaJUv207DL6SdK2QRM+eRjpcdq/snRK9OAIhBzRaFyLO2SkfMDsKJEPRiSI3mdLr1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=i2zFZVIL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PXY5lZej; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="i2zFZVIL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PXY5lZej" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67FGTF6G3999528 for ; Sat, 15 Aug 2026 19:22:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Wsd3AcTjBlyGfb//EcpMQsX1Atw/JeAXEdL+9Stg4F0=; b=i2zFZVIL+JS0C/Ro S2gSFfwGREQx2l1l6dK0FGy2dmv7Sf6d47c0fHZZubcEZciB28lEA7CmbqW62cTI 68JmpHWt+YebcftRlhGkk+XPrbVpbT5fBk0CbF1INjndpk+bpSTIoE4Gdq2BDPVA Oh+Hu4hIIzez9lieK2fdMuuNzZ0Kdp/x1EB0biaklxj9XDSuKpSbPwrkrg3JWJgg Ar8ZlG+ml9oiUWaqVz8LKxjVzLyb0SeH+M4N+iJsMZ+HWYzeE3miO9Ij9y3H9FU4 xNs7bUeBQju6qxUDGrvg5xpDxq/ponNQnsL1qUTBZudFxXXgca13ITfS6UtzRZAV Eid5dQ== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g2ghq1saf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 15 Aug 2026 19:22:33 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38f005ae3d1so446915a91.3 for ; Sat, 15 Aug 2026 12:22:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786821752; x=1787426552; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Wsd3AcTjBlyGfb//EcpMQsX1Atw/JeAXEdL+9Stg4F0=; b=PXY5lZej0xNjX/5L9VxvtCQl9vVfGwPefiZstYn4iixUC2RWJrV4fJVypetu4QQrcS Pv2BliPdrl68byKk4tS914rU6QSldY3lbefeTH3ZFhoGCKduLgg+WLVhiH74+cYCa6pL LLim78dJq4qlY3wWhTrsF8ANJ62r4+jxeUeLHa/6t3cTugcWiYjwoHQvNJkSCE7YscVv f4XCSgwlXBNBs/qTG0dWe89vqrCBekimwwwX6ShCqDQGLfTRVSWtx9xV8XE7rUGfTc0u PyBFhyQQll8jBjZT4u9Qy7jN3iX7g/t74/W6g9kWdFV2EvzqrDZR9v3omNxMqYnWqVpS XNbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786821752; x=1787426552; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Wsd3AcTjBlyGfb//EcpMQsX1Atw/JeAXEdL+9Stg4F0=; b=ZMFDKToY0PFAG93ZSeZ36DZKQLw+HSs4jLybPlYXG2YhOXDWQ9AkqMGSBq+5aWlCOx ExU1rTKUFaK215jvzJMGBG09kvIWeid103EU31vKeuXTIQ5eyL/0nMym37msjyrBmdqc trz9RQyq6NwP3JkIrZwrN8oSUNHS89icKSpe5Wc00pRuWCEkGAr6u+2iMeAtzIv3Veh1 znfkJVuavjNAKjwVOacgadt8SHgseNQD2xb8pLePd0zILbTHVcBAh9uDFoyslvjKVBAo 6Hp/HiCe20J8DlYPiDgf6WVI9fKnB5GDbuQsvXbL7Gi2pQwJdmJl0/6wF8szY/BOiIZe RWsw== X-Forwarded-Encrypted: i=1; AHgh+RpYVLVVBEoQgnBfZlR9Vj4TtcwahKlOcacUQkCqgjlbbq6tGEC/An7Pe/mgKwV/mVVU4lCJ+r8xAJcU4L0=@vger.kernel.org X-Gm-Message-State: AOJu0YxnlllPMBuA8kMsvtNiLnuZMibr32HTINKYHt7PBfldDj+0eDDQ axxZ1g3iGgUuL39+wcHH4QGUCUxOIHmEoLlOexj1VvdH39NPGnR2C5oW9Khajx4IsFOMlwQyyD3 suKHStWNaRyVhvyaUUbyabp+DCQPMy5ifDaCScrKogNic6VfYFVT2CUznrD7mXx5w31Q= X-Gm-Gg: AR+sD10LadyEGJfIqFfdm01Be4KsEoi3fXkzIFpEJuZqWb1oJJ+fxcki2V7VzHGGtDd 62S3/F/kKBtLrKhgTUqwDZsFsacwzWItxFP0cBLKPZoAJcvmoDI5u7bmf5JSCHpMIx5ZRz97fZr Pv/Hv4lrmD6axxgUgmpz1CxKl3CJhLfXbdTxZXP2dWIoZqb0LItza1StARxa/lsO2MCa1QBxk7B Q7NG5Jch+13i7D/srGPvATzhmTvBBgDOSIacHvaBcb1UqIYZhtA/ITkf8QTNPNGZYy5VXq0ciw4 hU76FcxVX6+Zm5TzV2yU/VLP6n461oi4FCZRDTb4ITR0UG5t7VQf3oIDKLUrhV58uhyLTJfiicV oEYGz5DuUGOvYb/UMwjzalGc2Ofs7CXiZbkapuYyNz5noTaNLqecSAlqal+z1 X-Received: by 2002:a17:90b:1651:b0:38e:6a7c:abbc with SMTP id 98e67ed59e1d1-3933e6465ccmr10274945a91.3.1786821752352; Sat, 15 Aug 2026 12:22:32 -0700 (PDT) X-Received: by 2002:a17:90b:1651:b0:38e:6a7c:abbc with SMTP id 98e67ed59e1d1-3933e6465ccmr10274929a91.3.1786821751813; Sat, 15 Aug 2026 12:22:31 -0700 (PDT) Received: from gu-dmadival-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d61e1cccsm15889350eec.8.2026.08.15.12.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2026 12:22:31 -0700 (PDT) From: Deepa Guthyappa Madivalara Date: Sat, 15 Aug 2026 12:22:24 -0700 Subject: [PATCH v5 1/5] media: uapi: Introduce new control for video encoder ROI Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260815-enc_roi_enable-v5-1-ded944f0fc7f@oss.qualcomm.com> References: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> In-Reply-To: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> To: Mauro Carvalho Chehab , Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Deepa Guthyappa Madivalara , kernel test robot X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786821749; l=7406; i=deepa.madivalara@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=aYg1KsEO1BMPI1NvrP0QlCY+oFgndNkDbagsl25qYmI=; b=Ff4xyMmIWAofHoBypL63V04/g595uILkcHQU7iRadj5QzHv2XrrRl/MKnn88rx7eYJB9wb9uB 3fYXbXT5kSPCI/cP5FXulxVOb29mvJmXKCnkJT0lBfWzCp0b5DppR9Y X-Developer-Key: i=deepa.madivalara@oss.qualcomm.com; a=ed25519; pk=MOEXgyokievn+bgpHdS6Ixh/KQYyS90z2mqIbQ822FQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX9+x8nGmauKx7 urvMANBFWoXoztFCLsVmZ0DmBFvVZtXg5Qacy8ifKwkMvZopTXy8eRDKORbW0e6afgwMCJ6W4EB 3vHD7C7wr+kUuM+noLySIYpk7elUwnEnGpTL1nCiPskVjyRl6EgvjDkOfWbtMa75oHRAqxJ820S CXJ0R42EF0Anm7xCQOs6Jx4Z5oT20uSvl+xwkKoPD61/H4/bCQ4gAefq4hP2VVwTiNIU6SE4jHn Pr62WCRWCmp8/Mv+wXeiII7OBFgIbq6fpZi6C3H9aoJ+TIL01onAcwkM7ilJxNxDaUpLG65rHx+ OochUGEMGMfPhJaB/iO8335f72qkP4C1YimjSLISB1C1OaFuaOrmTyxVsd2AW7+auUiwT+MHFjw XwVgnBRg0cl0vM71VhAYpoLsVOk2iMSX+wUzufOno2DmGoLW3akLks9ndfDccY1Ym1ThiAqfObs Xkumz5hdCyg5Aqb+ygA== X-Proofpoint-ORIG-GUID: RuwYGnBTe98cQxJICwh3UKmzNv_U_qIe X-Proofpoint-Spam-Info: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX4UbYe5TTmoLS kl8E5VS+vJPJmHVSsOx5o1f8SLm5i4YMjbPCg3Z7MMjt9uj4Pre66hVd/bFMpE/4v4wegPDZ088 DOgDe8CgMXt64Eyk3cLdNUh5MHrJedI= X-Proofpoint-GUID: RuwYGnBTe98cQxJICwh3UKmzNv_U_qIe X-Authority-Analysis: v=2.4 cv=dvHrzVg4 c=1 sm=1 tr=0 ts=6a80bc79 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=o2p6THidDhOa5OcZzacA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-15_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 phishscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608150146 Add custom control, V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP for video encoder Region of Interest to allow applications to specify different quality levels for specific regions in video frames. Define V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE to retrieve supported MB size based on codec from the hardware encoder and set the corresponding ROI MB delta_qp map that adjusts quantization relative to the frame QP's base value. This enables use cases like prioritizing quality for faces in video conferencing or important objects in surveillance footage while reducing bitrate for less critical areas. Signed-off-by: Deepa Guthyappa Madivalara --- .../userspace-api/media/v4l/ext-ctrls-codec.rst | 19 +++++++++++++++= ++++ .../media/v4l/videodev2.h.rst.exceptions | 1 + .../userspace-api/media/v4l/vidioc-g-ext-ctrls.rst | 4 ++++ .../userspace-api/media/v4l/vidioc-queryctrl.rst | 6 ++++++ include/media/v4l2-ctrls.h | 1 + include/uapi/linux/v4l2-controls.h | 2 ++ include/uapi/linux/videodev2.h | 2 ++ 7 files changed, 35 insertions(+) diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Do= cumentation/userspace-api/media/v4l/ext-ctrls-codec.rst index ab865a1a6ba929f1725ce2ab0fd3aeee4a69329a..c16b1c5cd1c02b7f66b5f13433e= b039eb615b35e 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst @@ -1674,6 +1674,25 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type - Codecs need to always use the specified range, rather then a HW custom= range. Applicable to encoders =20 +``V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP (__s8)`` + This custom control is used to set ROI MB map delta_Qp for the whole f= rame. + The frame is divided into a grid of MB Size by MB Size pixels (MB Size= is + obtained from querying ``V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE``). Each block + is configured with delta_Qp in raster order. The valid range for delta= _Qp + is encoder dependent. + Applicable to encoders. + +``V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE`` (integer) + A read-only control that reports the MB Size used for the ROI delta_QP= map. + The supported MB Size depends on the encoder codec. + Only square MBs are supported. The value returned represents the + width and height of each block in pixels. The ROI delta_QP map provided + through the ROI control must use the MB Size reported by this control. + The number of entries in the ROI delta_QP array is determined by the + frame dimensions and the reported MB Size. For example, for a QCIF fra= me + (176x144) if reported MB Size is 16, the delta_QP array must contain + 99 entries (176 x 144 / 16 x 16). + .. raw:: latex =20 \normalsize diff --git a/Documentation/userspace-api/media/v4l/videodev2.h.rst.exceptio= ns b/Documentation/userspace-api/media/v4l/videodev2.h.rst.exceptions index 6182b4e2d2ee002c0d3562e1cc3bc2fd9c4286d6..b036ed3ec2f0744175cad1cbc4e= 73fe828e0c955 100644 --- a/Documentation/userspace-api/media/v4l/videodev2.h.rst.exceptions +++ b/Documentation/userspace-api/media/v4l/videodev2.h.rst.exceptions @@ -141,6 +141,7 @@ replace symbol V4L2_CTRL_TYPE_STRING :c:type:`V4L.v4l2_= ctrl_type` replace symbol V4L2_CTRL_TYPE_U16 :c:type:`V4L.v4l2_ctrl_type` replace symbol V4L2_CTRL_TYPE_U32 :c:type:`V4L.v4l2_ctrl_type` replace symbol V4L2_CTRL_TYPE_U8 :c:type:`V4L.v4l2_ctrl_type` +replace symbol V4L2_CTRL_TYPE_S8 :c:type:`V4L.v4l2_ctrl_type` replace symbol V4L2_CTRL_TYPE_MPEG2_SEQUENCE :c:type:`V4L.v4l2_ctrl_type` replace symbol V4L2_CTRL_TYPE_MPEG2_PICTURE :c:type:`V4L.v4l2_ctrl_type` replace symbol V4L2_CTRL_TYPE_MPEG2_QUANTISATION :c:type:`V4L.v4l2_ctrl_ty= pe` diff --git a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst b= /Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst index d78328152b7552f8f0d30a9e2f7c104bfd4b70d3..fe5f8992389c32d8f35f432229e= f2f734002644e 100644 --- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst +++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst @@ -188,6 +188,10 @@ still cause this situation. - ``p_u32`` - A pointer to a matrix control of unsigned 32-bit values. Valid if this control is of type ``V4L2_CTRL_TYPE_U32``. + * - __s8 * + - ``p_s8`` + - A pointer to a matrix control of signed 8-bit values. Valid if + this control is of type ``V4L2_CTRL_TYPE_S8``. * - __s32 * - ``p_s32`` - A pointer to a matrix control of signed 32-bit values. Valid if diff --git a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst b/D= ocumentation/userspace-api/media/v4l/vidioc-queryctrl.rst index 82c8b52e771ce9301491b3f752e501a8fe7e2434..57e1652ae72e0324742142446ac= f32a16b94941c 100644 --- a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst +++ b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst @@ -425,6 +425,12 @@ See also the examples in :ref:`control`. - any - An unsigned 32-bit valued control ranging from minimum to maximum inclusive. The step value indicates the increment between values. + * - ``V4L2_CTRL_TYPE_S8`` + - any + - any + - any + - A signed 8-bit valued control ranging from minimum to maximum + inclusive. The step value indicates the increment between values. * - ``V4L2_CTRL_TYPE_MPEG2_QUANTISATION`` - n/a - n/a diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index 327976b14d50b73a631e4d2ed95d9f4d146c45ab..a1806ddbc797efa52e83cd3f685= ef70d5b5483d2 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h @@ -64,6 +64,7 @@ union v4l2_ctrl_ptr { s32 *p_s32; s64 *p_s64; u8 *p_u8; + s8 *p_s8; u16 *p_u16; u32 *p_u32; char *p_char; diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-c= ontrols.h index affec0ab4781507be761cb791ff737460acf9cb7..00a2c48630bd198faa9a2b833a9= aa346d8357555 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -920,6 +920,8 @@ enum v4l2_mpeg_video_av1_level { }; =20 #define V4L2_CID_MPEG_VIDEO_AVERAGE_QP (V4L2_CID_CODEC_BASE + 657) +#define V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP (V4L2_CID_CODEC_BASE + 658) +#define V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE (V4L2_CID_CODEC_BASE + 659) =20 /* MPEG-class control IDs specific to the CX2341x driver as defined by V4= L2 */ #define V4L2_CID_CODEC_CX2341X_BASE (V4L2_CTRL_CLASS_CODEC | 0x1000) diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 5373dba640fae3d19247ab1c74ba336e05dc0fe0..95d8369e0d3d1e434978b9e576e= 0ef122691c65c 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -1884,6 +1884,7 @@ struct v4l2_ext_control { __s64 value64; char __user *string; __u8 __user *p_u8; + __s8 __user *p_s8; __u16 __user *p_u16; __u32 __user *p_u32; __s32 __user *p_s32; @@ -1961,6 +1962,7 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_U8 =3D 0x0100, V4L2_CTRL_TYPE_U16 =3D 0x0101, V4L2_CTRL_TYPE_U32 =3D 0x0102, + V4L2_CTRL_TYPE_S8 =3D 0x0103, V4L2_CTRL_TYPE_AREA =3D 0x0106, V4L2_CTRL_TYPE_RECT =3D 0x0107, =20 --=20 2.34.1 From nobody Mon Sep 28 23:12:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F7F833D4E2 for ; Sat, 15 Aug 2026 19:22:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821757; cv=none; b=lNTBiJxyQ9AZMeVVTIl1qcHAGScKVrZ7Xd9Z3jLUCD08hmGWuXfKfnva49ATSOlS67iYujiW3uaNKqxwKQOFKHD5kWIEPhDgiyOkap1OVrNSZ9BerWfF9QsA6lPyJF+yQ9Ybk0uSBY8TRHtFhKaIUsZsIZrevnNNNgplwoPK1VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821757; c=relaxed/simple; bh=h/hrq8tlOmQSxbosQzmao/buysKRFdIVJfpNMxLFuHU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JE6pXDTIbo8Mi3Yr1ZzyRGL7Ds/dcemTK6xlXn2nc+u5t5DnSL6gQRjcsq5ChrMthEqlOfCW3jnLKmwLv6ei0zpX9Z3vL+xhhVWjaSYyoHtDFzDkfbmfdfsiy0JZvGvZMy8jvX1ds6L+NuP6tsPtphheZTDnI5OK3rrQLaOoPQQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=JgENgFTq; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=be1Zj2tW; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="JgENgFTq"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="be1Zj2tW" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67FGTtPI1364543 for ; Sat, 15 Aug 2026 19:22:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= kynEncYcQcGr44kGwirSobo5ocnqiYKg4uPy9Ir/qM0=; b=JgENgFTqBkrVZ4pQ 10rJ1iCkiWGE0AEFHWfdBuyC7h9J2zvpGP4y7MQDksjmhaqfXHRlzR+egk9nR163 Q1e8PwFp6HhlKmTE8CWChLjk6SH62btKVcPcdAxqqY5aw1MEeeHQO0AZEjctOdUF p7Kgbt4byJERUj0AapTNRQukeTNpPBhJwm6S92xf9TV0hEi5oU9z/p6A5bH95nem /2k83EFhPjl2Cm3Eg7GMktIC86ChV5KyFwJcJ3w2cEaFw5ur4zh+pX9LgJJ9PR54 YMbp93pCxEPf5uHA5DkJZF4oU7uGfWIajW2bznjiZZrEYIES8Gc4XmnHi0ca+NjO IXT4Pg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g2ghnss8h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 15 Aug 2026 19:22:34 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cf2308ef97so3092865ad.0 for ; Sat, 15 Aug 2026 12:22:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786821753; x=1787426553; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kynEncYcQcGr44kGwirSobo5ocnqiYKg4uPy9Ir/qM0=; b=be1Zj2tW3o3KVoUqhs2JWtKpBbz50aen80/LnjOEkKXG8jaE1fSBc05NsLKeEanHit YBNXzmTxpmrIAeNtXrLT+1EnuI1nG/ll8X/p75lKrmfaOGTJ6aIZbPoXR80i45ZQ9ck/ Nbj/WVQ82p+nqryoVJISknTBHsb2Upog35MOq7SkyQLXp4wrNj6zktrPRDFPW0BmLpjT yeADaExnKmUaC2RQ1B74teHcy2rN4uomhSEHWGfYYGiSSzYe7I9tge1bgGgRyuH+aWh/ HXpHGkhLfSn0eAkUUFM8ZN9fx178SSNOEuoWJEtczevKQCdGym4I5zQNkUHKbhKg8+3W IdUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786821753; x=1787426553; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kynEncYcQcGr44kGwirSobo5ocnqiYKg4uPy9Ir/qM0=; b=s8ENUaJ5pGznMggDuXaMh35i3A8/JKFp3Vi/H7Pgh2J4KS1TI34DP60VJD0l+6NbCf qg+YTrgWtYUOJ6VCd6L87GjEYL2C6MwgRi94lDs5uI2zpUkH9LHRjPW8/rshMqnWkYFw k/G+h78myWbgvuY9FtRhLVEb+67TxQxv1vumFsdLJJStRErISZekAv9XrvTRU1w7OIDg NggY+GU5fB63AuOA2E6iovyBAVOX7mQ9ZwRsdsXcncljEnxn+EnovywiM/yMvXGAmLvY KilzGjjhdr82AKYGf2wEtjQFFysXQC4Z6y4/2TTsziDMdvyG4BvOg5H/9WceNqDlApYQ Cwfw== X-Forwarded-Encrypted: i=1; AHgh+RoGUvgVHZ/0I3mwi0fdhg4SddCJYWMYGR72NWvQP2bYyB+94NAeTU/mz+sOQpDC5LaGMWJ4O6XcbpsZcHg=@vger.kernel.org X-Gm-Message-State: AOJu0YydCm3uMa1832Ywmir5QYg44oYhVRXfH9AkkYdAC8CTNqC3kX8f TNg512flUvL6hMG12G0JBFqNNEDFKt/P2tFPQzWl5bOC/8UO0N+YMrfnMU7Jl9S+O3PcZ9Eb/WU Akzmz5UGjnDBQ3PeWye9lRxlBuBLLzVs6KVcBIkddi/9m6vGmfODRZycb1GaL231yv0U= X-Gm-Gg: AR+sD10OBCn/uOx5uppXRKIy7MOxzMPkMTdfG2+nvljdGr1oYyJ1ceIExA3uWaC1SW3 qxjejgsraoE95v1R7dwjYWzvkkNVPMqxD6BbzVP0TpjMMnIIJp7U/Ot9bl3nmWRFnAL02Q0Y0dz cxX/wqJb1R3f5owjiCjkehBLAf+8DhAVve1aJP6GolRKQM8jDUSovVGUbAFI6jBLq0aRmFbG6kM TDlaojzQQV//Jf+6E+rII3VBTJgJwcuckHuxwLrcYQh/AujFRwiuzFhuIZsxopdMae+saIoh7S7 /fzX/55N2fCyofsxarDQc5Th9XOsX9YW6cI76BQIolZTk8OVA7xJhrcXRQpuKyEBspZv9xWxz4x kzXw/+oPgi6Xx6KmiQgXwcdVd6JOD2FCNx1qLtD/vCYxyhI+HlhapigTebIA9 X-Received: by 2002:a17:902:e805:b0:2c9:fbde:ab68 with SMTP id d9443c01a7336-2d3b0ea0392mr114160775ad.3.1786821753324; Sat, 15 Aug 2026 12:22:33 -0700 (PDT) X-Received: by 2002:a17:902:e805:b0:2c9:fbde:ab68 with SMTP id d9443c01a7336-2d3b0ea0392mr114160445ad.3.1786821752846; Sat, 15 Aug 2026 12:22:32 -0700 (PDT) Received: from gu-dmadival-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d61e1cccsm15889350eec.8.2026.08.15.12.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2026 12:22:32 -0700 (PDT) From: Deepa Guthyappa Madivalara Date: Sat, 15 Aug 2026 12:22:25 -0700 Subject: [PATCH v5 2/5] media: v4l2-core: Add support for video encoder ROI control Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260815-enc_roi_enable-v5-2-ded944f0fc7f@oss.qualcomm.com> References: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> In-Reply-To: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> To: Mauro Carvalho Chehab , Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Deepa Guthyappa Madivalara , kernel test robot X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786821749; l=5504; i=deepa.madivalara@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=h/hrq8tlOmQSxbosQzmao/buysKRFdIVJfpNMxLFuHU=; b=IyBDgddy+CnXftBn0kIZAqcQoki+kDNIRI9aVpR/k3kq0/z7Psf2I2xpgbx+oLVXKUPts9scw YCbj27a4mltAwx2csNAjrAAxuTVsjtR701qgLLT1zk4hqtQn5+e5N0s X-Developer-Key: i=deepa.madivalara@oss.qualcomm.com; a=ed25519; pk=MOEXgyokievn+bgpHdS6Ixh/KQYyS90z2mqIbQ822FQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfXxDrCfoBJBpzt h6cuycPjJq8SGGFCWL6AE1o5kXWI68lscWXP26NEK9H5M4B5uK5OGLjUVMV5XzzTrmTJkcZpIQ0 XsYTUOn92UrEOXqrsSHz2hJ66ycjxwzO/sFZTesKw30ubIrT1RYCYh2gIDyVZR0Jn/jlivx893n arFJ+tBeCV7zuQtS0qL+DU2qkZprsqdLPOhth0j3mLG5R9oTUQT0oS3ZwqddFxBsw1Pu4eCvu3R HQk1RaQex9DPqsVFC8KIiDXVtsmWLAqkODZ+wcwR6Z6JxxBl+xGsMSMbFLA3RhxDSL/AvO0AniW Y5FuSmHUxt0/boVkfCAx5nTOz9dpuTdIHz8yzH30GkJvAX7rYUDcybLIzC9LXWJRtjIDg2tEmIG g3WvojptRuKaq1532JcKRlzwdkO348s2vPsu0Yv7p6b/EvjjTDCq/VErJ2CArNM0sdL87vyjlPM 84m/Gjl6zZfMrxA1Lwg== X-Proofpoint-ORIG-GUID: evmoFrKDo49kvM9mZ6DBrLV7KmGCu92u X-Authority-Analysis: v=2.4 cv=QN5YgALL c=1 sm=1 tr=0 ts=6a80bc7a cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=hEAr28SmMdMltZAvPKQA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfXw0BEF8wrP6lB 3pzROzwV7AKakxreUKdUZk7kl7/lVOtoUpdI1hsLNjC8ETM1Ud61FZRugDQmHHEWWv+IGitjxaf nwSDjFvi1smxXLUjzyBIba7n8wg1wEI= X-Proofpoint-GUID: evmoFrKDo49kvM9mZ6DBrLV7KmGCu92u X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-15_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608150146 Add necessary support for controls V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP and V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE. Signed-off-by: Deepa Guthyappa Madivalara --- drivers/media/v4l2-core/v4l2-ctrls-api.c | 1 + drivers/media/v4l2-core/v4l2-ctrls-core.c | 23 ++++++++++++++++++++++- drivers/media/v4l2-core/v4l2-ctrls-defs.c | 10 ++++++++++ include/media/v4l2-ctrls.h | 3 ++- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c b/drivers/media/v4l2-= core/v4l2-ctrls-api.c index 93d8d4012d0f4fef004e417d0aee2ae44b1b30bd..7d41cfd7378baaa929d4da0266c= 45f731bb54285 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-api.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c @@ -980,6 +980,7 @@ int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, case V4L2_CTRL_TYPE_U8: case V4L2_CTRL_TYPE_U16: case V4L2_CTRL_TYPE_U32: + case V4L2_CTRL_TYPE_S8: if (ctrl->is_array) return -EINVAL; ret =3D check_range(ctrl->type, min, max, step, def); diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2= -core/v4l2-ctrls-core.c index 5b8a594fb9e24e16128c9c763a3b1dd311fad2ba..db6577070ebd2eb6a60599b3b23= 94fe128236705 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c @@ -290,6 +290,14 @@ static void __v4l2_ctrl_type_op_init(const struct v4l2= _ctrl *ctrl, u32 from_idx, memset(ptr.p_u32 + from_idx, 0, elems * sizeof(u32)); } break; + case V4L2_CTRL_TYPE_S8: + if (value) { + for (i =3D from_idx; i < tot_elems; i++) + ptr.p_s8[i] =3D value; + } else { + memset(ptr.p_s8 + from_idx, 0, elems * sizeof(s8)); + } + break; default: for (i =3D from_idx; i < tot_elems; i++) { switch (which) { @@ -370,6 +378,9 @@ void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl) case V4L2_CTRL_TYPE_U32: pr_cont("%u", (unsigned)*ptr.p_u32); break; + case V4L2_CTRL_TYPE_S8: + pr_cont("%d", *ptr.p_s8); + break; case V4L2_CTRL_TYPE_AREA: pr_cont("%ux%u", ptr.p_area->width, ptr.p_area->height); break; @@ -1397,6 +1408,8 @@ static int std_validate_compound(const struct v4l2_ct= rl *ctrl, u32 idx, return -EINVAL; break; =20 + case V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP: + break; default: return -EINVAL; } @@ -1410,6 +1423,7 @@ static int std_validate_elem(const struct v4l2_ctrl *= ctrl, u32 idx, size_t len; u64 offset; s64 val; + s32 tmp; =20 switch ((u32)ctrl->type) { case V4L2_CTRL_TYPE_INTEGER: @@ -1435,7 +1449,11 @@ static int std_validate_elem(const struct v4l2_ctrl = *ctrl, u32 idx, return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl); case V4L2_CTRL_TYPE_U32: return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl); - + case V4L2_CTRL_TYPE_S8: + tmp =3D ptr.p_s8[idx]; + ROUND_TO_RANGE(tmp, s32, ctrl); + ptr.p_s8[idx] =3D (s8)tmp; + return 0; case V4L2_CTRL_TYPE_BOOLEAN: ptr.p_s32[idx] =3D !!ptr.p_s32[idx]; return 0; @@ -2030,6 +2048,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ct= rl_handler *hdl, case V4L2_CTRL_TYPE_U32: elem_size =3D sizeof(u32); break; + case V4L2_CTRL_TYPE_S8: + elem_size =3D sizeof(s8); + break; case V4L2_CTRL_TYPE_MPEG2_SEQUENCE: elem_size =3D sizeof(struct v4l2_ctrl_mpeg2_sequence); break; diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2= -core/v4l2-ctrls-defs.c index e062f2088490470c42d6c579ff7675be454a29b0..8f895060799ea13443143edd398= dfb97f4ba0085 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c @@ -974,6 +974,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_MPEG_VIDEO_AVERAGE_QP: return "Average QP Value"; case V4L2_CID_FWHT_I_FRAME_QP: return "FWHT I-Frame QP Value"; case V4L2_CID_FWHT_P_FRAME_QP: return "FWHT P-Frame QP Value"; + case V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP: return "Encoder ROI MB Delta Q= P"; + case V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE: return "Encoder ROI MB Size"; =20 /* VPX controls */ case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS: return "VPX Number of Parti= tions"; @@ -1622,6 +1624,14 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum = v4l2_ctrl_type *type, case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY: *type =3D V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY; break; + case V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP: + *type =3D V4L2_CTRL_TYPE_S8; + *flags |=3D V4L2_CTRL_FLAG_DYNAMIC_ARRAY; + break; + case V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE: + *type =3D V4L2_CTRL_TYPE_U8; + *flags |=3D V4L2_CTRL_FLAG_READ_ONLY; + break; default: *type =3D V4L2_CTRL_TYPE_INTEGER; break; diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index a1806ddbc797efa52e83cd3f685ef70d5b5483d2..9a68a3555e349f1e55aa01af5c1= 0f08201d62bae 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h @@ -27,6 +27,7 @@ struct video_device; =20 /** * union v4l2_ctrl_ptr - A pointer to a control value. + * @p_s8: Pointer to a 8-bit signed value. * @p_s32: Pointer to a 32-bit signed value. * @p_s64: Pointer to a 64-bit signed value. * @p_u8: Pointer to a 8-bit unsigned value. @@ -61,10 +62,10 @@ struct video_device; * @p_const: Pointer to a constant compound value. */ union v4l2_ctrl_ptr { + s8 *p_s8; s32 *p_s32; s64 *p_s64; u8 *p_u8; - s8 *p_s8; u16 *p_u16; u32 *p_u32; char *p_char; --=20 2.34.1 From nobody Mon Sep 28 23:12:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97FE038A734 for ; Sat, 15 Aug 2026 19:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821758; cv=none; b=ZoHf6dnDpKxmqqge8KrROT5rVknFlPvXHpy8yYDdMdIOXTLWkOgzMqWGzJeUIN3j4PIpxg4BoErALS+9ussOUXHDgQD7DEbFJFovTLrYjN/g6VIJxbpbkELFX0CyVyIoBWhsg0xTxvXlBn8OaSAVh1LYWkv5Oq4FehCszeeRkDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821758; c=relaxed/simple; bh=ixZa0J3TggGThL0sD08+i6gjRQmCMf60YMWcgAVXzZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UAFUBuECBBLVRlRus9NnbQL0QzyS67aIao//pGDy1oQbJGUHoq2Q5+FuYawYHH7k4VC4o4lIzHtHlm7otNQH93gPcrS9Dn8+EVfD1GhWT2UKtVsTadF6Ydc9NxnAF5pqiwpRqZuMrf/EChYW6aq7JCU5Rw5+PWUzarUk/E/j3dY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=d1KuzBE5; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eFJYA6Ul; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="d1KuzBE5"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eFJYA6Ul" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67FGU1Zd1049722 for ; Sat, 15 Aug 2026 19:22:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 1Q8ud0NK10aaZ1KWgBtcRNFs14xYo0XPYZ7w4kihtyI=; b=d1KuzBE5aXeAI24z tGv8EUSYgUNTJw4IRz+KEmClZ5PZ+x2KnrZxTEP1V5XJ4eFSlNLDqhk+DKMapIZB 27xPaBcmd5iU1MiP4fjkIEVfijTIsAXXfeHjMGzZGNSpxRBw79iyGvOXcY7P1vIB aDaMcxrczYSvIxivodNHKGJjKcTbgbGb0AFM8saYZ/j0tQU8+JVH6jkS02mbliQ9 4KZd6y3pQOZJeLVGLbDJKpFY6KaInlK0iTrDfG/eF9tlvu7+St7q4R5vrqbTGgpi RjwxAh+3N4MEcBTzDCEHsKRUzkXJW9XdKi7Ib4XS30MxwXbjSSpGb2IMzmNevRKw vG104w== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g2ghehuqr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 15 Aug 2026 19:22:35 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2ca9da7b6c3so5315255ad.0 for ; Sat, 15 Aug 2026 12:22:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786821754; x=1787426554; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1Q8ud0NK10aaZ1KWgBtcRNFs14xYo0XPYZ7w4kihtyI=; b=eFJYA6UlhrxoI79pfLUb9iJmfHccZbcrK1x7NUBffOC7bIN5g9eG/c+sjIib+iJv0O NtMYEvylXh6FEbwK7oLXRGMe/UAp6siLt7fIhNjKVJxtf/jSlgil69X58kRjMTPRy24D hLAS3HXR5IdzAhqQGO2RYa1a6HK1yS5mA/49ySBOyApJ5GJq2E/pRfuW1ytM10mKqkRN kJGautCD1+Da9NatQYq+0Iz+F9ZcK7e0gNm8HGoN2PiOM6yr4peCdoEEFtcqfLJKmTIo pZOuZCwmoEhpFcOarrgaUjlVkaHFwlbtM5j4kxaDiEfTpZTzvlUXVuuYLnY2OZMfZXHa Do8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786821754; x=1787426554; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1Q8ud0NK10aaZ1KWgBtcRNFs14xYo0XPYZ7w4kihtyI=; b=bhyDAajHCSWrC5/P4Wwjvp0L2AoualSaGdhp8KPOtsvQWk+rOFWl02mfHvMhe382Za wBvzDhqyRvr87hAfLo41GFn+xP9JrffvpmaNEMiBLuhSlOvHyAXP4kFvuTUxKRhFrCMr kxI1Cml3gE3A1M5cAsWUjghJbIWNEURnri1QqvVrhzaxLmv6gz9uAVgu4PlBPczKekRT lqhWJZTfqRhQ0b891uhrweaxsWoF4QA6CBXg/9ZLu/E8QNE4OuCNu6vy2pYyo75j5lGW dme9oZJJ3E2oEoPfEIXXbdbG7sCVyqaYyUaGkAi/SRQsk5TiihUpgWGwsZJINr849h2M WIHw== X-Forwarded-Encrypted: i=1; AHgh+RqyvjlqanvdfonnE/O2FVPdxFLOSGNLqCLuMMMqJbOeD+hEwXyv2xHtyqdpRxy5DZB5ajgy6OmBbHTG2Fg=@vger.kernel.org X-Gm-Message-State: AOJu0YwZUqmi0I5dVekOs6DYua2R9JOonRtaNhqRFRVIgq5x0pic4+FL fBBVWj5tWHb3OiQTO3b35UJzASVSidVDjd+zSYoq+fAAFdtFiDFwE1HPt2AggJFaY+bX9T7eId/ ljqJeVEVwvW8zB+kNv60VoB2lYv5g9fSH/LLDhiJ/vK6Xj53IU2x5JSUhkEvoFgfQliZN4dzLc6 8= X-Gm-Gg: AR+sD10UZlQTZkKOj3QQ992NHTRPPRMWxiKXr8wpkxUjPp053Cf8O9pJ5zo6WSVQRaY 5487+LnfP5X0uFC+t/0ie+qd8OZi/zeM0yotmTX78BBpugylLoBmk/N7o95p68NiGNfhwr6oWdA we+0s52Jp3/G1NC9SBadYwhavgy9Sz0a+HvpEuDLtO24u1c8kEUb2okI3WYfx0F77f1ZN5IJiUI FJFHh4o5rd8SRPPVozbBBm9hv659fd03njRWG0p5VMk/1GLL0zUeA2ArMtbdc5nOC85YxAvohra DQKk3vDF8qAuYABbZzyVQ7FTXxZpaPLjzn7wuFmDCJrVONLoRSBVSTurS9LrYRpAstZGzthUz4E V2pPe5Wnawp2mUjtppgj/mhTgrSVoucFuI3EEa6vbQH+MwQ0gLWcUnJDuFfBY X-Received: by 2002:a17:903:2451:b0:2c9:d298:6c0a with SMTP id d9443c01a7336-2d3b0d7af99mr110827465ad.2.1786821754369; Sat, 15 Aug 2026 12:22:34 -0700 (PDT) X-Received: by 2002:a17:903:2451:b0:2c9:d298:6c0a with SMTP id d9443c01a7336-2d3b0d7af99mr110827045ad.2.1786821753892; Sat, 15 Aug 2026 12:22:33 -0700 (PDT) Received: from gu-dmadival-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d61e1cccsm15889350eec.8.2026.08.15.12.22.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2026 12:22:33 -0700 (PDT) From: Deepa Guthyappa Madivalara Date: Sat, 15 Aug 2026 12:22:26 -0700 Subject: [PATCH v5 3/5] media: iris: Add ROI delta QP control support for HFI Gen2 encoders Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260815-enc_roi_enable-v5-3-ded944f0fc7f@oss.qualcomm.com> References: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> In-Reply-To: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> To: Mauro Carvalho Chehab , Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Deepa Guthyappa Madivalara , kernel test robot X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786821749; l=7540; i=deepa.madivalara@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=ixZa0J3TggGThL0sD08+i6gjRQmCMf60YMWcgAVXzZA=; b=TAY5iiE5FgIMMkz28ntpoij0XL2ClKoeZWciNLis+2fOJyNDOT099bIZ6MoZn4UcGWBunrPpC rHHuN4MMDknAL5SKucqIP+WIYjFapP7/e8glSmmFrGnCkuz6cicq2Yj X-Developer-Key: i=deepa.madivalara@oss.qualcomm.com; a=ed25519; pk=MOEXgyokievn+bgpHdS6Ixh/KQYyS90z2mqIbQ822FQ= X-Authority-Analysis: v=2.4 cv=EKc2FVZC c=1 sm=1 tr=0 ts=6a80bc7b cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=uxVkaJQCnwIzyWVbueAA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX7z7xg0LYuYct YodMrvHJe0nIyswXv/MZuS8XG7ALm+CeM61AOGyRTHTx5vUrmtXmKa7E/4kDek4EQK+PUZir3Om e+pKn2tsMkQcwQR5o8zB1Zl9uiemkMs= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfXyKdiX2CZja79 /tbIQ2QfBmuNF+VPCJPrWnReIhATZM31nUMR/BVXSrnvnZHM/Ny8nwNi+YdimDObt3Axrj0fO68 0OFcJ+HKnlwWv+V3/xA6F1e9Gg7ltt9AJFA5iUbV7zB+BLN9O//ZyodjH06zQoRt1NO7h0wByvn sHm9s2FwYmiV6W/3/pkgzMYcrTBvlVPFVw0t/i5CLlQKL0m87Mh4NbC0cDS8hD3l4ImUP6aBk9i 9tvs9QRwfZHOTlgqYa+zQ6/wxgE78qBl7spCaqvK5JoicV49wvnFXuViHIxWrh7UjRnYGcMIFil eDEJpvnwFpnx/ivXE1fPvew9Z9WiSFz6VCdPgWtaXSWKnywoFbkkZNmtfT5U6YLXUguwoyCVJif AjhWCvZQ8oZhtxfQNd1vEw63NIiDgTwuwFauQiyAkHHY7nxqXrNRQIMysVtKDDq+DM/ZZeIrWog MHM0sMTW8Dp2sxYoB8Q== X-Proofpoint-GUID: MgVWhTiq4a5SD7qMqjerdVdX_mbsGhHE X-Proofpoint-ORIG-GUID: MgVWhTiq4a5SD7qMqjerdVdX_mbsGhHE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-15_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608150146 Add ROI support to the Iris encoder driver for HFI Gen2 based targets. - Add control infrastructure, ROI_PARAMS and MB_SIZE capability IDs to platform_inst_fw_cap_type. Extend struct platform_inst_fw_cap with p_array and elems fields to hold a pointer to the per-frame delta QP array and its element count, set during s_ctrl. - Register V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP as a dynamic S8 array control (max dims =3D 139264 entries, supporting resolution of 8192x4352 at 16x16 MB granularity). Register V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE as a read-only U8 control; g_volatile_ctrl returns 32 for HEVC and 16 for H.264. - Define HFI_PROP_ROI_INFO and hook ROI_PARAMS to iris_set_roi_params(). Signed-off-by: Deepa Guthyappa Madivalara --- drivers/media/platform/qcom/iris/iris_ctrls.c | 70 ++++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 13 ++++ .../platform/qcom/iris/iris_hfi_gen2_defines.h | 1 + .../platform/qcom/iris/iris_platform_common.h | 5 ++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index bf17d310eac081ffd3a4ad4842c2255ad798d4d8..943c9dcaec12b38ad4dd42ff3be= ac13ee0402547 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -156,6 +156,10 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(= u32 id) return LAYER5_BITRATE_HEVC; case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: return REQUEST_SYNC_FRAME; + case V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP: + return ROI_PARAMS; + case V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE: + return MB_SIZE; default: return INST_FW_CAP_MAX; } @@ -301,6 +305,10 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_= type cap_id) return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR; case REQUEST_SYNC_FRAME: return V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME; + case ROI_PARAMS: + return V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP; + case MB_SIZE: + return V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE; default: return 0; } @@ -327,6 +335,14 @@ static int iris_op_s_ctrl(struct v4l2_ctrl *ctrl) =20 inst->fw_caps[cap_id].value =3D ctrl->val; =20 + if (inst->fw_caps[cap_id].flags & CAP_FLAG_CUSTOM) { + if (cap_id =3D=3D ROI_PARAMS) { + inst->fw_caps[cap_id].p_array =3D + (const void *)ctrl->p_new.p; + inst->fw_caps[cap_id].elems =3D ctrl->new_elems; + } + } + if (vb2_is_streaming(q)) { if (cap[cap_id].set) cap[cap_id].set(inst, cap_id); @@ -335,8 +351,52 @@ static int iris_op_s_ctrl(struct v4l2_ctrl *ctrl) return 0; } =20 +static int iris_get_roi_mb_size(struct iris_inst *inst) +{ + return inst->codec =3D=3D V4L2_PIX_FMT_HEVC ? 32 : 16; +} + +static int iris_op_g_ctrl(struct v4l2_ctrl *ctrl) +{ + struct iris_inst *inst =3D container_of(ctrl->handler, struct iris_inst, = ctrl_handler); + enum platform_inst_fw_cap_type cap_id; + + cap_id =3D iris_get_cap_id(ctrl->id); + if (!iris_valid_cap_id(cap_id)) + return -EINVAL; + + if (cap_id =3D=3D MB_SIZE) + ctrl->val =3D iris_get_roi_mb_size(inst); + + return 0; +} + static const struct v4l2_ctrl_ops iris_ctrl_ops =3D { .s_ctrl =3D iris_op_s_ctrl, + .g_volatile_ctrl =3D iris_op_g_ctrl, +}; + +static const struct v4l2_ctrl_config roi_mbqp_cfg =3D { + .ops =3D &iris_ctrl_ops, + .id =3D V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP, + .name =3D "Enc Mb ROI Delta QP", + .type =3D V4L2_CTRL_TYPE_S8, + .dims =3D {139264}, /* Max MBPF =3D 8192 * 4352 / 256 */ + .min =3D -31, + .max =3D 30, + .def =3D 0, + .step =3D 1, +}; + +static const struct v4l2_ctrl_config roi_mbqp_size =3D { + .ops =3D &iris_ctrl_ops, + .id =3D V4L2_CID_MPEG_VIDEO_ROI_MB_SIZE, + .name =3D "ROI Mb size", + .type =3D V4L2_CTRL_TYPE_U8, + .min =3D 16, + .max =3D 32, + .def =3D 16, + .step =3D 1, }; =20 int iris_ctrls_init(struct iris_inst *inst) @@ -361,7 +421,7 @@ int iris_ctrls_init(struct iris_inst *inst) return ret; =20 for (idx =3D 1; idx < INST_FW_CAP_MAX; idx++) { - struct v4l2_ctrl *ctrl; + struct v4l2_ctrl *ctrl =3D NULL; =20 v4l2_id =3D iris_get_v4l2_id(cap[idx].cap_id); if (!v4l2_id) @@ -379,6 +439,13 @@ int iris_ctrls_init(struct iris_inst *inst) cap[idx].max, ~(cap[idx].step_or_mask), cap[idx].value); + } else if (cap[idx].flags & CAP_FLAG_CUSTOM) { + if (cap[idx].cap_id =3D=3D ROI_PARAMS) + ctrl =3D v4l2_ctrl_new_custom(&inst->ctrl_handler, + &roi_mbqp_cfg, NULL); + if (cap[idx].cap_id =3D=3D MB_SIZE) + ctrl =3D v4l2_ctrl_new_custom(&inst->ctrl_handler, + &roi_mbqp_size, NULL); } else { ctrl =3D v4l2_ctrl_new_std(&inst->ctrl_handler, &iris_ctrl_ops, @@ -1540,3 +1607,4 @@ int iris_set_properties(struct iris_inst *inst, u32 p= lane) =20 return 0; } + diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index 3b8fbefb8b93576962abd3850215f7b7fb364930..d628bc6748438b19dac01cd11cb= 9f8da0b8500af 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -1782,6 +1782,19 @@ static const struct platform_inst_fw_cap inst_fw_cap= _sm8550_enc[] =3D { .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, .set =3D iris_set_req_sync_frame, }, + { + .cap_id =3D ROI_PARAMS, + .step_or_mask =3D 1, + .p_array =3D NULL, + .hfi_id =3D HFI_PROP_ROI_INFO, + .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_CUSTOM | + CAP_FLAG_DYNAMIC_ALLOWED, + }, + { + .cap_id =3D MB_SIZE, + .step_or_mask =3D 1, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_CUSTOM, + }, }; =20 static const u32 sm8550_vdec_input_config_params_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index f43aea10090d8f1d6ae5c20547e5f6321b2ca203..08fc1036013de29e51747a6425a= e7bb805ca3e0f 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h @@ -133,6 +133,7 @@ enum hfi_flip { #define HFI_PROP_DEC_START_FROM_RAP_FRAME 0x03000169 #define HFI_PROP_NO_OUTPUT 0x0300016a #define HFI_PROP_BUFFER_MARK 0x0300016c +#define HFI_PROP_ROI_INFO 0x03000173 #define HFI_PROP_WORST_COMPRESSION_RATIO 0x03000174 #define HFI_PROP_WORST_COMPLEXITY_FACTOR 0x03000175 #define HFI_PROP_RAW_RESOLUTION 0x03000178 diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 9748095091461ba13443c63955a42906fa4f050c..9910eb5514b3ae0a6b5349adb07= 1d0a56375102c 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -186,6 +186,8 @@ enum platform_inst_fw_cap_type { LAYER5_BITRATE_HEVC, REQUEST_SYNC_FRAME, TIME_DELTA_BASED_RC, + ROI_PARAMS, + MB_SIZE, INST_FW_CAP_MAX, }; =20 @@ -197,6 +199,7 @@ enum platform_inst_fw_cap_flags { CAP_FLAG_CLIENT_SET =3D BIT(4), CAP_FLAG_BITMASK =3D BIT(5), CAP_FLAG_VOLATILE =3D BIT(6), + CAP_FLAG_CUSTOM =3D BIT(7), }; =20 struct platform_inst_fw_cap { @@ -206,6 +209,8 @@ struct platform_inst_fw_cap { s64 step_or_mask; s64 value; u32 hfi_id; + const void *p_array; + u32 elems; enum platform_inst_fw_cap_flags flags; int (*set)(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id); --=20 2.34.1 From nobody Mon Sep 28 23:12:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 932ED37E5E2 for ; Sat, 15 Aug 2026 19:22:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821766; cv=none; b=QVcVaJwJaD92jfdaMQjJpmsStjMzdu85oTGF+I6gFXT7MlCoAjje6o60aiv3kip5ygsMSTH7Mws1VBZQaFlgUkpWHxeT/ZKoPIjvuXCyWZQ3fI0+QYsaiuwCXPt4HfYszDZ2jRbhfZyjR1uhZ3rbgLpejNzgVGB5uum+gI1yJuE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821766; c=relaxed/simple; bh=cixuTBv/Ja63m0YYUppVG+ac1EEvs9M9rN0+Hywf4i4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s8cQagAF8KxscxavE0fdTBFvMLRXFOuIpdB9peuq/GyIk9YyQNydnmPCQaqKSIF60rmfMc7D0ZuTSNoNOEhvdDhslWKsXWNSoYKYOGPaWiYwXu1IIXuTIoy5ltMiTfrHZRC9jELjZ1RY/rM5j9w/S7/X89K46TGnHFmNlEY8R24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=BQlHvdAk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Tj1UGM9F; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="BQlHvdAk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Tj1UGM9F" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67FHRVqG747707 for ; Sat, 15 Aug 2026 19:22:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ETwABs4QnEi+oqpIcss/EkyzDgP61GHaGLC1IyllQj4=; b=BQlHvdAkzjMMV5kI s0KdQUQjiHVZILNpXaIN22P9LvBqb0L/lWGk4Xcs0Ct7iBv9y2KmurQw9Yb5S0c+ 9x9jxl3t/hUE8rVxoQIXUcojUiFwIILYQ8MbJCl00juWWF02ZcT80ejFsrrDG0+X tWLt2DEdPInrUgYvcF24Nv2vhDL6CZmoxU3PWrdJXfuaL4STAuqUruNUdkUbfuIz ebV6KbaWXHEtYekx7MALRpo7ZTsE3vv7tP0Jqkr6mJXvA6cJhjJXbTA8V1GUi2PZ eoKGICErXDSXdhtDDi9a1vqQ1qZCabeCSfguJ75gS9qXDEwAsz+5jmDDGFmhWr0d 3pABhg== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g2ghf9t7p-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 15 Aug 2026 19:22:37 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2ced1ed870fso5688975ad.2 for ; Sat, 15 Aug 2026 12:22:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786821756; x=1787426556; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ETwABs4QnEi+oqpIcss/EkyzDgP61GHaGLC1IyllQj4=; b=Tj1UGM9FZAWJQKhm/GdvhpwXAh/H4we9pnULGxsJE0dKaRvGMnzWk+wpyDcpUz/1KK ReqhkL6S2FilTv8bFziMKBA8oU1NtNhxGXq5VJTwqgCt5Na7NBqjw4dUztRt4zrPdzV9 cY94ZN0N67Hh68JUm1P1uYjk07O3wdekUQpe8+2x1Dnjs9KXC3tRDQ2e0EgNNi9s0VtK cPtQWLPajNB1HBj2x14f00x7p+aoyrSmzUfuP48ErPk/cVwIj6gZb0t2xis8mq9z9iJV HqMoH6FcPXBGqGaz6KPcSUqzao8zGc9hZ2klnIUMNhEDrD2X7/Egi3yMJpaLO5ZxTUMJ n25w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786821756; x=1787426556; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ETwABs4QnEi+oqpIcss/EkyzDgP61GHaGLC1IyllQj4=; b=Jw760lxUBbvUG82S+C3kww9wZY23RbVqQKZ/xIp4FYqImdlRXgeB/7wmJ3uUjQ/3K1 EEO+LuJQSPSzBKoZjuJN+FOaS+b1RYGtOX9RSMuCulaxI0ycFOX+N0bzHDYgEPxlHN+/ uShZ8FeGzaxeW96T66fdNIRd/9hwy7Tn9Q0VeIXSD/w9wBWowdTeVLSzXTk3nhZeUNL1 EHD0aGT104UMdOOQNbhR9k2NCBRx4M5KuAx/Jo25L5Yo7rCqm5aqyLqS3cw7N1dTMZj0 t8PApAu37eDTNjZadfZks1+uDvyGkcAesXT7N2ks0McUWN82GrJz+rgSnEIFW2YjxdCc iYpw== X-Forwarded-Encrypted: i=1; AHgh+Rr+QgFfJw/EXvomvU5/isaV14jtbl3cUb7vrhH6KSjDh9Nnm5MQkm+AxOaS9wSYAkbtJbaeFBLgD9MAc1U=@vger.kernel.org X-Gm-Message-State: AOJu0Ywhf/kzC7uTv3LcATOhhcgi2CccVf2L5enmpR1+uEu5qfCUyQ9E vJsyh9lhtIiT+Zc1X4xdWb3woJO+v26+I/EeipJ6G4QVBjVi8vf7tupjcIljbv7heK0SL5XnO6q CtVsYv5h3etctmRMaCnWMh75uyJz++tJDaL3oMXkvzObOn+ZVe9YcBE9FRINKQwIoi5I= X-Gm-Gg: AR+sD12Ye2uGs/isJ4VOrev759MXXcAueIazNZpDqOSlnZvK55NTy3US1MuyAq2WFSm oBFRZNYUhnigRyNIPzLzeFKXQ5k1iTPRw5o0Ch1lf5PreBfebdQm1ku8QGspchfU8FQTx5ND6rJ UH/nymZN0ZE6uPa4dt9go5vjoGe7byRPWtmZeJoBYxGMqa6g6me/sKzIGIQ8n905yth0U1JODun iNS/3XfLFxcDWOFXvsU4hD83Rl7QKdiYmzXNvgp+kLXLDh1NXtWzHlygIWboX6MEVMmsE2v2Ehv LdDObUOgKLjG4Dc457HxWyWGVAIy82PbLwVb4/4KgLO1Mis3Q9t87C8Ld9UwwDipm+WoCYHYA+8 mM7IP4iv7Vh0QZKz+j9q2MvhkGuguBmDimJCqJLy+pIe4NcINi6+Rbj8wssyR X-Received: by 2002:a17:903:3c63:b0:2ca:ecf6:9115 with SMTP id d9443c01a7336-2d3b0c57980mr122882775ad.2.1786821756142; Sat, 15 Aug 2026 12:22:36 -0700 (PDT) X-Received: by 2002:a17:903:3c63:b0:2ca:ecf6:9115 with SMTP id d9443c01a7336-2d3b0c57980mr122882445ad.2.1786821755606; Sat, 15 Aug 2026 12:22:35 -0700 (PDT) Received: from gu-dmadival-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d61e1cccsm15889350eec.8.2026.08.15.12.22.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2026 12:22:34 -0700 (PDT) From: Deepa Guthyappa Madivalara Date: Sat, 15 Aug 2026 12:22:27 -0700 Subject: [PATCH v5 4/5] media: iris: Add HFI metadata buffer delivery support for Gen2 encoders Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260815-enc_roi_enable-v5-4-ded944f0fc7f@oss.qualcomm.com> References: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> In-Reply-To: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> To: Mauro Carvalho Chehab , Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Deepa Guthyappa Madivalara , kernel test robot X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786821750; l=13942; i=deepa.madivalara@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=cixuTBv/Ja63m0YYUppVG+ac1EEvs9M9rN0+Hywf4i4=; b=PNeMXS9Rhi8BMCr+tX65wIDZt0dNC/zh3s9KOqkJd1e3V+vDRKuVLyhZRsKnUlYP/8SQn76tN WxvoX8uQE4xCvYlRkJZJ1g4msqnxdXCXps/USdnVxd1g+KVIs5jLvfZ X-Developer-Key: i=deepa.madivalara@oss.qualcomm.com; a=ed25519; pk=MOEXgyokievn+bgpHdS6Ixh/KQYyS90z2mqIbQ822FQ= X-Proofpoint-Spam-Info: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX7soiohj/O+QK 78upf8DaSciM+8ZIV0EkFUJDHIjKlnxjxHiM/Kd6yaBwdSm4qh12tuRgw7UGb1Fc4ytkwKriMuX 4nHud/0+YARUr1nJpE2PSltsaJ/lLAA= X-Proofpoint-ORIG-GUID: UgvQY3HJd9DEQfBADW4QPcOiuxcMn_Hw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX/kjDnzsQaOQw aH07nDXmFHNFDb2etFuRd0Ypl7HxkdOIpq7sRWsXWKAI0gHsruLwWVc7vxKHge9DfDgmvDAIg8R 5Rns6/e0VOrgbfCtMb3wy2CyqPv/nABNZV2TAIgV80xJoyajXZKw+4QYHo/cfGbvcWaTx03725n b6HISTmNHj10HEP2Us1xJs+ZmwvVfNemuFWri165ZeUWfR5SebS3ZnSL3tSOx6odUa+kVlivgrB uv11VW0pwPbEBnDX4VnW41m6hKuPsm1/1dajYSCBZIrQCS3WwG5bveESkQIXqoG5zMLKd9lM9Lo E0cTviqWyTo9qUIlV3TkNOHcIHtKXK/R30jPBbraJ465I31AXLnrNQyy0tCyqAxw6eER4xrT91W +9nIqivPbMjxDNv25dqOsvsHm1228Q0/FvX1SPtyPfr518qrx7oCv+JHx3/TUiX6OPdf/h7ltqm Y1kKmSix87+7Aeq3M6Q== X-Proofpoint-GUID: UgvQY3HJd9DEQfBADW4QPcOiuxcMn_Hw X-Authority-Analysis: v=2.4 cv=I/dVgtgg c=1 sm=1 tr=0 ts=6a80bc7d cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=yINVFQBVTkO1MKE-7SUA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-15_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 malwarescore=0 adultscore=0 clxscore=1015 suspectscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608150146 Add the infrastructure to deliver metadata buffers to the HFI firmware on HFI Gen2 based encoders, used to carry per-frame ROI delta QP data. Metadata buffer structures (iris_buffer.h): - Add metabuf_header and metapayload_header structs describing the metadata buffer layout as expected by the firmware. HFI defines (iris_hfi_gen2_defines.h): - Add HFI_CMD_DELIVERY_MODE (0x0100000A). - Add HFI_MODE_METADATA (0x00000004) to hfi_property_mode_type. HFI command side (iris_hfi_gen2_command.c): - In iris_hfi_gen2_session_queue_buffer(), after queuing a RAW (input) buffer, check for an available BUF_ROIMB_DELTAQP metadata buffer and, if found, append a second HFI_CMD_BUFFER packet for the metadata buffer in the same command, tagged with the same buffer index. - Add iris_hfi_gen2_subscribe_metadata_delivery(): sends HFI_CMD_DELIVERY_MODE with HFI_MODE_METADATA and HFI_PROP_ROI_INFO to instruct the firmware to expect metadata on the input port. HFI response side (iris_hfi_gen2_response.c): - Add iris_hfi_gen2_handle_output_metadata_buffer(): locate the metadata buffer by device address and transition it from QUEUED to DEQUEUED so it can be reused. Signed-off-by: Deepa Guthyappa Madivalara --- drivers/media/platform/qcom/iris/iris_buffer.h | 18 ++++++++++ drivers/media/platform/qcom/iris/iris_ctrls.c | 15 +++++++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 1 + drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen2_command.c | 39 ++++++++++++++++++= ++++ .../platform/qcom/iris/iris_hfi_gen2_defines.h | 2 ++ .../platform/qcom/iris/iris_hfi_gen2_packet.c | 6 ++-- .../platform/qcom/iris/iris_hfi_gen2_packet.h | 3 ++ .../platform/qcom/iris/iris_hfi_gen2_response.c | 27 +++++++++++++++ drivers/media/platform/qcom/iris/iris_venc.c | 4 +++ drivers/media/platform/qcom/iris/iris_venc.h | 2 ++ 11 files changed, 115 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_buffer.h b/drivers/media= /platform/qcom/iris/iris_buffer.h index ab8e5d953101a786ade20540ee3c3ed226160cbe..ee2d24bb69c57220b0a735d9b4a= ae4434a33daf6 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.h +++ b/drivers/media/platform/qcom/iris/iris_buffer.h @@ -107,6 +107,24 @@ struct iris_buffers { u32 size; }; =20 +/* Metadata buffer header */ +struct metabuf_header { + u32 count; + u32 size; + u32 version; + u32 reserved[5]; +}; + +/* Metadata buffer payload header */ +struct metapayload_header { + u32 type; + u32 size; + u32 version; + u32 offset; + u32 flags; + u32 reserved[3]; +}; + int iris_get_buffer_size(struct iris_inst *inst, enum iris_buffer_type buf= fer_type); void iris_get_internal_buffers(struct iris_inst *inst, u32 plane); int iris_create_internal_buffers(struct iris_inst *inst, u32 plane); diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index 943c9dcaec12b38ad4dd42ff3beac13ee0402547..e6838e67cbfcd4b9baf53c008e3= 3999e31f2ed76 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -1608,3 +1608,18 @@ int iris_set_properties(struct iris_inst *inst, u32 = plane) return 0; } =20 +int iris_set_metadata_delivery(struct iris_inst *inst, u32 plane) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + int ret =3D 0; + + /*subscribe to metadata delivery only if ROI is enabled */ + if (!inst->fw_caps[ROI_PARAMS].p_array) + return ret; + + ret =3D hfi_ops->session_subscribe_metadata_delivery(inst, plane); + if (ret) + return ret; + + return ret; +} diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index 5180d53d3c904cad460b2760913b475d0ff1bb55..9957b69366f50310338a0c1470d= 9744592655c33 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -50,5 +50,6 @@ int iris_set_layer_bitrate(struct iris_inst *inst, enum p= latform_inst_fw_cap_typ int iris_set_req_sync_frame(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); int iris_set_time_delta_based_rc(struct iris_inst *inst, enum platform_ins= t_fw_cap_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); +int iris_set_metadata_delivery(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_common.h b/drivers/m= edia/platform/qcom/iris/iris_hfi_common.h index a27447eb2519962cb958b0e330a6d018310c3450..5692375cdd357f9b00760053fff= f5af4bd9cce9c 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_common.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_common.h @@ -131,6 +131,7 @@ struct iris_hfi_session_ops { int (*session_drain)(struct iris_inst *inst, u32 plane); int (*session_resume_drain)(struct iris_inst *inst, u32 plane); int (*session_close)(struct iris_inst *inst); + int (*session_subscribe_metadata_delivery)(struct iris_inst *inst, u32 pl= ane); }; =20 struct hfi_subscription_params { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_command.c index 388a36ff2b07b7bcd8db21d4345bc900356b4ec3..cf88dbe11e8e9faef826e661d8e= 9909fd7f16b94 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -1307,6 +1307,24 @@ static void iris_hfi_gen2_get_buffer(u32 domain, str= uct iris_buffer *buffer, buf->timestamp =3D buffer->timestamp; } =20 +static struct iris_buffer *iris_queue_metadata_buffers(struct iris_inst *i= nst, + enum iris_buffer_type buffer_type, u32 index) +{ + struct iris_buffers *buffers =3D &inst->buffers[buffer_type]; + struct iris_buffer *buffer =3D NULL; + + if (list_empty(&buffers->list)) + return NULL; + + buffer =3D list_first_entry(&buffers->list, typeof(*buffer), list); + if ((buffer->attr & BUF_ATTR_QUEUED) || (buffer->attr & BUF_ATTR_DEQUEUED= )) + return NULL; + + buffer->index =3D index; + + return buffer; +} + static int iris_hfi_gen2_session_queue_buffer(struct iris_inst *inst, stru= ct iris_buffer *buffer) { struct iris_inst_hfi_gen2 *inst_hfi_gen2 =3D to_iris_inst_hfi_gen2(inst); @@ -1359,6 +1377,26 @@ static int iris_hfi_gen2_session_release_buffer(stru= ct iris_inst *inst, struct i inst_hfi_gen2->packet->size); } =20 +static int iris_hfi_gen2_subscribe_metadata_delivery(struct iris_inst *ins= t, u32 plane) +{ + struct iris_inst_hfi_gen2 *inst_hfi_gen2 =3D to_iris_inst_hfi_gen2(inst); + u32 port =3D iris_hfi_gen2_get_port(inst, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLA= NE); + u32 payload[2] =3D {HFI_MODE_METADATA, HFI_PROP_ROI_INFO}; + + iris_hfi_gen2_packet_session_command(inst, + HFI_CMD_DELIVERY_MODE, + (HFI_HOST_FLAGS_RESPONSE_REQUIRED | + HFI_HOST_FLAGS_INTR_REQUIRED), + port, + inst->session_id, + HFI_PAYLOAD_U32_ARRAY, + &payload, + sizeof(u32) * 2); + + return iris_hfi_queue_cmd_write(inst->core, inst_hfi_gen2->packet, + inst_hfi_gen2->packet->size); +} + static const struct iris_hfi_session_ops iris_hfi_gen2_session_ops =3D { .session_open =3D iris_hfi_gen2_session_open, .session_set_config_params =3D iris_hfi_gen2_session_set_config_params, @@ -1372,6 +1410,7 @@ static const struct iris_hfi_session_ops iris_hfi_gen= 2_session_ops =3D { .session_drain =3D iris_hfi_gen2_session_drain, .session_resume_drain =3D iris_hfi_gen2_session_resume_drain, .session_close =3D iris_hfi_gen2_session_close, + .session_subscribe_metadata_delivery =3D iris_hfi_gen2_subscribe_metadata= _delivery, }; =20 static struct iris_inst *iris_hfi_gen2_get_instance(void) diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index 08fc1036013de29e51747a6425ae7bb805ca3e0f..d0661f5fe6a6f39295dad8950ed= b2f1a85893216 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h @@ -20,6 +20,7 @@ #define HFI_CMD_DRAIN 0x01000007 #define HFI_CMD_RESUME 0x01000008 #define HFI_CMD_BUFFER 0x01000009 +#define HFI_CMD_DELIVERY_MODE 0x0100000A #define HFI_CMD_SUBSCRIBE_MODE 0x0100000B #define HFI_CMD_SETTINGS_CHANGE 0x0100000C #define HFI_CMD_PAUSE 0x01000011 @@ -175,6 +176,7 @@ enum hfi_flip { enum hfi_property_mode_type { HFI_MODE_PORT_SETTINGS_CHANGE =3D 0x00000001, HFI_MODE_PROPERTY =3D 0x00000002, + HFI_MODE_METADATA =3D 0x00000004, }; =20 enum hfi_color_format { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.c b/driv= ers/media/platform/qcom/iris/iris_hfi_gen2_packet.c index 0d05dd2afc07d830cc8502ab5f28001312991ba8..aeb0426a05694f219f82145cd84= a28287ed3075e 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.c @@ -100,9 +100,9 @@ static void iris_hfi_gen2_create_header(struct iris_hfi= _header *hdr, hdr->num_packets =3D 0; } =20 -static void iris_hfi_gen2_create_packet(struct iris_hfi_header *hdr, u32 p= kt_type, - u32 pkt_flags, u32 payload_type, u32 port, - u32 packet_id, void *payload, u32 payload_size) +void iris_hfi_gen2_create_packet(struct iris_hfi_header *hdr, u32 pkt_type, + u32 pkt_flags, u32 payload_type, u32 port, + u32 packet_id, void *payload, u32 payload_size) { struct iris_hfi_packet *pkt =3D (struct iris_hfi_packet *)((u8 *)hdr + hd= r->size); u32 pkt_size =3D sizeof(*pkt) + payload_size; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.h b/driv= ers/media/platform/qcom/iris/iris_hfi_gen2_packet.h index 25b9582349ca1a0ce6efc0b146a3abb798485c45..613eb500609f745daebdcbdf9a2= 5b85cb9465a79 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_packet.h @@ -121,5 +121,8 @@ void iris_hfi_gen2_packet_session_property(struct iris_= inst *inst, void iris_hfi_gen2_packet_sys_interframe_powercollapse(struct iris_core *c= ore, struct iris_hfi_header *hdr); void iris_hfi_gen2_packet_sys_pc_prep(struct iris_core *core, struct iris_= hfi_header *hdr); +void iris_hfi_gen2_create_packet(struct iris_hfi_header *hdr, u32 pkt_type, + u32 pkt_flags, u32 payload_type, u32 port, + u32 packet_id, void *payload, u32 payload_size); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/dr= ivers/media/platform/qcom/iris/iris_hfi_gen2_response.c index 8c2644c7f6e85983d7ad7584fc0cb570e4813ae4..84b629b957442c024dccc18b354= ac9a7e541abaa 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c @@ -77,6 +77,7 @@ static bool iris_hfi_gen2_is_valid_hfi_buffer_type(u32 bu= ffer_type) case HFI_BUFFER_PERSIST: case HFI_BUFFER_VPSS: case HFI_BUFFER_PARTIAL_DATA: + case HFI_BUFFER_METADATA: return true; default: return false; @@ -452,6 +453,30 @@ static int iris_hfi_gen2_handle_release_internal_buffe= r(struct iris_inst *inst, return 0; } =20 +static int iris_hfi_gen2_handle_output_metadata_buffer(struct iris_inst *i= nst, + struct iris_hfi_buffer *buffer) +{ + u32 buf_type =3D iris_hfi_gen2_buf_type_to_driver(inst, HFI_BUFFER_METADA= TA); + struct iris_buffers *buffers =3D &inst->buffers[buf_type]; + struct iris_buffer *buf, *iter; + bool found =3D false; + + list_for_each_entry(iter, &buffers->list, list) { + if (iter->device_addr =3D=3D buffer->base_address) { + found =3D true; + buf =3D iter; + break; + } + } + if (!found) + return -EINVAL; + + buf->attr &=3D ~BUF_ATTR_QUEUED; + buf->attr |=3D BUF_ATTR_DEQUEUED; + + return 0; +} + static int iris_hfi_gen2_handle_session_stop(struct iris_inst *inst, struct iris_hfi_packet *pkt) { @@ -499,6 +524,8 @@ static int iris_hfi_gen2_handle_session_buffer(struct i= ris_inst *inst, return iris_hfi_gen2_handle_input_buffer(inst, buffer); else if (buffer->type =3D=3D HFI_BUFFER_BITSTREAM) return iris_hfi_gen2_handle_output_buffer(inst, buffer); + else if (buffer->type =3D=3D HFI_BUFFER_METADATA) + return iris_hfi_gen2_handle_output_metadata_buffer(inst, buffer); else return iris_hfi_gen2_handle_release_internal_buffer(inst, buffer); } diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/p= latform/qcom/iris/iris_venc.c index a945992f63aa8a0c40b8d6bc473d0bc90270e6cd..21ba9639d17b2c64e8fa33b4aac= bd1946fc4dae2 100644 --- a/drivers/media/platform/qcom/iris/iris_venc.c +++ b/drivers/media/platform/qcom/iris/iris_venc.c @@ -498,6 +498,10 @@ int iris_venc_streamon_output(struct iris_inst *inst) if (ret) goto error; =20 + ret =3D iris_set_metadata_delivery(inst, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLA= NE); + if (ret) + goto error; + ret =3D iris_alloc_and_queue_persist_bufs(inst, BUF_ARP); if (ret) return ret; diff --git a/drivers/media/platform/qcom/iris/iris_venc.h b/drivers/media/p= latform/qcom/iris/iris_venc.h index 00c1716b2747c7e840c2a3317800d83663744bf0..df97011636740be6cdfe5867f27= 3c5f93408f570 100644 --- a/drivers/media/platform/qcom/iris/iris_venc.h +++ b/drivers/media/platform/qcom/iris/iris_venc.h @@ -22,5 +22,7 @@ int iris_venc_streamon_output(struct iris_inst *inst); int iris_venc_qbuf(struct iris_inst *inst, struct vb2_v4l2_buffer *vbuf); int iris_venc_start_cmd(struct iris_inst *inst); int iris_venc_stop_cmd(struct iris_inst *inst); +struct iris_buffer *iris_queue_metadata_buffers(struct iris_inst *inst, + enum iris_buffer_type buffer_type, u32 index); =20 #endif --=20 2.34.1 From nobody Mon Sep 28 23:12:45 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B472F3264CB for ; Sat, 15 Aug 2026 19:22:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821766; cv=none; b=Ru6K9Zsz+XiYYjfXmxPZy3RABjMSFU6ls1gHYNVEbWan/B9nubDvMM6VsezO5ZyOkkWFKPtydmM0gyWYL13OmS3DdYDsDz20v9cMTDbsfvn6SWE2sDrA3PNOZ6DgpXJ5JoqG3EPCeGZHYbFWtuSiKlQ2KbkwysFlHvz8aTkMgEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786821766; c=relaxed/simple; bh=XnTtuJ1JAiWjpss/pyoO+q5CX3dB2Y8zaDNeQKgpRko=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cymhj0Dlw2XeC7Y6J9S1+VyeFv3wxBJuvucDKRat3s33w4FclSew32dAScErqEUmoWtF4uG33i0v1zfDhWD8iC3H3Nhr1sHklIsQWOFlXuJRWNhmL7xoAgSbccGnOfAGktqdQ+htB09LACp6X6Qc4gs8kRuInolW9n/3gXZATJA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=B0f1vgOH; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZL3CuhP3; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="B0f1vgOH"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZL3CuhP3" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67FGT0fB1044850 for ; Sat, 15 Aug 2026 19:22:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= aejAWTZQGMCUNU/vOXOAf0fZ9MM/qgsuEKwucqN4Dbk=; b=B0f1vgOHNGOctFIY ZgSSw76prsQmb6pjB0cvzL/H44R5RJqosmhKlJI7wwFOBXW9NxztL/YieRgu8m+J xV/hLVHF53BwjkLMP/s4KiIA0CHHrztR4xKuHgU77TpgRwPvimOtsCbsy/JrARL+ aq+ny2nCqlqj+ZhJQfs0r/oJeEimYOhA6rcsW8xyDP0Z/N6Bz61gYln7DcluH/PB nfIlKK8Vpa/f7VEYLgnPszguZ/vYEGBhie+ZOlJ56yaSwRvrDv2oxRFkzY9q9fd5 kXuZR634m3i8e7GVwurya/fiHlo1olioe3Glw20VL2ya7R111M1m6B0J+m7ZoOHD x/PPLA== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g2ghehuqx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 15 Aug 2026 19:22:38 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cf2308ef97so3093035ad.0 for ; Sat, 15 Aug 2026 12:22:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1786821757; x=1787426557; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aejAWTZQGMCUNU/vOXOAf0fZ9MM/qgsuEKwucqN4Dbk=; b=ZL3CuhP3TkZ65XHwRreR0/7nqeQiimySL6lXE6jd6WjGVar/ffZyILTqH6uuCmnAmx 6keMW6Z9ShvdN/FPvCc+GmMta6D34wZH5MvvyQMa4G5pHNXuXC+CNnaoY6BoN/ajYYjS /2XamFcrQVMp8x2PJlZnF6lerIbmu7i7oWDsb9A5hHdt6vK8zA7grIqB4Xjn1STm7sGW kTSQ4PEG1V4CFL8dmpwErWL9k4z1SIcG7Jdflpu2aPo0sgKIsy/L7OXuhK0BFApymvtD eDWdaFmHeDrXdYahPrPmgIpbAtci8U9jHBQjnooyCbntKaT2NvR8eHlekrfDqGg8uNrT bjaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786821757; x=1787426557; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=aejAWTZQGMCUNU/vOXOAf0fZ9MM/qgsuEKwucqN4Dbk=; b=ENfN7mveHfc0iiOVsHErCJCMuCotBVbc7IdlZcwaZY7xuWEQnEDpoXJ+eNR1Q+bhwe Z0e9/pdArDtlm+udqHUKY5l8pkyQFkZRfkSB1E7vDB8l5JF7wHkEEiyiHBA/vqe75TK+ pLTv89ovJThXy+N0ui1eOFfKnsi7ng3DLPSPJaHtxSvx9tEbIXObcP1BptNIozgXcAte TllUjc4AEAQDehRs8wQPYSSSibsR8qWViiXy3CyHRq6I92bme1cHYwf6reLfNgVcOUi+ FFSvNEkoZMs1nqm5ur5f/mCx8OnsKR+yTa0TycurZ1eSNiHBOTe/AjnqJ3UfcttesQHT QmoA== X-Forwarded-Encrypted: i=1; AHgh+Rri+TyX9gsh2w34NUbZ91+DPm2h48IgjryjqoaVP4xS78xvz3wYIb8ixfXz4pP/oMmYag7xfMDTJV1Lfts=@vger.kernel.org X-Gm-Message-State: AOJu0YyFa4fSpi1yvNGTXCestgjydK4YcsZ2ZQCRLu8mYxxR0loDZ84K gKp5zPKRyof/6Z3lUkVA6pkmghE487zx3JHMMQx098iNgtpJgbJUAEt9RoqhbuuaPOGf16w+mUK kdMMMDvA7GKtfZF4xUbpYEhvk0GkRYXt4Iyndz+V6t4d9tpQ7kUCtyviZYhwsjo6cZZw= X-Gm-Gg: AR+sD10/O52ObbAxMfgRQNOA/WGhbRG2vaCQ8AwUuP/PuSWezgRN5G0aeCIAHj+Z4aJ 3fE9XVAZe1CgjP/vY0xwYwWCvDA/lt0mnyB1h2q/j9vA1CZmMNROYlsEpeXEfTXcGG7TOyY0qzc MFl4P8v/V802UPlk1D6QDoU63d0ClgkkLb+iuMexGCtjpmEUUgFKvvthTDdhGivktSdzYBxj5he Tagl44t+raPnaBi8F9wgg2k3AXL/BNEAQESzPOw/qsN24Jy7ziYTidj0Vssw0z9+7w9EERViNSO iL0sVFpBED8tTXgGZzmAColfL74am5XI5pGhvKnKR1R/NV4BFR9mqiGO1sntkflvvFknffjS6+M 7L/F07KCRDtznpciAb3AGLtIJLkUV4/TDJ6vDNWiJgdNXYwVOWP9brYsj8LeN X-Received: by 2002:a05:6a20:729e:b0:3c3:8f7a:c0a2 with SMTP id adf61e73a8af0-3cc71d4b7fdmr11154838637.4.1786821757409; Sat, 15 Aug 2026 12:22:37 -0700 (PDT) X-Received: by 2002:a05:6a20:729e:b0:3c3:8f7a:c0a2 with SMTP id adf61e73a8af0-3cc71d4b7fdmr11154816637.4.1786821756904; Sat, 15 Aug 2026 12:22:36 -0700 (PDT) Received: from gu-dmadival-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d61e1cccsm15889350eec.8.2026.08.15.12.22.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Aug 2026 12:22:36 -0700 (PDT) From: Deepa Guthyappa Madivalara Date: Sat, 15 Aug 2026 12:22:28 -0700 Subject: [PATCH v5 5/5] media: iris: Add BUF_ROIMB_DELTAQP metadata buffer for ROI delta QP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260815-enc_roi_enable-v5-5-ded944f0fc7f@oss.qualcomm.com> References: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> In-Reply-To: <20260815-enc_roi_enable-v5-0-ded944f0fc7f@oss.qualcomm.com> To: Mauro Carvalho Chehab , Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Deepa Guthyappa Madivalara , kernel test robot X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786821750; l=12592; i=deepa.madivalara@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=XnTtuJ1JAiWjpss/pyoO+q5CX3dB2Y8zaDNeQKgpRko=; b=cmdEJ+67ViKe2MS82nFXIzTRxMrYGcplPBDlTCvyNoN41bDDLHxF8CSoxGxI3UfQGRObeexRX r/oAcHMfwt0AUjjfVfedZbdauaNzlWjMMHbLw61yMG31cQvqg3gKXzx X-Developer-Key: i=deepa.madivalara@oss.qualcomm.com; a=ed25519; pk=MOEXgyokievn+bgpHdS6Ixh/KQYyS90z2mqIbQ822FQ= X-Authority-Analysis: v=2.4 cv=EKc2FVZC c=1 sm=1 tr=0 ts=6a80bc7e cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=Vdc_kfWn7EEFBlVKJCUA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX9rOkXCREkfDe /EzyA5xC4eGVsQ9sbQM6PF4gIYYa5EOEAl9thk9rwsMRYTcF3KgF19p+zJ4MNjSvnoscnbEtN6b UGkdq0BwnFmo8nzEAjQ4sKc4Z7i1VvM= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE1MDE0NiBTYWx0ZWRfX5ArMow3WUOO2 Rs9EhuHgQ75f7B2zj/Z7+GCyu5/GS8pkMrqgd80tmhosCEYAkINDnPvTPustfEEYNcYBjUsf5lp TobwABraVQmbXe11r7XcrGGxeb3u+rsmqAyBCrJPdbcYGDHCNEdz0hVX8JsQta/fl3XdnF9T9PH ora3IReCP7POUrbnZGHODQu/fZFymWLaBz6JAfQFhKEJfSbOMFWvczKU73iL3bTPLYR7N97Ec8P T5wOBEDSMpTeK4MK0HbBwyA8Bw5vjDDUDvMsGjpAWiyrr2HrwNKgYw8e3LmsJNZ9zXd4L1BJMJr JAwCv8nuNh6BepiKbKKYYREEp0vsJNFoEhquSlB2iutSUIeLedGM2HSWGbip6XtMYzqcHMxrr9m 8dnn7FKL0Af0/F/MYpfnSNdNtwKX0vAc6BM0mjwDrJ4TZjkDNAjIXMWX+q5phuD1899G9Z/Sds+ uqzodjZBe/yLdUTcoUg== X-Proofpoint-GUID: wkCLkSZdNOKtHMTL6rbZhvwYjXmqILII X-Proofpoint-ORIG-GUID: wkCLkSZdNOKtHMTL6rbZhvwYjXmqILII X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-15_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608150146 - Introduce BUF_ROIMB_DELTAQP as a new internal buffer type to carry per-macroblock ROI delta QP data to the firmware. This buffer is allocated on demand when the application sets ROI parameters via V4L2_CID_MPEG_VIDEO_ROI_MB_DELTA_QP, and is queued alongside each raw input buffer as an HFI_BUFFER_METADATA packet on HFI_PORT_RAW. - The metadata buffer layout follows the firmware-defined metabuf_header and metapayload_header structures. The s8 per-MB delta QP values supplied by userspace are widened to s16 as required by the firmware. Signed-off-by: Deepa Guthyappa Madivalara --- drivers/media/platform/qcom/iris/iris_buffer.c | 98 ++++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_buffer.h | 4 + drivers/media/platform/qcom/iris/iris_ctrls.c | 19 +++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 1 + drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 1 + .../platform/qcom/iris/iris_hfi_gen2_command.c | 24 ++++++ .../platform/qcom/iris/iris_hfi_gen2_response.c | 2 + drivers/media/platform/qcom/iris/iris_vidc.c | 2 + 8 files changed, 151 insertions(+) diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media= /platform/qcom/iris/iris_buffer.c index eb8de60c1177f5e1ab83b90a3c8c80e0b4d1f02e..e7283a5054f685741bb55d5545a= 6c11188861b5d 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -5,11 +5,13 @@ =20 #include #include +#include =20 #include "iris_buffer.h" #include "iris_instance.h" #include "iris_power.h" #include "iris_vpu_buffer.h" +#include "iris_hfi_gen2_defines.h" =20 #define PIXELS_4K 4096 #define MAX_WIDTH 4096 @@ -705,6 +707,19 @@ int iris_destroy_dequeued_internal_buffers(struct iris= _inst *inst, u32 plane) return iris_destroy_internal_buffers(inst, plane, false); } =20 +int iris_destroy_roi_metadata_buffers(struct iris_inst *inst) +{ + struct iris_buffer *buf, *next; + struct iris_buffers *buffers; + + if (inst->domain =3D=3D ENCODER) { + buffers =3D &inst->buffers[BUF_ROIMB_DELTAQP]; + list_for_each_entry_safe(buf, next, &buffers->list, list) + iris_destroy_internal_buffer(inst, buf); + } + + return 0; +} static int iris_release_internal_buffers(struct iris_inst *inst, enum iris_buffer_type buffer_type) { @@ -928,3 +943,86 @@ int iris_vb2_buffer_done(struct iris_inst *inst, struc= t iris_buffer *buf) =20 return 0; } + +static int iris_fill_roi_data(struct iris_inst *inst, struct iris_buffer *= buffer) +{ + s8 *p_array =3D (s8 *)inst->fw_caps[ROI_PARAMS].p_array; + u32 array_size =3D inst->fw_caps[ROI_PARAMS].elems; + struct metabuf_header *mbuf_hdr =3D buffer->kvaddr; + struct metapayload_header *mbuf_payload_hdr; + s16 *p_16; + u32 payload_offset; + + memset(mbuf_hdr, 0, sizeof(struct metabuf_header)); + mbuf_hdr->count =3D 1; + mbuf_hdr->size =3D sizeof(struct metabuf_header) + + sizeof(struct metapayload_header); + mbuf_hdr->version =3D BIT(16); + mbuf_hdr++; + mbuf_payload_hdr =3D (struct metapayload_header *)(mbuf_hdr); + payload_offset =3D sizeof(struct metabuf_header) + + sizeof(struct metapayload_header); + + memset(mbuf_payload_hdr, 0, sizeof(struct metapayload_header)); + mbuf_payload_hdr->type =3D HFI_PROP_ROI_INFO; + mbuf_payload_hdr->size =3D array_size * sizeof(s16); + mbuf_payload_hdr->version =3D 1 << 16; + mbuf_payload_hdr->offset =3D ALIGN(payload_offset, (u32)256); + mbuf_payload_hdr->flags =3D 0; + + /* Firmware expects 2bytes of delta_Qp, int16_t */ + p_16 =3D buffer->kvaddr + mbuf_payload_hdr->offset; + for (int i =3D 0; i < array_size; i++) + p_16[i] =3D p_array[i]; + + return 0; +} + +int iris_hfi_gen2_session_alloc_roi_metadata_buffer(struct iris_inst *inst) +{ + struct iris_buffers *buffers =3D &inst->buffers[BUF_ROIMB_DELTAQP]; + struct iris_core *core =3D inst->core; + struct iris_buffer *buffer, *first_buffer, *next; + bool found =3D false; + int ret =3D 0; + + if (!buffers->size) + return 0; + + list_for_each_entry_safe(buffer, next, &buffers->list, list) { + if (buffer->attr & BUF_ATTR_DEQUEUED) { + buffer->attr &=3D ~BUF_ATTR_DEQUEUED; + list_move(&buffer->list, &buffers->list); + found =3D true; + break; + } + } + if (!found) { + buffer =3D kzalloc_obj(*buffer); + if (!buffer) + return -ENOMEM; + + INIT_LIST_HEAD(&buffer->list); + buffer->type =3D BUF_ROIMB_DELTAQP; + buffer->index++; + buffer->buffer_size =3D buffers->size; + buffer->dma_attrs =3D DMA_ATTR_WRITE_COMBINE; + + buffer->kvaddr =3D dma_alloc_attrs(core->dev, buffer->buffer_size, + &buffer->device_addr, GFP_KERNEL, + buffer->dma_attrs); + + if (!buffer->kvaddr) { + kfree(buffer); + return -ENOMEM; + } + list_add(&buffer->list, &buffers->list); + } + + first_buffer =3D list_first_entry(&buffers->list, struct iris_buffer, lis= t); + ret =3D iris_fill_roi_data(inst, first_buffer); + if (ret) + return ret; + + return ret; +} diff --git a/drivers/media/platform/qcom/iris/iris_buffer.h b/drivers/media= /platform/qcom/iris/iris_buffer.h index ee2d24bb69c57220b0a735d9b4aae4434a33daf6..df9d018493f3ec37fd5e6b0ba04= 9dba0b5ae76e9 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.h +++ b/drivers/media/platform/qcom/iris/iris_buffer.h @@ -28,6 +28,7 @@ struct iris_inst; * @BUF_SCRATCH_2: buffer to store encoding context data for HW * @BUF_VPSS: buffer to store VPSS context data for HW * @BUF_PARTIAL: buffer for AV1 IBC data + * @BUF_ROIMB_DELTAQP: metadata buffer for ROI MB DeltaQp * @BUF_TYPE_MAX: max buffer types */ enum iris_buffer_type { @@ -44,6 +45,7 @@ enum iris_buffer_type { BUF_SCRATCH_2, BUF_VPSS, BUF_PARTIAL, + BUF_ROIMB_DELTAQP, BUF_TYPE_MAX, }; =20 @@ -139,5 +141,7 @@ int iris_queue_buffer(struct iris_inst *inst, struct ir= is_buffer *buf); int iris_queue_deferred_buffers(struct iris_inst *inst, enum iris_buffer_t= ype buf_type); int iris_vb2_buffer_done(struct iris_inst *inst, struct iris_buffer *buf); void iris_vb2_queue_error(struct iris_inst *inst); +int iris_hfi_gen2_session_alloc_roi_metadata_buffer(struct iris_inst *inst= ); +int iris_destroy_roi_metadata_buffers(struct iris_inst *inst); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index e6838e67cbfcd4b9baf53c008e33999e31f2ed76..dd7f576cf9c5680aeff332e5424= c126f613dcd3b 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -1623,3 +1623,22 @@ int iris_set_metadata_delivery(struct iris_inst *ins= t, u32 plane) =20 return ret; } + +int iris_set_roi_params(struct iris_inst *inst, u32 plane) +{ + struct iris_buffers *buffers =3D &inst->buffers[BUF_ROIMB_DELTAQP]; + u32 metadata_header_bytes =3D 256; + u32 size =3D 0; + int ret =3D 0; + + if (!inst->fw_caps[ROI_PARAMS].p_array) + return -EINVAL; + + size =3D inst->fw_caps[ROI_PARAMS].elems * 2 + metadata_header_bytes; + buffers->size =3D ALIGN(size, 4096); + ret =3D iris_hfi_gen2_session_alloc_roi_metadata_buffer(inst); + if (ret) + return ret; + + return 0; +} diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index 9957b69366f50310338a0c1470d9744592655c33..7587dfec052a320863889eb1520= 3416b9c527a40 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -51,5 +51,6 @@ int iris_set_req_sync_frame(struct iris_inst *inst, enum = platform_inst_fw_cap_ty int iris_set_time_delta_based_rc(struct iris_inst *inst, enum platform_ins= t_fw_cap_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); int iris_set_metadata_delivery(struct iris_inst *inst, u32 plane); +int iris_set_roi_params(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index d628bc6748438b19dac01cd11cb9f8da0b8500af..4d40d6733e5877a302ce63fb0b4= a61b8f284e6dc 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -1789,6 +1789,7 @@ static const struct platform_inst_fw_cap inst_fw_cap_= sm8550_enc[] =3D { .hfi_id =3D HFI_PROP_ROI_INFO, .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_CUSTOM | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_roi_params, }, { .cap_id =3D MB_SIZE, diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_command.c index cf88dbe11e8e9faef826e661d8e9909fd7f16b94..1bb35ae86b6f1d1f40fa4408599= 8fb452d9f9a21 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -134,6 +134,7 @@ static u32 iris_hfi_gen2_get_port_from_buf_type(struct = iris_inst *inst, switch (buffer_type) { case BUF_INPUT: case BUF_VPSS: + case BUF_ROIMB_DELTAQP: return HFI_PORT_RAW; case BUF_OUTPUT: case BUF_BIN: @@ -1267,6 +1268,8 @@ static u32 iris_hfi_gen2_buf_type_from_driver(u32 dom= ain, enum iris_buffer_type return HFI_BUFFER_VPSS; case BUF_PARTIAL: return HFI_BUFFER_PARTIAL_DATA; + case BUF_ROIMB_DELTAQP: + return HFI_BUFFER_METADATA; default: return 0; } @@ -1328,6 +1331,7 @@ static struct iris_buffer *iris_queue_metadata_buffer= s(struct iris_inst *inst, static int iris_hfi_gen2_session_queue_buffer(struct iris_inst *inst, stru= ct iris_buffer *buffer) { struct iris_inst_hfi_gen2 *inst_hfi_gen2 =3D to_iris_inst_hfi_gen2(inst); + struct iris_hfi_buffer hfi_meta_buffer; struct iris_hfi_buffer hfi_buffer; u32 port; int ret; @@ -1349,6 +1353,26 @@ static int iris_hfi_gen2_session_queue_buffer(struct= iris_inst *inst, struct iri &hfi_buffer, sizeof(hfi_buffer)); =20 + /* check if any metadata buffer is available not queued, queueit */ + if (port =3D=3D HFI_PORT_RAW) { + buffer =3D iris_queue_metadata_buffers(inst, BUF_ROIMB_DELTAQP, buffer->= index); + if (buffer) { + iris_hfi_gen2_get_buffer(inst->domain, buffer, &hfi_meta_buffer); + port =3D iris_hfi_gen2_get_port_from_buf_type(inst, buffer->type); + iris_hfi_gen2_create_packet(inst_hfi_gen2->packet, + HFI_CMD_BUFFER, + HFI_HOST_FLAGS_INTR_REQUIRED, + HFI_PAYLOAD_STRUCTURE, + port, + inst->core->packet_id++, + &hfi_meta_buffer, + sizeof(hfi_meta_buffer)); + + buffer->attr |=3D BUF_ATTR_QUEUED; + buffer->attr &=3D ~BUF_ATTR_DEQUEUED; + } + } + return iris_hfi_queue_cmd_write(inst->core, inst_hfi_gen2->packet, inst_hfi_gen2->packet->size); } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/dr= ivers/media/platform/qcom/iris/iris_hfi_gen2_response.c index 84b629b957442c024dccc18b354ac9a7e541abaa..f63e0a7723e8583da818c2b004e= 367c1dd3d94f7 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c @@ -58,6 +58,8 @@ static u32 iris_hfi_gen2_buf_type_to_driver(struct iris_i= nst *inst, return BUF_PARTIAL; case HFI_BUFFER_VPSS: return BUF_VPSS; + case HFI_BUFFER_METADATA: + return BUF_ROIMB_DELTAQP; default: return 0; } diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/p= latform/qcom/iris/iris_vidc.c index fcbc60016beec693f2ce27927a09a2d51494bc38..fae3d113a9dc990f06167ee0b7f= b8fab24a0552c 100644 --- a/drivers/media/platform/qcom/iris/iris_vidc.c +++ b/drivers/media/platform/qcom/iris/iris_vidc.c @@ -180,6 +180,7 @@ int iris_open(struct file *filp) INIT_LIST_HEAD(&inst->buffers[BUF_SCRATCH_2].list); INIT_LIST_HEAD(&inst->buffers[BUF_VPSS].list); INIT_LIST_HEAD(&inst->buffers[BUF_PARTIAL].list); + INIT_LIST_HEAD(&inst->buffers[BUF_ROIMB_DELTAQP].list); init_completion(&inst->completion); init_completion(&inst->flush_completion); =20 @@ -299,6 +300,7 @@ int iris_close(struct file *filp) iris_destroy_all_internal_buffers(inst, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLAN= E); iris_check_num_queued_internal_buffers(inst, V4L2_BUF_TYPE_VIDEO_OUTPUT_M= PLANE); iris_check_num_queued_internal_buffers(inst, V4L2_BUF_TYPE_VIDEO_CAPTURE_= MPLANE); + iris_destroy_roi_metadata_buffers(inst); iris_remove_session(inst); mutex_unlock(&inst->lock); mutex_destroy(&inst->ctx_q_lock); --=20 2.34.1