前言
HI_S32 HI_MPI_VPSS_GetChnFrame(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VIDEO_FRAME_INFO_S *pstVideoFrame, HI_S32 s32MilliSec);
HI_S32 HI_MPI_VPSS_ReleaseChnFrame (VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VIDEO_FRAME_INFO_S *pstVideoFrame);
typedef struct hiVIDEO_FRAME_INFO_S{
VIDEO_FRAME_S stVFrame; // 视频图像帧
HI_U32 u32PoolId; // 视频缓存池ID
MOD_ID_E enModId; // 当前帧数据是由哪一个硬件逻辑模块写出的} VIDEO_FRAME_INFO_S;typedef struct hiVIDEO_FRAME_S{
HI_U32 u32Width; // 图像宽度
HI_U32 u32Height; // 图像高度
VIDEO_FIELD_E enField; // 帧场模式
PIXEL_FORMAT_E enPixelFormat; // 视频图像像素格式
VIDEO_FORMAT_E enVideoFormat; // 视频图像格式
COMPRESS_MODE_E enCompressMode; // 视频压缩模式
DYNAMIC_RANGE_E enDynamicRange; // 动态范围
COLOR_GAMUT_E enColorGamut; // 色域范围
HI_U32 u32HeaderStride[3]; // 图像压缩头跨距
HI_U32 u32Stride[3]; // 图像数据跨距
HI_U32 u32ExtStride[3]; // 10bit数据位宽的图像,部分格式分开存
HI_U64 u64HeaderPhyAddr[3]; // 压缩头物理地址
HI_U64 u64HeaderVirAddr[3]; // 压缩头虚拟地址,内核态虚拟地址
HI_U64 u64PhyAddr[3]; // 图像数据物理地址
HI_U64 u64VirAddr[3]; // 图像数据虚拟地址,内核态虚拟地址
HI_U64 u64ExtPhyAddr[3]; // 10bit数据位宽度的图像,部分格式分开存
HI_U64 u64ExtVirAddr[3]; // 10bit数据位宽度的图像,部分格式分开存
HI_S16 s16OffsetTop; // 图像顶部剪裁宽度
HI_S16 s16OffsetBottom; // 图像底部剪裁宽度
HI_S16 s16OffsetLeft; // 图像左侧剪裁宽度
HI_S16 s16OffsetRight; // 图像右侧剪裁宽度
HI_U32 u32MaxLuminance; // 显示图像的最大亮度
HI_U32 u32MinLuminance; // 显示图像的最小亮度
HI_U32 u32TimeRef; // 图像帧序列号
HI_U64 u64PTS; // 图像时间戳
HI_U64 u64PrivateData; // 私有数据
HI_U32 u32FrameFlag; // 当前帧的标记,使用FRAME_FLAG_E标记
VIDEO_SUPPLEMENT_S stSupplement; // 图像的补充信息} VIDEO_FRAME_S;void HiMppManager::testGetVPssFrame(){
VIDEO_FRAME_INFO_S videoFrameInfoS;#if 0
// 搜索开开发板用了哪个通道(应该只有2个摄像头,绑定了vpss)
// 结果:探测到开发板在snap抓图模式下在通道组0通道0下有图片
for(int groupIndex = 0; groupIndex < VPSS_MAX_GRP_NUM; groupIndex++)
{
for(int channelIndex = 0; channelIndex < VPSS_MAX_CHN_NUM; channelIndex++)
{
HI_S32 s32MilliSec = 100;
HI_S32 ret = HI_MPI_VPSS_GetChnFrame(groupIndex, channelIndex, &videoFrameInfoS, s32MilliSec);
if(ret == 0)
{
LOG << QString("Succeed to get HI_MPI_VPSS_GetChnFrame(%1, %2, &videoFrameInfoS, %3)")
.arg(groupIndex)
.arg(channelIndex)
.arg(s32MilliSec);
break;#if 0
}else{
LOG << QString("Failed to get HI_MPI_VPSS_GetChnFrame(%1, %2, &videoFrameInfoS, %3): %4")
.arg(groupIndex)
.arg(channelIndex)
.arg(s32MilliSec)
.arg(ret);#endif
}
}
}#endif
while(HI_MPI_VPSS_GetChnFrame(0, 0, &videoFrameInfoS, -1) == 0)
{
LOG << "get frame";
LOG << videoFrameInfoS.stVFrame.enPixelFormat << "PIXEL_FORMAT_YVU_PLANAR_420:" << (int)PIXEL_FORMAT_YVU_PLANAR_420 << "PIXEL_FORMAT_YVU_SEMIPLANAR_420:" << (int)PIXEL_FORMAT_YVU_SEMIPLANAR_420;
LOG << videoFrameInfoS.stVFrame.enVideoFormat;
HI_MPI_VPSS_ReleaseChnFrame(0, 0, &videoFrameInfoS);
LOG << "release frame"; }}













