Page 1 of 1

请问有对RV1106-REGION区域管理模块OVERLAY功能支持的2BPP像素格式的说明吗

Posted: 2024-03-15 1:15
by luyixdu
如题,在MPI开发文档《Rockchip_Developer_Guide_MPI.pdf》(V1.4.7)的区域管理章节的2.4小节中,看到可支持2BPP的像素格式,如下所示:
9a26a126-124a-4b81-8ea8-4b9da92a2065.png
在文档的修订记录看到说增加了2BPP像素格式的说明,可并未找到,请问能提供这部分的说明吗,万分感谢

Re: 请问有对RV1106-REGION区域管理模块OVERLAY功能支持的2BPP像素格式的说明吗

Posted: 2024-03-15 13:12
by Crocodile
luyixdu wrote: 2024-03-15 1:15 如题,在MPI开发文档《Rockchip_Developer_Guide_MPI.pdf》(V1.4.7)的区域管理章节的2.4小节中,看到可支持2BPP的像素格式,如下所示:
9a26a126-124a-4b81-8ea8-4b9da92a2065.png

在文档的修订记录看到说增加了2BPP像素格式的说明,可并未找到,请问能提供这部分的说明吗,万分感谢
您好,有关 RKMPI 的文档由瑞芯微官方提供,很遗憾目前我们也没有更多2BPP像素格式的说明文档,您可以参考文档进行了解学习。
较为详细的源码:

Code: Select all

<Luckfox-pico SDK>/media/rockit/rockit/mpi/example/mod/test_mpi_rgn.cpp
较为简明的源码:

Code: Select all

<Luckfox-pico SDK>/media/samples/simple_test/simple_venc_osd.c 
以上两份源码编译后的可执行程序默认存放在 luckfox-pico buildroot 镜像的 /oem/usr/bin 中,可以进行测试
以下是个基于simple_venc_osd.c 编写的 2BPP 白色像素填充视频流左上角的测试函数您可以进行参考学习

Code: Select all

RK_S32 test_rgn_overlay_process() {
	printf("========%s========\n", __func__);
	RK_S32 s32Ret = RK_SUCCESS;
	RGN_HANDLE RgnHandle = 0;
	BITMAP_S stBitmap;
	RGN_ATTR_S stRgnAttr;
	RGN_CHN_ATTR_S stRgnChnAttr;

	int u32Width = 64;
	int u32Height = 64;

	MPP_CHN_S stMppChn;
	stMppChn.enModId = RK_ID_VENC;
	stMppChn.s32DevId = 0;
	stMppChn.s32ChnId = 0;
	/****************************************
	step 1: create overlay regions
	****************************************/
	stRgnAttr.enType = OVERLAY_RGN;
	stRgnAttr.unAttr.stOverlay.enPixelFmt = (PIXEL_FORMAT_E)RK_FMT_2BPP;
	stRgnAttr.unAttr.stOverlay.stSize.u32Width = u32Width;
	stRgnAttr.unAttr.stOverlay.stSize.u32Height = u32Height;
	stRgnAttr.unAttr.stOverlay.u32ClutNum = 0;

	s32Ret = RK_MPI_RGN_Create(RgnHandle, &stRgnAttr);
	if (RK_SUCCESS != s32Ret) {
		RK_LOGE("RK_MPI_RGN_Create (%d) failed with %#x!", RgnHandle, s32Ret);
		RK_MPI_RGN_Destroy(RgnHandle);
		return RK_FAILURE;
	}
	RK_LOGI("The handle: %d, create success!", RgnHandle);

	/*********************************************
	step 2: display overlay regions to groups
	*********************************************/
	memset(&stRgnChnAttr, 0, sizeof(stRgnChnAttr));
	stRgnChnAttr.bShow = RK_TRUE;
	stRgnChnAttr.enType = OVERLAY_RGN;
	stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = 0;
	stRgnChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = 0;
	stRgnChnAttr.unChnAttr.stOverlayChn.u32BgAlpha = 100;
	stRgnChnAttr.unChnAttr.stOverlayChn.u32FgAlpha = 100;
	stRgnChnAttr.unChnAttr.stOverlayChn.u32Layer = 0;
	stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bEnable = RK_FALSE;
	stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bForceIntra = RK_TRUE;
	stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.bAbsQp = RK_FALSE;
	stRgnChnAttr.unChnAttr.stOverlayChn.stQpInfo.s32Qp = RK_FALSE;
	stRgnChnAttr.unChnAttr.stOverlayChn.u32ColorLUT[0] = 0x00;
	stRgnChnAttr.unChnAttr.stOverlayChn.u32ColorLUT[1] = 0xFFFFFFF;
	stRgnChnAttr.unChnAttr.stOverlayChn.stInvertColor.bInvColEn = RK_FALSE;
	stRgnChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Width = 16;
	stRgnChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Height = 16;
	stRgnChnAttr.unChnAttr.stOverlayChn.stInvertColor.enChgMod = LESSTHAN_LUM_THRESH;
	stRgnChnAttr.unChnAttr.stOverlayChn.stInvertColor.u32LumThresh = 100;
	s32Ret = RK_MPI_RGN_AttachToChn(RgnHandle, &stMppChn, &stRgnChnAttr);
	if (RK_SUCCESS != s32Ret) {
		RK_LOGE("RK_MPI_RGN_AttachToChn (%d) failed with %#x!", RgnHandle, s32Ret);
		return RK_FAILURE;
	}
	RK_LOGI("Display region to chn success!");

	/*********************************************
	step 3: show bitmap
	*********************************************/
	stBitmap.enPixelFormat = (PIXEL_FORMAT_E)RK_FMT_2BPP;
	stBitmap.u32Width = u32Width;
	stBitmap.u32Height = u32Height;

	RK_U16 ColorBlockSize = stBitmap.u32Height * stBitmap.u32Width;
	stBitmap.pData = malloc(ColorBlockSize/4);
	memset(stBitmap.pData, 0xff, ColorBlockSize/4); //white
		
	s32Ret = RK_MPI_RGN_SetBitMap(RgnHandle, &stBitmap);
	if (s32Ret != RK_SUCCESS) {
		RK_LOGE("RK_MPI_RGN_SetBitMap failed with %#x!", s32Ret);
		return RK_FAILURE;
	}
	return 0;
}


希望这对您有所帮助,如果您有新的发现欢迎您的分享。