Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2513114pxj; Sun, 13 Jun 2021 23:54:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxin13yCxVdkvzaoe4jCOxM1Fk/20M25u+ZTCuADiWITMsGT8zWZmEqOSqZ4bJHg33gZitn X-Received: by 2002:a50:ff15:: with SMTP id a21mr15531472edu.103.1623653639984; Sun, 13 Jun 2021 23:53:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623653639; cv=none; d=google.com; s=arc-20160816; b=bTI7qt0StSxcn+mAGeMkxMHsVD6QX+8rbzFT5Dc48MowUv8A6CH/3GEWSpq/DGhwB+ 7OZxgxAXPXi5rspswSG+XJKXa5uPgxY2QtL2dALq9YNwQmTx2jEGU6VpWVcj5i6V+kD0 R4+7cq6qGscDLt0QgeqGu4xAay9nGI1XDTED1a9YYfEQq7lhoIWeuNZdAuuw7QJ9bt3k bHHnWbykBiihNuQhUZ0Uq/b+eFwk3MA1hc/623jAkT97sIkCX+YYzp2jgNwSeUcnimE1 d0tJsue5epYeaLVVPIXFtgLECYoj9halN5rV7zLcID69L99A3hKlPgXUDmaX1soRxBZn +Fag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:message-id:references:in-reply-to :subject:cc:to:from:date:content-transfer-encoding:mime-version :sender:dkim-signature; bh=I38mQxV/Tbn+T1jBm45ueY8hqSAqFaS9oTZBJvKWkoU=; b=NzNWV4uCkYu+6bRJlDE+R8J4EWBLagxHTivJbYMoZWa0lKEX0Nj3JuZfCxOwjfb8R4 8903kuAxJD/Px7Ux5S5RgZUNB2T1Fu4m+lvAShlk3y2cdHaL77C19J2G9QS1r+tzcSXc /AsjfJeOf02qw+w8e3Kx7JA9CWRu70hLS/d0Q9lv0lNuuIR2riEWK5j5NBDbAR/Xs7o4 5e8y3xhIMX77uu4S+MgKAju/KHu9B7VazkQdoBBR3BoOODpSpcoBDABKU4UX7aQA5QGJ b/hT1ch/IUQURhwkLeKXQYVehzGpTAVfN0EONtY9QR9yubShZqvFbmVXTcd6Ed6phau2 0eVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=VjQ4FenX; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c7si11339678ejc.177.2021.06.13.23.53.36; Sun, 13 Jun 2021 23:53:59 -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; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=VjQ4FenX; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232467AbhFNGvZ (ORCPT + 99 others); Mon, 14 Jun 2021 02:51:25 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:10308 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232096AbhFNGvX (ORCPT ); Mon, 14 Jun 2021 02:51:23 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1623653361; h=Message-ID: References: In-Reply-To: Subject: Cc: To: From: Date: Content-Transfer-Encoding: Content-Type: MIME-Version: Sender; bh=I38mQxV/Tbn+T1jBm45ueY8hqSAqFaS9oTZBJvKWkoU=; b=VjQ4FenXVZFCDhQLg1sZSaBeo40coprhfjiF7FLgFhE1s30oTaq8SfSv5/KgCS0Gnt4m+9qw 3daEyqMguLuQxj2djcgA0fZuZpibbatrjGpR/tsfqxa6+mNLh05w1HO4fj/8JPvsJXw6IfoJ D8flsXWJbFvvMz16Fea2J9KwEmI= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n04.prod.us-east-1.postgun.com with SMTP id 60c6fbeae27c0cc77f921576 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Mon, 14 Jun 2021 06:49:14 GMT Sender: mansur=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 6626EC43460; Mon, 14 Jun 2021 06:49:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: mansur) by smtp.codeaurora.org (Postfix) with ESMTPSA id 21BD3C433D3; Mon, 14 Jun 2021 06:49:12 +0000 (UTC) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Mon, 14 Jun 2021 12:19:12 +0530 From: mansur@codeaurora.org To: Fritz Koenig Cc: Linux Media Mailing List , Stanimir Varbanov , LKML , linux-arm-msm@vger.kernel.org, Vikash Garodia , Dikshita Agarwal Subject: Re: [PATCH] venus: venc: add support for V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM control In-Reply-To: References: <1622438514-16657-1-git-send-email-mansur@codeaurora.org> Message-ID: <7b26fdd6169ab8f8af475f2d4e68efcb@codeaurora.org> X-Sender: mansur@codeaurora.org User-Agent: Roundcube Webmail/1.3.9 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On 2021-06-02 23:10, Fritz Koenig wrote: >> On Sun, May 30, 2021 at 10:22 PM Mansur Alisha Shaik >> wrote: >>> >>> Add support for V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM control for >>> H264 high profile and constrained high profile. >>> >>> Signed-off-by: Mansur Alisha Shaik >>> --- >>> drivers/media/platform/qcom/venus/core.h | 1 + >>> drivers/media/platform/qcom/venus/hfi_cmds.c | 10 ++++++++++ >>> drivers/media/platform/qcom/venus/hfi_helper.h | 5 +++++ >>> drivers/media/platform/qcom/venus/venc.c | 11 +++++++++++ >>> drivers/media/platform/qcom/venus/venc_ctrls.c | 12 +++++++++++- >>> 5 files changed, 38 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/media/platform/qcom/venus/core.h >>> b/drivers/media/platform/qcom/venus/core.h >>> index 745f226..103fbd8 100644 >>> --- a/drivers/media/platform/qcom/venus/core.h >>> +++ b/drivers/media/platform/qcom/venus/core.h >>> @@ -235,6 +235,7 @@ struct venc_controls { >>> u32 h264_loop_filter_mode; >>> s32 h264_loop_filter_alpha; >>> s32 h264_loop_filter_beta; >>> + u32 h264_8x8_transform; >>> >>> u32 hevc_i_qp; >>> u32 hevc_p_qp; >>> diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c >>> b/drivers/media/platform/qcom/venus/hfi_cmds.c >>> index 11a8347..61d04a5 100644 >>> --- a/drivers/media/platform/qcom/venus/hfi_cmds.c >>> +++ b/drivers/media/platform/qcom/venus/hfi_cmds.c >>> @@ -1178,6 +1178,7 @@ pkt_session_set_property_4xx(struct >>> hfi_session_set_property_pkt *pkt, >>> { >>> void *prop_data; >>> >>> + >>> if (!pkt || !cookie || !pdata) >>> return -EINVAL; >>> >>> @@ -1227,6 +1228,15 @@ pkt_session_set_property_4xx(struct >>> hfi_session_set_property_pkt *pkt, >>> break; >>> } >>> >>> + case HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8: { >>> + struct hfi_h264_8x8x_transform *in = pdata, *tm = >>> prop_data; >>> + >>> + tm->enable_type = in->enable_type; >>> + pkt->shdr.hdr.size += sizeof(u32) + sizeof(*tm); >>> + break; >>> + >>> + } >>> + >>> case HFI_PROPERTY_CONFIG_VENC_MAX_BITRATE: >>> case HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER: >>> case HFI_PROPERTY_PARAM_BUFFER_ALLOC_MODE: >>> diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h >>> b/drivers/media/platform/qcom/venus/hfi_helper.h >>> index 63cd347..81d0536 100644 >>> --- a/drivers/media/platform/qcom/venus/hfi_helper.h >>> +++ b/drivers/media/platform/qcom/venus/hfi_helper.h >>> @@ -510,6 +510,7 @@ >>> #define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES >>> 0x2005020 >>> #define HFI_PROPERTY_PARAM_VENC_H264_VUI_BITSTREAM_RESTRC >>> 0x2005021 >>> #define HFI_PROPERTY_PARAM_VENC_PRESERVE_TEXT_QUALITY >>> 0x2005023 >>> +#define HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8 >>> 0x2005025 >>> #define HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER >>> 0x2005026 >>> #define HFI_PROPERTY_PARAM_VENC_DISABLE_RC_TIMESTAMP >>> 0x2005027 >>> #define HFI_PROPERTY_PARAM_VENC_INITIAL_QP >>> 0x2005028 >>> @@ -565,6 +566,10 @@ struct hfi_bitrate { >>> u32 layer_id; >>> }; >>> >>> +struct hfi_h264_8x8x_transform { >>> + u32 enable_type; >>> +}; >>> + >>> #define HFI_CAPABILITY_FRAME_WIDTH 0x01 >>> #define HFI_CAPABILITY_FRAME_HEIGHT 0x02 >>> #define HFI_CAPABILITY_MBS_PER_FRAME 0x03 >>> diff --git a/drivers/media/platform/qcom/venus/venc.c >>> b/drivers/media/platform/qcom/venus/venc.c >>> index 8dd49d4..4ecf331 100644 >>> --- a/drivers/media/platform/qcom/venus/venc.c >>> +++ b/drivers/media/platform/qcom/venus/venc.c >>> @@ -567,6 +567,7 @@ static int venc_set_properties(struct venus_inst >>> *inst) >>> struct hfi_h264_vui_timing_info info; >>> struct hfi_h264_entropy_control entropy; >>> struct hfi_h264_db_control deblock; >>> + struct hfi_h264_8x8x_transform h264_transform; >>> >>> ptype = HFI_PROPERTY_PARAM_VENC_H264_VUI_TIMING_INFO; >>> info.enable = 1; >>> @@ -597,6 +598,16 @@ static int venc_set_properties(struct venus_inst >>> *inst) >>> ret = hfi_session_set_property(inst, ptype, >>> &deblock); >>> if (ret) >>> return ret; >>> + >>> + ptype = HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8; >>> + if (ctr->profile.h264 == HFI_H264_PROFILE_HIGH || >>> + ctr->profile.h264 == >>> HFI_H264_PROFILE_CONSTRAINED_HIGH) >>> + h264_transform.enable_type = >>> ctr->h264_8x8_transform; >>> + >>> + ret = hfi_session_set_property(inst, ptype, >>> &h264_transform); >>> + if (ret) >>> + return ret; >>> + >>> } >>> >>> if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264 || >>> diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c >>> b/drivers/media/platform/qcom/venus/venc_ctrls.c >>> index 637c92f..e3ef611 100644 >>> --- a/drivers/media/platform/qcom/venus/venc_ctrls.c >>> +++ b/drivers/media/platform/qcom/venus/venc_ctrls.c >>> @@ -319,6 +319,13 @@ static int venc_op_s_ctrl(struct v4l2_ctrl >>> *ctrl) >>> case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY: >>> ctr->mastering = *ctrl->p_new.p_hdr10_mastering; >>> break; >>> + case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM: >>> + if (ctr->profile.h264 != HFI_H264_PROFILE_HIGH || >>> + ctr->profile.h264 != >>> HFI_H264_PROFILE_CONSTRAINED_HIGH) >> >> This appears to be incorrect as the comparison will always be true. I >> think it should be written as: >> if (ctr->profile.h264 == HFI_H264_PROFILE_HIGH || >> ctr->profile.h264 == >> HFI_H264_PROFILE_CONSTRAINED_HIGH) >> ctr->h264_8x8_transform = ctrl->val; >> >>> + return -EINVAL; >> >> I'm not sure -EINVAL is appropriate here. venc_op_s_ctrl will be >> called to initialize the default control values from >> v4l2_ctrl_handler_setup. If the default profile isn't high or >> constrained high, the driver will fail to initialize. >> As per codec spec, the 8x8 transform is enabled for high profile and constrained high profile, but I didn't found any document what happens when we set 8x8 transform for other profiles. Hence added a check to reject other profiles to inform the same to client >>> + >>> + ctr->h264_8x8_transform = ctrl->val; >>> + break; >>> >>> default: >>> return -EINVAL; >>> } >>> @@ -334,7 +341,7 @@ int venc_ctrl_init(struct venus_inst *inst) >>> { >>> int ret; >>> >>> - ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 57); >>> + ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 58); >>> if (ret) >>> return ret; >>> >>> @@ -438,6 +445,9 @@ int venc_ctrl_init(struct venus_inst *inst) >>> V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP, 1, >>> 51, 1, 1); >>> >>> v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops, >>> + V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM, 0, 1, 1, 0); >>> + >>> + v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops, >>> V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP, 1, >>> 51, 1, 1); >>> >>> v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops, >>> -- >>> QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a >>> member >>> of Code Aurora Forum, hosted by The Linux Foundation >>> >