Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
On Tue, Mar 16, 2021 at 12:21 AM Nicolas Dufresne wrote: > > Le lundi 15 mars 2021 à 20:28 +0900, Alexandre Courbot a écrit : > > Hi Ezequiel, > > > > On Thu, Mar 4, 2021 at 6:47 AM Ezequiel Garcia > > wrote: > > > > > > Hi Alex, > > > > > > Thanks for the patch. > > > > > > On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot > > > wrote: > > > > > > > > From: Yunfei Dong > > > > > > > > Add support for H.264 decoding using the stateless API, as supported by > > > > MT8183. This support takes advantage of the V4L2 H.264 reference list > > > > builders. > > > > > > > > Signed-off-by: Yunfei Dong > > > > [acourbot: refactor, cleanup and split] > > > > Co-developed-by: Alexandre Courbot > > > > Signed-off-by: Alexandre Courbot > > > > --- > > > > drivers/media/platform/Kconfig| 1 + > > > > drivers/media/platform/mtk-vcodec/Makefile| 1 + > > > > .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ > > > > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > > > > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > > > > 5 files changed, 813 insertions(+) > > > > create mode 100644 drivers/media/platform/mtk- > > > > vcodec/vdec/vdec_h264_req_if.c > > > > > > > > diff --git a/drivers/media/platform/Kconfig > > > > b/drivers/media/platform/Kconfig > > > > index fd1831e97b22..c27db5643712 100644 > > > > --- a/drivers/media/platform/Kconfig > > > > +++ b/drivers/media/platform/Kconfig > > > > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > > > > select V4L2_MEM2MEM_DEV > > > > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > > > > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > > > > + select V4L2_H264 > > > > help > > > > Mediatek video codec driver provides HW capability to > > > > encode and decode in a range of video formats on MT8173 > > > > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > > > > b/drivers/media/platform/mtk-vcodec/Makefile > > > > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > > > > --- a/drivers/media/platform/mtk-vcodec/Makefile > > > > +++ b/drivers/media/platform/mtk-vcodec/Makefile > > > > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o > > > > \ > > > > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > > > > vdec/vdec_vp8_if.o \ > > > > vdec/vdec_vp9_if.o \ > > > > + vdec/vdec_h264_req_if.o \ > > > > mtk_vcodec_dec_drv.o \ > > > > vdec_drv_if.o \ > > > > vdec_vpu_if.o \ > > > > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > new file mode 100644 > > > > index ..2fbbfbbcfbec > > > > --- /dev/null > > > > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > @@ -0,0 +1,807 @@ > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > + > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > + > > > > +#include "../vdec_drv_if.h" > > > > +#include "../mtk_vcodec_util.h" > > > > +#include "../mtk_vcodec_dec.h" > > > > +#include "../mtk_vcodec_intr.h" > > > > +#include "../vdec_vpu_if.h" > > > > +#include "../vdec_drv_base.h" > > > > + > > > > +#define NAL_NON_IDR_SLICE 0x01 > > > > +#define NAL_IDR_SLICE 0x05 > > > > +#define NAL_H264_PPS 0x08 > > > > > > Not used? > > > > > > > +#define NAL_TYPE(value)((value) & 0x1F) > > > > + > > > > > > I believe you may not need the NAL type. > > > > True, removed this block of defines. > > > > > > > > > +#define BUF_PREDICTION_SZ (64 * 4096) > > > > +#define MB_UNIT_LEN16 > > > > + > > > > +/* get used parameters for sps/pps */ > > > > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > > > > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > > > > +#define GET_MTK_VDEC_PARAM(param) \ > > > > + { dst_param->param = src_param->param; } > > > > +/* motion vector size (bytes) for every macro block */ > > > > +#define HW_MB_STORE_SZ 64 > > > > + > > > > +#define H264_MAX_FB_NUM17 > > > > +#define H264_MAX_MV_NUM32 > > > > +#define HDR_PARSING_BUF_SZ 1024 > > > > + > > > > +/** > > > > + * struct mtk_h264_dpb_info - h264 dpb information > > > > + * @y_dma_addr: Y bitstream physical address > > > > + * @c_dma_addr: CbCr bitstream physical address > > > > + * @reference_flag: reference picture flag (short/long term reference > > > > picture) > > > > + * @field: field picture flag > > > > + */ > > > > +struct mtk_h264_dpb_info { > > > > + dma_addr_t y_dma_addr; > > > > + dma_addr_t c_dma_addr; > > > > + int reference_flag; > > > > + int field; > > > >
Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
On Tue, Mar 16, 2021 at 7:08 AM Ezequiel Garcia wrote: > > Hi Alex, > > On Mon, 15 Mar 2021 at 08:28, Alexandre Courbot wrote: > > > > Hi Ezequiel, > > > > On Thu, Mar 4, 2021 at 6:47 AM Ezequiel Garcia > > wrote: > > > > > > Hi Alex, > > > > > > Thanks for the patch. > > > > > > On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot > > > wrote: > > > > > > > > From: Yunfei Dong > > > > > > > > Add support for H.264 decoding using the stateless API, as supported by > > > > MT8183. This support takes advantage of the V4L2 H.264 reference list > > > > builders. > > > > > > > > Signed-off-by: Yunfei Dong > > > > [acourbot: refactor, cleanup and split] > > > > Co-developed-by: Alexandre Courbot > > > > Signed-off-by: Alexandre Courbot > > > > --- > > > > drivers/media/platform/Kconfig| 1 + > > > > drivers/media/platform/mtk-vcodec/Makefile| 1 + > > > > .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ > > > > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > > > > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > > > > 5 files changed, 813 insertions(+) > > > > create mode 100644 > > > > drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > > > > > diff --git a/drivers/media/platform/Kconfig > > > > b/drivers/media/platform/Kconfig > > > > index fd1831e97b22..c27db5643712 100644 > > > > --- a/drivers/media/platform/Kconfig > > > > +++ b/drivers/media/platform/Kconfig > > > > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > > > > select V4L2_MEM2MEM_DEV > > > > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > > > > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > > > > + select V4L2_H264 > > > > help > > > > Mediatek video codec driver provides HW capability to > > > > encode and decode in a range of video formats on MT8173 > > > > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > > > > b/drivers/media/platform/mtk-vcodec/Makefile > > > > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > > > > --- a/drivers/media/platform/mtk-vcodec/Makefile > > > > +++ b/drivers/media/platform/mtk-vcodec/Makefile > > > > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o > > > > \ > > > > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > > > > vdec/vdec_vp8_if.o \ > > > > vdec/vdec_vp9_if.o \ > > > > + vdec/vdec_h264_req_if.o \ > > > > mtk_vcodec_dec_drv.o \ > > > > vdec_drv_if.o \ > > > > vdec_vpu_if.o \ > > > > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > new file mode 100644 > > > > index ..2fbbfbbcfbec > > > > --- /dev/null > > > > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > @@ -0,0 +1,807 @@ > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > + > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > + > > > > +#include "../vdec_drv_if.h" > > > > +#include "../mtk_vcodec_util.h" > > > > +#include "../mtk_vcodec_dec.h" > > > > +#include "../mtk_vcodec_intr.h" > > > > +#include "../vdec_vpu_if.h" > > > > +#include "../vdec_drv_base.h" > > > > + > > > > +#define NAL_NON_IDR_SLICE 0x01 > > > > +#define NAL_IDR_SLICE 0x05 > > > > +#define NAL_H264_PPS 0x08 > > > > > > Not used? > > > > > > > +#define NAL_TYPE(value)((value) & 0x1F) > > > > + > > > > > > I believe you may not need the NAL type. > > > > True, removed this block of defines. > > > > > > > > > +#define BUF_PREDICTION_SZ (64 * 4096) > > > > +#define MB_UNIT_LEN16 > > > > + > > > > +/* get used parameters for sps/pps */ > > > > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > > > > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > > > > +#define GET_MTK_VDEC_PARAM(param) \ > > > > + { dst_param->param = src_param->param; } > > > > +/* motion vector size (bytes) for every macro block */ > > > > +#define HW_MB_STORE_SZ 64 > > > > + > > > > +#define H264_MAX_FB_NUM17 > > > > +#define H264_MAX_MV_NUM32 > > > > +#define HDR_PARSING_BUF_SZ 1024 > > > > + > > > > +/** > > > > + * struct mtk_h264_dpb_info - h264 dpb information > > > > + * @y_dma_addr: Y bitstream physical address > > > > + * @c_dma_addr: CbCr bitstream physical address > > > > + * @reference_flag: reference picture flag (short/long term reference > > > > picture) > > > > + * @field: field picture flag > > > > + */ > > > > +struct mtk_h264_dpb_info { > > > > + dma_addr_t y_dma_addr; > > > > + dma_addr_t c_dma_addr; > > > > + int reference_flag; > > > > + int
Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
Hi Alex, On Mon, 15 Mar 2021 at 08:28, Alexandre Courbot wrote: > > Hi Ezequiel, > > On Thu, Mar 4, 2021 at 6:47 AM Ezequiel Garcia > wrote: > > > > Hi Alex, > > > > Thanks for the patch. > > > > On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot > > wrote: > > > > > > From: Yunfei Dong > > > > > > Add support for H.264 decoding using the stateless API, as supported by > > > MT8183. This support takes advantage of the V4L2 H.264 reference list > > > builders. > > > > > > Signed-off-by: Yunfei Dong > > > [acourbot: refactor, cleanup and split] > > > Co-developed-by: Alexandre Courbot > > > Signed-off-by: Alexandre Courbot > > > --- > > > drivers/media/platform/Kconfig| 1 + > > > drivers/media/platform/mtk-vcodec/Makefile| 1 + > > > .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ > > > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > > > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > > > 5 files changed, 813 insertions(+) > > > create mode 100644 > > > drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > > > diff --git a/drivers/media/platform/Kconfig > > > b/drivers/media/platform/Kconfig > > > index fd1831e97b22..c27db5643712 100644 > > > --- a/drivers/media/platform/Kconfig > > > +++ b/drivers/media/platform/Kconfig > > > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > > > select V4L2_MEM2MEM_DEV > > > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > > > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > > > + select V4L2_H264 > > > help > > > Mediatek video codec driver provides HW capability to > > > encode and decode in a range of video formats on MT8173 > > > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > > > b/drivers/media/platform/mtk-vcodec/Makefile > > > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > > > --- a/drivers/media/platform/mtk-vcodec/Makefile > > > +++ b/drivers/media/platform/mtk-vcodec/Makefile > > > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o \ > > > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > > > vdec/vdec_vp8_if.o \ > > > vdec/vdec_vp9_if.o \ > > > + vdec/vdec_h264_req_if.o \ > > > mtk_vcodec_dec_drv.o \ > > > vdec_drv_if.o \ > > > vdec_vpu_if.o \ > > > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > new file mode 100644 > > > index ..2fbbfbbcfbec > > > --- /dev/null > > > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > @@ -0,0 +1,807 @@ > > > +// SPDX-License-Identifier: GPL-2.0 > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#include "../vdec_drv_if.h" > > > +#include "../mtk_vcodec_util.h" > > > +#include "../mtk_vcodec_dec.h" > > > +#include "../mtk_vcodec_intr.h" > > > +#include "../vdec_vpu_if.h" > > > +#include "../vdec_drv_base.h" > > > + > > > +#define NAL_NON_IDR_SLICE 0x01 > > > +#define NAL_IDR_SLICE 0x05 > > > +#define NAL_H264_PPS 0x08 > > > > Not used? > > > > > +#define NAL_TYPE(value)((value) & 0x1F) > > > + > > > > I believe you may not need the NAL type. > > True, removed this block of defines. > > > > > > +#define BUF_PREDICTION_SZ (64 * 4096) > > > +#define MB_UNIT_LEN16 > > > + > > > +/* get used parameters for sps/pps */ > > > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > > > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > > > +#define GET_MTK_VDEC_PARAM(param) \ > > > + { dst_param->param = src_param->param; } > > > +/* motion vector size (bytes) for every macro block */ > > > +#define HW_MB_STORE_SZ 64 > > > + > > > +#define H264_MAX_FB_NUM17 > > > +#define H264_MAX_MV_NUM32 > > > +#define HDR_PARSING_BUF_SZ 1024 > > > + > > > +/** > > > + * struct mtk_h264_dpb_info - h264 dpb information > > > + * @y_dma_addr: Y bitstream physical address > > > + * @c_dma_addr: CbCr bitstream physical address > > > + * @reference_flag: reference picture flag (short/long term reference > > > picture) > > > + * @field: field picture flag > > > + */ > > > +struct mtk_h264_dpb_info { > > > + dma_addr_t y_dma_addr; > > > + dma_addr_t c_dma_addr; > > > + int reference_flag; > > > + int field; > > > +}; > > > + > > > +/** > > > + * struct mtk_h264_sps_param - parameters for sps > > > + */ > > > +struct mtk_h264_sps_param { > > > + unsigned char chroma_format_idc; > > > + unsigned char bit_depth_luma_minus8; > > > + unsigned char bit_depth_chroma_minus8; > > > + unsigned char
Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
Le lundi 15 mars 2021 à 20:28 +0900, Alexandre Courbot a écrit : > Hi Ezequiel, > > On Thu, Mar 4, 2021 at 6:47 AM Ezequiel Garcia > wrote: > > > > Hi Alex, > > > > Thanks for the patch. > > > > On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot > > wrote: > > > > > > From: Yunfei Dong > > > > > > Add support for H.264 decoding using the stateless API, as supported by > > > MT8183. This support takes advantage of the V4L2 H.264 reference list > > > builders. > > > > > > Signed-off-by: Yunfei Dong > > > [acourbot: refactor, cleanup and split] > > > Co-developed-by: Alexandre Courbot > > > Signed-off-by: Alexandre Courbot > > > --- > > > drivers/media/platform/Kconfig | 1 + > > > drivers/media/platform/mtk-vcodec/Makefile | 1 + > > > .../mtk-vcodec/vdec/vdec_h264_req_if.c | 807 ++ > > > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > > > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > > > 5 files changed, 813 insertions(+) > > > create mode 100644 drivers/media/platform/mtk- > > > vcodec/vdec/vdec_h264_req_if.c > > > > > > diff --git a/drivers/media/platform/Kconfig > > > b/drivers/media/platform/Kconfig > > > index fd1831e97b22..c27db5643712 100644 > > > --- a/drivers/media/platform/Kconfig > > > +++ b/drivers/media/platform/Kconfig > > > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > > > select V4L2_MEM2MEM_DEV > > > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > > > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > > > + select V4L2_H264 > > > help > > > Mediatek video codec driver provides HW capability to > > > encode and decode in a range of video formats on MT8173 > > > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > > > b/drivers/media/platform/mtk-vcodec/Makefile > > > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > > > --- a/drivers/media/platform/mtk-vcodec/Makefile > > > +++ b/drivers/media/platform/mtk-vcodec/Makefile > > > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o \ > > > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > > > vdec/vdec_vp8_if.o \ > > > vdec/vdec_vp9_if.o \ > > > + vdec/vdec_h264_req_if.o \ > > > mtk_vcodec_dec_drv.o \ > > > vdec_drv_if.o \ > > > vdec_vpu_if.o \ > > > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > new file mode 100644 > > > index ..2fbbfbbcfbec > > > --- /dev/null > > > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > @@ -0,0 +1,807 @@ > > > +// SPDX-License-Identifier: GPL-2.0 > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#include "../vdec_drv_if.h" > > > +#include "../mtk_vcodec_util.h" > > > +#include "../mtk_vcodec_dec.h" > > > +#include "../mtk_vcodec_intr.h" > > > +#include "../vdec_vpu_if.h" > > > +#include "../vdec_drv_base.h" > > > + > > > +#define NAL_NON_IDR_SLICE 0x01 > > > +#define NAL_IDR_SLICE 0x05 > > > +#define NAL_H264_PPS 0x08 > > > > Not used? > > > > > +#define NAL_TYPE(value) ((value) & 0x1F) > > > + > > > > I believe you may not need the NAL type. > > True, removed this block of defines. > > > > > > +#define BUF_PREDICTION_SZ (64 * 4096) > > > +#define MB_UNIT_LEN 16 > > > + > > > +/* get used parameters for sps/pps */ > > > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > > > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > > > +#define GET_MTK_VDEC_PARAM(param) \ > > > + { dst_param->param = src_param->param; } > > > +/* motion vector size (bytes) for every macro block */ > > > +#define HW_MB_STORE_SZ 64 > > > + > > > +#define H264_MAX_FB_NUM 17 > > > +#define H264_MAX_MV_NUM 32 > > > +#define HDR_PARSING_BUF_SZ 1024 > > > + > > > +/** > > > + * struct mtk_h264_dpb_info - h264 dpb information > > > + * @y_dma_addr: Y bitstream physical address > > > + * @c_dma_addr: CbCr bitstream physical address > > > + * @reference_flag: reference picture flag (short/long term reference > > > picture) > > > + * @field: field picture flag > > > + */ > > > +struct mtk_h264_dpb_info { > > > + dma_addr_t y_dma_addr; > > > + dma_addr_t c_dma_addr; > > > + int reference_flag; > > > + int field; > > > +}; > > > + > > > +/** > > > + * struct mtk_h264_sps_param - parameters for sps > > > + */ > > > +struct mtk_h264_sps_param { > > > + unsigned char chroma_format_idc; > > > + unsigned char bit_depth_luma_minus8; > > > + unsigned char bit_depth_chroma_minus8; > > > + unsigned
Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
Hi Ezequiel, On Thu, Mar 4, 2021 at 6:47 AM Ezequiel Garcia wrote: > > Hi Alex, > > Thanks for the patch. > > On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot wrote: > > > > From: Yunfei Dong > > > > Add support for H.264 decoding using the stateless API, as supported by > > MT8183. This support takes advantage of the V4L2 H.264 reference list > > builders. > > > > Signed-off-by: Yunfei Dong > > [acourbot: refactor, cleanup and split] > > Co-developed-by: Alexandre Courbot > > Signed-off-by: Alexandre Courbot > > --- > > drivers/media/platform/Kconfig| 1 + > > drivers/media/platform/mtk-vcodec/Makefile| 1 + > > .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ > > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > > 5 files changed, 813 insertions(+) > > create mode 100644 > > drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > > > diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig > > index fd1831e97b22..c27db5643712 100644 > > --- a/drivers/media/platform/Kconfig > > +++ b/drivers/media/platform/Kconfig > > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > > select V4L2_MEM2MEM_DEV > > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > > + select V4L2_H264 > > help > > Mediatek video codec driver provides HW capability to > > encode and decode in a range of video formats on MT8173 > > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > > b/drivers/media/platform/mtk-vcodec/Makefile > > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > > --- a/drivers/media/platform/mtk-vcodec/Makefile > > +++ b/drivers/media/platform/mtk-vcodec/Makefile > > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o \ > > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > > vdec/vdec_vp8_if.o \ > > vdec/vdec_vp9_if.o \ > > + vdec/vdec_h264_req_if.o \ > > mtk_vcodec_dec_drv.o \ > > vdec_drv_if.o \ > > vdec_vpu_if.o \ > > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > new file mode 100644 > > index ..2fbbfbbcfbec > > --- /dev/null > > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > @@ -0,0 +1,807 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "../vdec_drv_if.h" > > +#include "../mtk_vcodec_util.h" > > +#include "../mtk_vcodec_dec.h" > > +#include "../mtk_vcodec_intr.h" > > +#include "../vdec_vpu_if.h" > > +#include "../vdec_drv_base.h" > > + > > +#define NAL_NON_IDR_SLICE 0x01 > > +#define NAL_IDR_SLICE 0x05 > > +#define NAL_H264_PPS 0x08 > > Not used? > > > +#define NAL_TYPE(value)((value) & 0x1F) > > + > > I believe you may not need the NAL type. True, removed this block of defines. > > > +#define BUF_PREDICTION_SZ (64 * 4096) > > +#define MB_UNIT_LEN16 > > + > > +/* get used parameters for sps/pps */ > > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > > +#define GET_MTK_VDEC_PARAM(param) \ > > + { dst_param->param = src_param->param; } > > +/* motion vector size (bytes) for every macro block */ > > +#define HW_MB_STORE_SZ 64 > > + > > +#define H264_MAX_FB_NUM17 > > +#define H264_MAX_MV_NUM32 > > +#define HDR_PARSING_BUF_SZ 1024 > > + > > +/** > > + * struct mtk_h264_dpb_info - h264 dpb information > > + * @y_dma_addr: Y bitstream physical address > > + * @c_dma_addr: CbCr bitstream physical address > > + * @reference_flag: reference picture flag (short/long term reference > > picture) > > + * @field: field picture flag > > + */ > > +struct mtk_h264_dpb_info { > > + dma_addr_t y_dma_addr; > > + dma_addr_t c_dma_addr; > > + int reference_flag; > > + int field; > > +}; > > + > > +/** > > + * struct mtk_h264_sps_param - parameters for sps > > + */ > > +struct mtk_h264_sps_param { > > + unsigned char chroma_format_idc; > > + unsigned char bit_depth_luma_minus8; > > + unsigned char bit_depth_chroma_minus8; > > + unsigned char log2_max_frame_num_minus4; > > + unsigned char pic_order_cnt_type; > > + unsigned char log2_max_pic_order_cnt_lsb_minus4; > > + unsigned char max_num_ref_frames; > > + unsigned char separate_colour_plane_flag; > > + unsigned short pic_width_in_mbs_minus1; > > + unsigned short
Re: [PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
Hi Alex, Thanks for the patch. On Fri, 26 Feb 2021 at 07:06, Alexandre Courbot wrote: > > From: Yunfei Dong > > Add support for H.264 decoding using the stateless API, as supported by > MT8183. This support takes advantage of the V4L2 H.264 reference list > builders. > > Signed-off-by: Yunfei Dong > [acourbot: refactor, cleanup and split] > Co-developed-by: Alexandre Courbot > Signed-off-by: Alexandre Courbot > --- > drivers/media/platform/Kconfig| 1 + > drivers/media/platform/mtk-vcodec/Makefile| 1 + > .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ > .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + > .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + > 5 files changed, 813 insertions(+) > create mode 100644 drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > > diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig > index fd1831e97b22..c27db5643712 100644 > --- a/drivers/media/platform/Kconfig > +++ b/drivers/media/platform/Kconfig > @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC > select V4L2_MEM2MEM_DEV > select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU > select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP > + select V4L2_H264 > help > Mediatek video codec driver provides HW capability to > encode and decode in a range of video formats on MT8173 > diff --git a/drivers/media/platform/mtk-vcodec/Makefile > b/drivers/media/platform/mtk-vcodec/Makefile > index 4ba93d838ab6..ca8e9e7a9c4e 100644 > --- a/drivers/media/platform/mtk-vcodec/Makefile > +++ b/drivers/media/platform/mtk-vcodec/Makefile > @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o \ > mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ > vdec/vdec_vp8_if.o \ > vdec/vdec_vp9_if.o \ > + vdec/vdec_h264_req_if.o \ > mtk_vcodec_dec_drv.o \ > vdec_drv_if.o \ > vdec_vpu_if.o \ > diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > new file mode 100644 > index ..2fbbfbbcfbec > --- /dev/null > +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c > @@ -0,0 +1,807 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +#include > +#include > +#include > +#include > +#include > + > +#include "../vdec_drv_if.h" > +#include "../mtk_vcodec_util.h" > +#include "../mtk_vcodec_dec.h" > +#include "../mtk_vcodec_intr.h" > +#include "../vdec_vpu_if.h" > +#include "../vdec_drv_base.h" > + > +#define NAL_NON_IDR_SLICE 0x01 > +#define NAL_IDR_SLICE 0x05 > +#define NAL_H264_PPS 0x08 Not used? > +#define NAL_TYPE(value)((value) & 0x1F) > + I believe you may not need the NAL type. > +#define BUF_PREDICTION_SZ (64 * 4096) > +#define MB_UNIT_LEN16 > + > +/* get used parameters for sps/pps */ > +#define GET_MTK_VDEC_FLAG(cond, flag) \ > + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } > +#define GET_MTK_VDEC_PARAM(param) \ > + { dst_param->param = src_param->param; } > +/* motion vector size (bytes) for every macro block */ > +#define HW_MB_STORE_SZ 64 > + > +#define H264_MAX_FB_NUM17 > +#define H264_MAX_MV_NUM32 > +#define HDR_PARSING_BUF_SZ 1024 > + > +/** > + * struct mtk_h264_dpb_info - h264 dpb information > + * @y_dma_addr: Y bitstream physical address > + * @c_dma_addr: CbCr bitstream physical address > + * @reference_flag: reference picture flag (short/long term reference > picture) > + * @field: field picture flag > + */ > +struct mtk_h264_dpb_info { > + dma_addr_t y_dma_addr; > + dma_addr_t c_dma_addr; > + int reference_flag; > + int field; > +}; > + > +/** > + * struct mtk_h264_sps_param - parameters for sps > + */ > +struct mtk_h264_sps_param { > + unsigned char chroma_format_idc; > + unsigned char bit_depth_luma_minus8; > + unsigned char bit_depth_chroma_minus8; > + unsigned char log2_max_frame_num_minus4; > + unsigned char pic_order_cnt_type; > + unsigned char log2_max_pic_order_cnt_lsb_minus4; > + unsigned char max_num_ref_frames; > + unsigned char separate_colour_plane_flag; > + unsigned short pic_width_in_mbs_minus1; > + unsigned short pic_height_in_map_units_minus1; > + unsigned int max_frame_nums; > + unsigned char qpprime_y_zero_transform_bypass_flag; > + unsigned char delta_pic_order_always_zero_flag; > + unsigned char frame_mbs_only_flag; > + unsigned char mb_adaptive_frame_field_flag; > + unsigned char direct_8x8_inference_flag; > + unsigned char reserved[3]; > +}; > + >
[PATCH v3 06/15] media: mtk-vcodec: vdec: support stateless H.264 decoding
From: Yunfei Dong Add support for H.264 decoding using the stateless API, as supported by MT8183. This support takes advantage of the V4L2 H.264 reference list builders. Signed-off-by: Yunfei Dong [acourbot: refactor, cleanup and split] Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot --- drivers/media/platform/Kconfig| 1 + drivers/media/platform/mtk-vcodec/Makefile| 1 + .../mtk-vcodec/vdec/vdec_h264_req_if.c| 807 ++ .../media/platform/mtk-vcodec/vdec_drv_if.c | 3 + .../media/platform/mtk-vcodec/vdec_drv_if.h | 1 + 5 files changed, 813 insertions(+) create mode 100644 drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index fd1831e97b22..c27db5643712 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -295,6 +295,7 @@ config VIDEO_MEDIATEK_VCODEC select V4L2_MEM2MEM_DEV select VIDEO_MEDIATEK_VCODEC_VPU if VIDEO_MEDIATEK_VPU select VIDEO_MEDIATEK_VCODEC_SCP if MTK_SCP + select V4L2_H264 help Mediatek video codec driver provides HW capability to encode and decode in a range of video formats on MT8173 diff --git a/drivers/media/platform/mtk-vcodec/Makefile b/drivers/media/platform/mtk-vcodec/Makefile index 4ba93d838ab6..ca8e9e7a9c4e 100644 --- a/drivers/media/platform/mtk-vcodec/Makefile +++ b/drivers/media/platform/mtk-vcodec/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_VIDEO_MEDIATEK_VCODEC) += mtk-vcodec-dec.o \ mtk-vcodec-dec-y := vdec/vdec_h264_if.o \ vdec/vdec_vp8_if.o \ vdec/vdec_vp9_if.o \ + vdec/vdec_h264_req_if.o \ mtk_vcodec_dec_drv.o \ vdec_drv_if.o \ vdec_vpu_if.o \ diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c new file mode 100644 index ..2fbbfbbcfbec --- /dev/null +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_req_if.c @@ -0,0 +1,807 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include +#include +#include + +#include "../vdec_drv_if.h" +#include "../mtk_vcodec_util.h" +#include "../mtk_vcodec_dec.h" +#include "../mtk_vcodec_intr.h" +#include "../vdec_vpu_if.h" +#include "../vdec_drv_base.h" + +#define NAL_NON_IDR_SLICE 0x01 +#define NAL_IDR_SLICE 0x05 +#define NAL_H264_PPS 0x08 +#define NAL_TYPE(value)((value) & 0x1F) + +#define BUF_PREDICTION_SZ (64 * 4096) +#define MB_UNIT_LEN16 + +/* get used parameters for sps/pps */ +#define GET_MTK_VDEC_FLAG(cond, flag) \ + { dst_param->cond = ((src_param->flags & flag) ? (1) : (0)); } +#define GET_MTK_VDEC_PARAM(param) \ + { dst_param->param = src_param->param; } +/* motion vector size (bytes) for every macro block */ +#define HW_MB_STORE_SZ 64 + +#define H264_MAX_FB_NUM17 +#define H264_MAX_MV_NUM32 +#define HDR_PARSING_BUF_SZ 1024 + +/** + * struct mtk_h264_dpb_info - h264 dpb information + * @y_dma_addr: Y bitstream physical address + * @c_dma_addr: CbCr bitstream physical address + * @reference_flag: reference picture flag (short/long term reference picture) + * @field: field picture flag + */ +struct mtk_h264_dpb_info { + dma_addr_t y_dma_addr; + dma_addr_t c_dma_addr; + int reference_flag; + int field; +}; + +/** + * struct mtk_h264_sps_param - parameters for sps + */ +struct mtk_h264_sps_param { + unsigned char chroma_format_idc; + unsigned char bit_depth_luma_minus8; + unsigned char bit_depth_chroma_minus8; + unsigned char log2_max_frame_num_minus4; + unsigned char pic_order_cnt_type; + unsigned char log2_max_pic_order_cnt_lsb_minus4; + unsigned char max_num_ref_frames; + unsigned char separate_colour_plane_flag; + unsigned short pic_width_in_mbs_minus1; + unsigned short pic_height_in_map_units_minus1; + unsigned int max_frame_nums; + unsigned char qpprime_y_zero_transform_bypass_flag; + unsigned char delta_pic_order_always_zero_flag; + unsigned char frame_mbs_only_flag; + unsigned char mb_adaptive_frame_field_flag; + unsigned char direct_8x8_inference_flag; + unsigned char reserved[3]; +}; + +/** + * struct mtk_h264_pps_param - parameters for pps + */ +struct mtk_h264_pps_param { + unsigned char num_ref_idx_l0_default_active_minus1; + unsigned char num_ref_idx_l1_default_active_minus1; + unsigned char weighted_bipred_idc; + char pic_init_qp_minus26; + char chroma_qp_index_offset; + char second_chroma_qp_index_offset; + unsigned char