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

  • 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;
    }
    
    
    
    希望这对您有所帮助,如果您有新的发现欢迎您的分享。