read_vdec_thread线程的用处
read_vdec_thread线程主要是获取每一帧VDEC解码数据,并打印出来每一帧数据的具体信息。
代码:
//用于从 VDEC 解码器获取每一帧解码后的图像数据
void *read_vdec_thread(void *args)
{
pthread_detach(pthread_self());
MEDIA_BUFFER mb = NULL;
int ret;
while (1)
{
// 获取每一帧VDEC解码数据
mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VDEC, 0, -1);
if (!mb)
{
printf("RK_MPI_SYS_GetMediaBuffer get vdec null buffer....\n");
return NULL;
}
MB_IMAGE_INFO_S stImageInfo = {0};
ret = RK_MPI_MB_GetImageInfo(mb, &stImageInfo); // 从指定的图像缓冲区MEDIA_BUFFER中获取图像信息
if (ret)
{
printf("Get image info failed! ret = %d\n", ret);
RK_MPI_MB_ReleaseBuffer(mb);
return NULL;
}
// 打印图像信息
printf("Get Frame:ptr:%p, fd:%d, size:%zu, mode:%d, channel:%d, "
"timestamp:%lld, ImgInfo:<wxh %dx%d, fmt 0x%x>\n",
RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetFD(mb), RK_MPI_MB_GetSize(mb),
RK_MPI_MB_GetModeID(mb), RK_MPI_MB_GetChannelID(mb),
RK_MPI_MB_GetTimestamp(mb), stImageInfo.u32Width,
stImageInfo.u32Height, stImageInfo.enImgType);
//释放mb
RK_MPI_MB_ReleaseBuffer(mb);
return NULL;
}
}
线程执行流程图:
read_vdec_thread线程主要是获取每一帧VDEC解码数据,并打印出来每一帧数据的具体信息。这里需要用到的API是RK_MPI_SYS_GetMediaBuffer获取每一帧VDEC的数据,并调用RK_MPI_MB_GetImageInfo打印出我们每一帧数据的具体信息。
RK_MPI_SYS_GetMediaBuffer:
MEDIA_BUFFER mb = NULL;
mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VDEC, 0, -1);
RK_MPI_MB_GetImageInfo的解释如下:
MEDIA_BUFFER mb = NULL;
mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VDEC, 0, -1);
MB_IMAGE_INFO_S stImageInfo = {0}; //初始化图像格式
ret = RK_MPI_MB_GetImageInfo(mb, &stImageInfo);
最后面把数据打印出来就可了 。这个线程的工作就完了。