Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp780237pxa; Tue, 11 Aug 2020 15:08:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJUBrQhz5llDBqrILkv87sRctN0MD8y8RgsS+j0fDL53zPdRr4W8GyngjdXLDIsTb2fcPZ X-Received: by 2002:a17:906:1c84:: with SMTP id g4mr28236813ejh.59.1597183700732; Tue, 11 Aug 2020 15:08:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597183700; cv=none; d=google.com; s=arc-20160816; b=Axj/UwD5LSfy10eys0YV9270nVAH1rvhhbtcloAcCjFcC1VdVuRGa6NuN+6osSa/0+ TtRVRlP04S4vTXNmjIuOS/FLVRURjq2Sq61La0uCusi4h8F8x7EvaiOv1BClkcfsLNHE zXosiExnPHF/8z+2OEXw1h11zRmDyabJITRF3xl5Q4yZ2uJFxycPbfnGmI0lnqTobwPB EmXqem6B8ZzC2u6wLfM498RsJZO3xuNUV0ZhcXaWi1fRokdSYf8PH+li1siqOK8rP51Z pfJRc85LpmC1V1WV0UTp8FV6a+1nX8diuJM4Lwy9nUjVHjmq92I5J+fU3DU2GyehzuLs bSLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:organization:references:in-reply-to:date:cc:to:from :subject:message-id; bh=G5EZZRG6aI78XjxDoky98qanWRvYeHPTnBZffPfOM68=; b=h9a+zNMi4HgnDk3vc+GrdYWe6BilTGiJMFXf7IG4Y58/YNYI41QhTHo2GJYQ4UvhTy inQbKu/DDxX3Yk2kOHd498XiNoUAgsfqtC8oG9F+Ylfz11AUCE4xTuEEVTmAoI+becAZ hNyoU391tHgibdVkpqjurVDG5qCnefOLyF3H6xLNmggFyBkhV16FAGToNNQZrQl/JS+x Ij9L6s4/Pz25N/1IiW4Yi7CddRtLlQxz8iNQ22WNsaeTzwgWlWQ4sJfChudjnU2jFD/X IZHxn3B/4NHwBgCCtoPNSPzV3+By+ov0IZmpwtGme+zeg6MXEBLeTaT2Sik2cnEth6JW E+fA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x15si11379015eje.180.2020.08.11.15.07.57; Tue, 11 Aug 2020 15:08:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726512AbgHKWHJ (ORCPT + 99 others); Tue, 11 Aug 2020 18:07:09 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37304 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726023AbgHKWHJ (ORCPT ); Tue, 11 Aug 2020 18:07:09 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 39D71299137 Message-ID: Subject: Re: [PATCH v2 03/14] media: uapi: h264: Split prediction weight parameters From: Ezequiel Garcia To: Jernej =?UTF-8?Q?=C5=A0krabec?= , Jonas Karlman Cc: linux-media , Linux Kernel Mailing List , Tomasz Figa , kernel@collabora.com, Hans Verkuil , Alexandre Courbot , Jeffrey Kardatzke , Nicolas Dufresne , Philipp Zabel , Maxime Ripard , Paul Kocialkowski Date: Tue, 11 Aug 2020 19:06:57 -0300 In-Reply-To: <3175824.PBOCjEjZKB@jernej-laptop> References: <20200806151310.98624-1-ezequiel@collabora.com> <2153096.Em8KjNIPHG@jernej-laptop> <1684df93a76cbd5e5f5435d876cf7fb88681b2ab.camel@collabora.com> <3175824.PBOCjEjZKB@jernej-laptop> Organization: Collabora Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.36.3-1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jonas, Jernej and everyone :) > > > > > > > > + { > > > > > > > > + .cfg = { > > > > > > > > + .id = > > > > > > > > V4L2_CID_MPEG_VIDEO_H264_PRED_WEIGHTS, > > > > > > > > + }, > > > > > > > > + .codec = CEDRUS_CODEC_H264, > > > > > > > > + .required = true, > > > > > > > > > > > > > > This should probably be false if this control is to be optional as > > > > > > > implied > > > > > > > by the commit message. > > > > > > > > > > > > Well, the control is optional if the driver implements it as > > > > > > optional, > > > > > > which Cedrus isn't currently doing :-) > > > > > > > > > > Why do you think so? Prediction weights are filled only when they are > > > > > needed:https://elixir.bootlin.com/linux/latest/source/drivers/staging/ > > > > > medi > > > > > a/ sunxi/cedrus/cedrus_h264.c#L370 > > > > > > > > Right, but that should be changed to be really optional. > > > > How does the driver reject/fail the request if the table is NULL? > > > > > > It's my understanding that pointer to this table can't be NULL. NULL would > > > mean that there is no control with that ID registered in the driver. > > > > Hm, I'm starting to think you are right. So, does this mean > > the default quantization matrix here is bogus? > > > > if (quantization && quantization->load_intra_quantiser_matrix) > > matrix = quantization->intra_quantiser_matrix; > > else > > matrix = intra_quantization_matrix_default; > > No, not really. Userspace can set load_intra_quantiser_matrix flag to false. > The above made me revisit the current H264 semantics for the picture scaling matrix. As you can see, we currently have V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT, which we were expecting to match 1:1 the H264 PPS syntax element "pic_scaling_matrix_present_flag". However, after a bit of reflection and discussion with Nicolas, I believe it's not appropriate to have this flag as a 1:1 match with the PPS syntax element. A H264 scaling matrix can be first specified by the SPS and then modified by the PPS. We can expect the modification process to be solved by userspace. All we need in the uAPI is a flag that indicates if V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX should be used or not. (As Jernej already pointed out, a initialized control shall never be NULL, so we want to flag if the control should be used or not) [1]. Applications are expected to fill V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX if a scaling matrix needs to be passed, which is the case is: sps->scaling_matrix_present_flag || pps->pic_scaling_matrix_present_flag So that is the meaning of the flag we want. [2] Moreover, Baseline, Main and Extended profiles are specified to have neither SPS scaling_matrix_present_flag nor PPS pic_scaling_matrix_present_flag syntax elements, so it makes sense to allow applications _not_ setting V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX in a request. On the uAPI side, the only change needed is: -#define V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT 0x0080 +#define V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT 0x0080 (just to avoid confusing the flag with the syntax element) Together with proper documentation to clarify what the flag is. Drivers can use this flag as (rkvdec as an example): - /* always use the matrix sent from userspace */ - WRITE_PPS(1, SCALING_LIST_ENABLE_FLAG); - + WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT), + SCALING_LIST_ENABLE_FLAG); Which also means the scaling matrix control is optional and won't be programmed to the hardware when the not present. [3] Thanks! Ezequiel [1] We may also check if a control is part of a request or not, but that seems more complex and more obscure than just checking a flag. [2] In theory, the uAPI could also have semantics to flag seq_scaling_list_present_flag[i] and pic_scaling_list_present_flag[i], for each scaling list. I think this makes things overly complicated. [3] We could add Flat_4x4_16 and Flat_8x8_16 in the kernel, but all the drivers we support, have a flag for scaling-matrix-not-present, so there's no need.