From nobody Thu Oct 2 16:51:54 2025 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B861C1B5EB5 for ; Sat, 13 Sep 2025 10:39:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757759990; cv=none; b=iEgOOuVECIW+BQzCFas+nlGHvonqzZ5HnKDI5a1CIyqIeqwM8Hn8FtsZTlyU/e1WXA8wDnVH1GfxIOnlZqbfSmBN/7MtzUJwOPCF7iZlWq8RchppPEwepQ4rFwF1MwD78/ELb7lE6bEelybHzJ73SmzPPXrgR3HuRi2ZnlEVbPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757759990; c=relaxed/simple; bh=gibUDWSmHucfE4SKklHD8ukPbGhakz9RlGTLtyQHa/k=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=VU6bjVNMr+TEH0CEcbq9zLIWab56JhdahAkgqfiDHjtpgW9e0z9DJ89YXAvop1anBRBocjXQ/5affk/f+3fVbll84c428XBixk4EN2ZEu2t1lbfS7ThaM9knHiILz+WR8eYxaOzWBGtjLGV4JKIuj91BAmznBSaBof9mq56fDy4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aBjJtdA7; arc=none smtp.client-ip=209.85.215.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aBjJtdA7" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b54a588ad96so1704928a12.1 for ; Sat, 13 Sep 2025 03:39:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757759988; x=1758364788; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=TS5OtHNyHlR5D82gQ0sqpY8QZXPAbgv9ePCMmRvlP48=; b=aBjJtdA70Cs4JA86yXqgQkGk1TG2Xuy95F48Q8bwGCwW1CyhbcqTuMd9WraKTzxTGf R/cKfD3rJ3uvdzf23TLsqsKCJq9HYWCZdQNyxBFzXTyolYaQeyFbiaZiYKyMAj/szHUi yuLf0q5cgey90HIOtcjnOUDLX6rceSiTsNB+Cp9/DjqvFGMArOWhiOLtUS5eNvoCAFxr 1N2/DzoF9M8DSKYz2V3w0nKz91aqegoDaR4ytQ5AyEEzAKqPS/F+UR6s1jRJyw0PhpcN fHwfIj1iTt0bMGpkF1D/dtrrmMA8eM08p1I+3ENd1EnXXwcvgdw7c2PoZDzRwQ+oe4bA 5LOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757759988; x=1758364788; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TS5OtHNyHlR5D82gQ0sqpY8QZXPAbgv9ePCMmRvlP48=; b=YZvJ9IurmVt4bdnb3OQmxbzKmYVGKr65u4SyD2zwJITwzjQdvwOQVavyzt84kK63g3 Pl+c+GxiGUyzd110NcoLgmtTRk7RMfjJ3JHPxBgZOyKmLXKGumKP2N1uWNRsam1Hzo6i iezzJFyQDpPz2Vu+Srmcf/oTOixti+ciko4VsZTulrPc14qaxZ2RjRGftwcvGjmSlLtD 5KwHWifEcMfs4ztS9+6GWJ5dyF401sAgQ1Qod/kxx4J5lnd3H0v239UjEk0V1u86EPKF uR5ahUdZjksxU4jvlbkjAmVLlUBuNzy8/Hyl8NVtHhK49AVar9uMBcmeCfJF7EL2WJoe 689w== X-Forwarded-Encrypted: i=1; AJvYcCWGkUw7e8AAJ6pOnceICVpgXbb+Y0sOwfP7et8lJRmhDmC4IaSQIPltNb8vS+h6g26DkPU0XM/8uWG57sI=@vger.kernel.org X-Gm-Message-State: AOJu0YxvqnuMgXfpFHSY3Q7/Kp9sEj/IDAdmJMkHGeQD/2klsi2DVAF9 5Kia5r2kixxdsNo8Gp20zCHYDHnZcYEeSxxrgChexnhtO9BcnZKS3Vzc X-Gm-Gg: ASbGncvxb34o/jRlgi6g+oo7BROcDj6IVU3dnCB6qaeWBfG/g3WlsTkG+UivzjOW7Qd 2bgmx9FJ0WucpqFrXQtul12DrL2QP9bJ/791nsm0yc/oHVUSXYLb62qasTpWAVyLsmOpJYijNZn LwFarnGmLWOpIdlbtIlFiDOaAvYFtYbXAMbTKYxa7Jr5LLSVReYS8gXI32MAVOJjq+G8sC49BXB wqeLrEO83Q5KboEOgGQIkgRFrNMAJQYwL3+JqddP89TaWH9aaLEBaS5DDaQvZ7UixLhPQL04P/F 4Ps07nutLHDi7NXYQswsVZzfGLsz5BuxN7xp1GpLbRJnSjR6PvqeForzbsdPYg5K6hNIabtJcAe skd26ufOHmcUzhkLWUkf55vTnISYzO/ya2VGPTnCwmLpw1Pd6TsUcOfl8loqeBCNN671tqhTWsh 4u4MuxxRwRxV5YVwZStvWN X-Google-Smtp-Source: AGHT+IFN0gqss6mtEr77tugnv2ax0P5Bgp77ssu7ZY3zwXxelN63682bQ6syqkn+6bxE0vQaZxOO8g== X-Received: by 2002:a17:902:f644:b0:25c:43f7:7e40 with SMTP id d9443c01a7336-25d2ab45d41mr74971735ad.10.1757759987829; Sat, 13 Sep 2025 03:39:47 -0700 (PDT) Received: from OSC.. ([106.222.231.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c37293ef1sm74217875ad.41.2025.09.13.03.39.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Sep 2025 03:39:47 -0700 (PDT) From: Pavan Bobba To: mchehab@kernel.org, hverkuil@kernel.org, ribalda@chromium.org, laurent.pinchart@ideasonboard.com, yunkec@google.com, sakari.ailus@linux.intel.com, james.cowgill@blaize.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Pavan Bobba Subject: [PATCH v2] media: v4l2-ctrls: add full AV1 profile validation in validate_av1_sequence() Date: Sat, 13 Sep 2025 16:09:27 +0530 Message-ID: <20250913103939.25658-1-opensource206@gmail.com> X-Mailer: git-send-email 2.43.0 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 Complete the "TODO: PROFILES" by enforcing profile-specific and monochrome constraints as defined by the AV1 specification (Section 5.5.2, "Color config syntax"). The validator now checks: - Flags: reject any unknown bits set in sequence->flags - Profile range: only profiles 0..2 are valid - Profile 0: 8/10-bit only, subsampling must be 4:2:0 (sx=3D1, sy=3D1), monochrome allowed - Profile 1: 8/10-bit only, subsampling must be 4:4:4 (sx=3D0, sy=3D0), monochrome forbidden - Profile 2: * 8/10-bit: only 4:2:2 allowed (sx=3D1, sy=3D0) * 12-bit: 4:4:4 (sx=3D0, sy=3D0), 4:2:2 (sx=3D1, sy=3D0), or 4:2:0 (sx= =3D1, sy=3D1) allowed - Monochrome path (all profiles except 1): forces subsampling_x=3D1, subsampling_y=3D1, separate_uv_delta_q=3D0 These checks prevent userspace from providing invalid AV1 sequence headers that would otherwise be accepted, leading to undefined driver or hardware behavior. Signed-off-by: Pavan Bobba --- v1 -> v2 : Added more checks for subsampling combinations per profile. : Added a TODO note in the function header for checks to be imple= mented later. drivers/media/v4l2-core/v4l2-ctrls-core.c | 54 +++++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2= -core/v4l2-ctrls-core.c index 98b960775e87..3283ed04cc36 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c @@ -852,14 +852,60 @@ static int validate_av1_sequence(struct v4l2_ctrl_av1= _sequence *s) V4L2_AV1_SEQUENCE_FLAG_SEPARATE_UV_DELTA_Q)) return -EINVAL; =20 - if (s->seq_profile =3D=3D 1 && s->flags & V4L2_AV1_SEQUENCE_FLAG_MONO_CHR= OME) - return -EINVAL; - /* reserved */ if (s->seq_profile > 2) return -EINVAL; =20 - /* TODO: PROFILES */ + /* Profile-specific checks */ + switch (s->seq_profile) { + case 0: + /* Bit depth: 8 or 10 */ + if (s->bit_depth !=3D 8 && s->bit_depth !=3D 10) + return -EINVAL; + + /* Subsampling must be 4:2:0 =E2=86=92 x=3D1, y=3D1 */ + if (!(s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X) || + !(s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y)) + return -EINVAL; + break; + + case 1: + /* Monochrome is forbidden in profile 1 */ + if (s->flags & V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME) + return -EINVAL; + + /* Bit depth: 8 or 10 */ + if (s->bit_depth !=3D 8 && s->bit_depth !=3D 10) + return -EINVAL; + + /* Subsampling must be 4:4:4 =E2=86=92 x=3D0, y=3D0 */ + if ((s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X) || + (s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y)) + return -EINVAL; + break; + + case 2: + /* Bit depth: 8, 10, or 12 */ + if (s->bit_depth !=3D 8 && s->bit_depth !=3D 10 && + s->bit_depth !=3D 12) + return -EINVAL; + + /* Subsampling: 4:2:0, 4:2:2, or 4:4:4 allowed =E2=86=92 no extra check = */ + break; + } + + /* If monochrome flag is set, enforce spec rules */ + if (s->flags & V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME) { + /* Must signal subsampling_x=3D1, subsampling_y=3D1 */ + if (!(s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X) || + !(s->flags & V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y)) + return -EINVAL; + + /* separate_uv_delta_q must be 0 in monochrome */ + if (s->flags & V4L2_AV1_SEQUENCE_FLAG_SEPARATE_UV_DELTA_Q) + return -EINVAL; + } + return 0; } =20 --=20 2.43.0