Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp5823282rwi; Tue, 18 Oct 2022 04:48:08 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6gwd8/hYFBqeZKFUdh+2848z1RsUfOWc2dKluoMWVkq1HGFKdomyps5SBfDZBeYE5D1eT/ X-Received: by 2002:a17:907:2d1e:b0:78e:2c3b:559f with SMTP id gs30-20020a1709072d1e00b0078e2c3b559fmr2022654ejc.435.1666093688130; Tue, 18 Oct 2022 04:48:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666093688; cv=none; d=google.com; s=arc-20160816; b=WD4fSHCczLdz1vkFMkMAvbe/83aGCT2Iz6vRDEWd+N+wwIoaPvSeV5djXfNMhO2MLh 2XK8c/XsYoP9NxNGp9vWuaBVnM+IPQiudjIte4X1GAn8siOL7WbY5QnpIF3ls6atgSUf JAw43hheQQahladdsY2SykX2MJUjgGtKx5yrIw7+UzEqiRZh6kcPhIJAyIw4KCdYQNQJ nQ7gykGxt6upcWRpGct45+j5X0F+uBOSeu+IQvZyimO3zSYVjxBPBnEibOvO7ObxeYTt s1k3AaVNzW5o9TWezi4AbQtUnyct3jn5OblpLPOyBxCThx/TviND6aBxXLPqE2BYpPx4 mB5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=9Sc8Gwb5/VBXc4/8kAJE2lTKRhreTCBJCxEItFeyo+k=; b=EcdYFXZbvc4SYHkS9bEENFOrT1y1NanMIPPMaqmgXVPu47+tX0UnnZ986RVm3cneJ6 b+D/HpafhX9sQtd/v42i5vqfB7YEV6FSB/zK6Rvl4WTUvZAYcvPfmICpe++ihwEnZ4H8 WSnXgkDlaV/0nT8ppLuXP1a5KpAovYsGZACatzo6YJP4JYUx4GmrMieN/ze3htdPOVR2 ErkPyleyydyhC8/alsAYdpl4HgiU0NN2G6MoD8TVtV6hEoMyHunWTF9T1nXkLYBtl4F1 UDpfffRUqqamcrBfkmAImXRS3Yk2uJeYrfj9RQ03wjCh+UshKGJHX7fC46F77rIzNqrD it/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=RtsAULFI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o14-20020a170906974e00b007919388d2c6si2272737ejy.357.2022.10.18.04.47.37; Tue, 18 Oct 2022 04:48:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=RtsAULFI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230188AbiJRLof (ORCPT + 99 others); Tue, 18 Oct 2022 07:44:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229760AbiJRLob (ORCPT ); Tue, 18 Oct 2022 07:44:31 -0400 Received: from mailgw01.mediatek.com (unknown [60.244.123.138]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7067513E13; Tue, 18 Oct 2022 04:44:27 -0700 (PDT) X-UUID: 3af5d139345c4ed69f5a93620fe23a9d-20221018 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=9Sc8Gwb5/VBXc4/8kAJE2lTKRhreTCBJCxEItFeyo+k=; b=RtsAULFIj89HxzpvfUV3Tnc1HKinIsY8ao3+J6iBbiIoqPqfBpvl9Wk4v6bfgyErQrQeZmJbOk49XtGD8m993WFO586eiHMjd5rwCxm0W9uD9hMRypcUarHXvgsa0MAvJy6wTkpv5MyRgM4pwyV2YUXgdHFhVd7P6C4k5CutqQY=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.11,REQID:c3c64f9b-d959-4229-a63f-73d3b6963f40,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:39a5ff1,CLOUDID:858c2ba4-ebb2-41a8-a87c-97702aaf2e20,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:0,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0 X-UUID: 3af5d139345c4ed69f5a93620fe23a9d-20221018 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1247805421; Tue, 18 Oct 2022 19:44:19 +0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.15; Tue, 18 Oct 2022 19:44:18 +0800 Received: from mhfsdcap04 (10.17.3.154) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 18 Oct 2022 19:44:17 +0800 Message-ID: <087750f4a7d334c03a5eda1fd2e2b3573792ec33.camel@mediatek.com> Subject: Re: [PATCH] media: mediatek: vcodec: fix h264 cavlc bitstream fail From: "yunfei.dong@mediatek.com" To: Chen-Yu Tsai CC: Nicolas Dufresne , Hans Verkuil , AngeloGioacchino Del Regno , Benjamin Gaignard , Tiffany Lin , Mauro Carvalho Chehab , Matthias Brugger , George Sun , Xiaoyong Lu , Hsin-Yi Wang , "Fritz Koenig" , Daniel Vetter , Steve Cho , , , , , , Date: Tue, 18 Oct 2022 19:44:16 +0800 In-Reply-To: References: <20221017090208.19041-1-yunfei.dong@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-MTK: N X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, SPF_PASS,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Chen-Yu, Thanks for your suggestion. On Tue, 2022-10-18 at 17:55 +0800, Chen-Yu Tsai wrote: > On Mon, Oct 17, 2022 at 5:02 PM Yunfei Dong > wrote: > > > > Some cavlc bistream will decode fail when the frame size is small > > than > > 20 bytes. Need to add pending data at the end of the bitstream. > > "magic terminating pattern" instead of "pending data"? > > > For the size of mapped memory is at least one page, adding four > > bytes data > > won't lead to access unknown virtual memory. > > Actually we can narrow this down a bit. The minimum dimension (16x16) > sets the minimum size of the buffer at 256 bytes. > Fix in patch v2. > > Fixes: 59fba9eed5a7 ("media: mediatek: vcodec: support stateless > > H.264 decoding for mt8192") > > Signed-off-by: Yunfei Dong > > --- > > .../vcodec/vdec/vdec_h264_req_multi_if.c | 27 > > ++++++++++++++++--- > > 1 file changed, 24 insertions(+), 3 deletions(-) > > > > diff --git > > a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i > > f.c > > b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i > > f.c > > index 4cc92700692b..c1583dddcb04 100644 > > --- > > a/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i > > f.c > > +++ > > b/drivers/media/platform/mediatek/vcodec/vdec/vdec_h264_req_multi_i > > f.c > > @@ -539,6 +539,24 @@ static int vdec_h264_slice_core_decode(struct > > vdec_lat_buf *lat_buf) > > return 0; > > } > > > > +static void vdec_h264_insert_startcode(struct mtk_vcodec_dev > > *vcodec_dev, unsigned char *buf, > > + size_t *bs_size, struct > > mtk_h264_pps_param *pps) > > +{ > > + struct device *dev = &vcodec_dev->plat_dev->dev; > > + > > + /* cavlc bitstream when entropy_coding_mode_flag is false. > > */ > > + if (pps->entropy_coding_mode_flag || *bs_size > 20 || > > + !(of_device_is_compatible(dev->of_node, > > "mediatek,mt8192-vcodec-dec") || > > + of_device_is_compatible(dev->of_node, "mediatek,mt8195- > > vcodec-dec"))) > > + return; > > + > > There should be a comment here describing what is added. > Fix in patch v2. > > ChenYu > Best Regards, Yunfei Dong > > + buf[*bs_size] = 0; > > + buf[*bs_size + 1] = 0; > > + buf[*bs_size + 2] = 1; > > + buf[*bs_size + 3] = 0xff; > > + (*bs_size) += 4; > > +} > > + > > static int vdec_h264_slice_lat_decode(void *h_vdec, struct > > mtk_vcodec_mem *bs, > > struct vdec_fb *fb, bool > > *res_chg) > > { > > @@ -582,9 +600,6 @@ static int vdec_h264_slice_lat_decode(void > > *h_vdec, struct mtk_vcodec_mem *bs, > > } > > > > inst->vsi->dec.nal_info = buf[nal_start_idx]; > > - inst->vsi->dec.bs_buf_addr = (u64)bs->dma_addr; > > - inst->vsi->dec.bs_buf_size = bs->size; > > - > > lat_buf->src_buf_req = src_buf_info- > > >m2m_buf.vb.vb2_buf.req_obj.req; > > v4l2_m2m_buf_copy_metadata(&src_buf_info->m2m_buf.vb, > > &lat_buf->ts_info, true); > > > > @@ -592,6 +607,12 @@ static int vdec_h264_slice_lat_decode(void > > *h_vdec, struct mtk_vcodec_mem *bs, > > if (err) > > goto err_free_fb_out; > > > > + vdec_h264_insert_startcode(inst->ctx->dev, buf, &bs->size, > > + &share_info- > > >h264_slice_params.pps); > > + > > + inst->vsi->dec.bs_buf_addr = (uint64_t)bs->dma_addr; > > + inst->vsi->dec.bs_buf_size = bs->size; > > + > > *res_chg = inst->resolution_changed; > > if (inst->resolution_changed) { > > mtk_vcodec_debug(inst, "- resolution changed -"); > > -- > > 2.25.1 > >