请问有对RV1106-REGION区域管理模块OVERLAY功能支持的2BPP像素格式的说明吗
-
如题,在MPI开发文档《Rockchip_Developer_Guide_MPI.pdf》(V1.4.7)的区域管理章节的2.4小节中,看到可支持2BPP的像素格式,如下所示:在文档的修订记录看到说增加了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
以下是个基于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;
}