338
- 收藏
- 点赞
- 分享
- 举报
在hi3516dv300开发板上把rgb格式的ive图像转为yuv视频帧
悬赏E币 5 个
已结题
如题,论坛里和csdn里已经有不少关于yuv视频帧转rgb图像的方法了,然而并没有能将ive图像反过来转为yuv视频帧的办法。
自己尝试着写了一个api,结果报了个莫名奇妙的错。
代码如下所示:
HI_S32 rgb2yuvFrame(IPC_IMAGE *srcImage, VIDEO_FRAME_INFO_S *dstFrame)
{
IVE_HANDLE hIveHandle;
IVE_SRC_IMAGE_S pstSrc;
IVE_DST_IMAGE_S pstDst;
IVE_CSC_CTRL_S stCscCtrl;
HI_S32 s32Ret = 0;
stCscCtrl.enMode = IVE_CSC_MODE_PIC_BT709_RGB2YUV;
pstSrc.enType = IVE_IMAGE_TYPE_U8C3_PACKAGE;
pstSrc.u32Width = srcImage->u32Width;
pstSrc.u32Height = srcImage->u32Height;
pstSrc.au64PhyAddr[0] = srcImage->u64PhyAddr;
pstSrc.au64PhyAddr[1] = 0;
pstSrc.au64PhyAddr[2] = 0;
pstSrc.au64VirAddr[0] = srcImage->u64VirAddr;
pstSrc.au64VirAddr[1] = 0;
pstSrc.au64VirAddr[2] = 0;
pstSrc.au32Stride[0] = 1280;
pstSrc.au32Stride[1] = 0;
pstSrc.au32Stride[2] = 0;
pstDst.enType = IVE_IMAGE_TYPE_YUV420SP;
pstDst.u32Width = pstSrc.u32Width;
pstDst.u32Height = pstSrc.u32Height;
s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstDst.au64PhyAddr[0], (void **)&pstDst.au64VirAddr[0],
"User", HI_NULL, pstDst.u32Height * pstSrc.au32Stride[0] * 3);
if (HI_SUCCESS != s32Ret)
{
HI_MPI_SYS_MmzFree(pstDst.au64PhyAddr[0], (void *)pstDst.au64VirAddr[0]);
SAMPLE_PRT("HI_MPI_SYS_MmzFree err\n");
return s32Ret;
}
s32Ret = HI_MPI_SYS_MmzFlushCache(pstDst.au64PhyAddr[0], (void *)pstDst.au64VirAddr[0],
pstDst.u32Height * pstSrc.au32Stride[0] * 3);
if (HI_SUCCESS != s32Ret)
{
HI_MPI_SYS_MmzFree(pstDst.au64PhyAddr[0], (void *)pstDst.au64VirAddr[0]);
SAMPLE_PRT("HI_MPI_SYS_MmzFree err\n");
return s32Ret;
}
memset((void *)pstDst.au64VirAddr[0], 0, pstDst.u32Height * pstSrc.au32Stride[0] * 3);
HI_BOOL bInstant = HI_TRUE;
s32Ret = HI_MPI_IVE_CSC(&hIveHandle, &pstSrc, &pstDst, &stCscCtrl, bInstant);
if (HI_SUCCESS != s32Ret)
{
HI_MPI_SYS_MmzFree(pstDst.au64PhyAddr[0], (void *)pstDst.au64VirAddr[0]);
return s32Ret;
}
if (HI_TRUE == bInstant)
{
HI_BOOL bFinish = HI_TRUE;
HI_BOOL bBlock = HI_TRUE;
s32Ret = HI_MPI_IVE_Query(hIveHandle, &bFinish, bBlock);
while (HI_ERR_IVE_QUERY_TIMEOUT == s32Ret)
{
usleep(100);
s32Ret = HI_MPI_IVE_Query(hIveHandle, &bFinish, bBlock);
}
}
dstFrame->stVFrame.u64VirAddr[0] = pstDst.au64VirAddr[0];
dstFrame->stVFrame.u64VirAddr[1] = pstDst.au64VirAddr[1];
dstFrame->stVFrame.u64VirAddr[2] = pstDst.au64VirAddr[2];
dstFrame->stVFrame.u64PhyAddr[0] = pstDst.au64PhyAddr[0];
dstFrame->stVFrame.u64PhyAddr[1] = pstDst.au64PhyAddr[1];
dstFrame->stVFrame.u64PhyAddr[2] = pstDst.au64PhyAddr[2];
dstFrame->stVFrame.u32Stride[0] = pstDst.au32Stride[0];
dstFrame->stVFrame.u32Stride[1] = pstDst.au32Stride[1];
dstFrame->stVFrame.u32Stride[2] = pstDst.au32Stride[2];
return HI_SUCCESS;
}
SDK的版本号是spc020,希望哪位大神能可怜一下我这个学生党吧,急!
我来回答
回答2个
时间排序
认可量排序
认可0
![易百纳技术社区](/img/web/quest_take.png)
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2022-07-12 23:38:24
-
2022-08-30 11:21:39
-
2021-07-19 17:50:47
-
2021-12-14 11:59:58
-
2020-10-26 11:21:52
-
2023-09-25 17:03:52
-
2023-05-01 16:44:47
-
2019-12-30 22:31:09
-
2023-04-12 19:54:47
-
2023-06-14 09:04:05
-
2023-09-19 14:21:44
-
2022-06-12 03:16:28
-
2021-11-26 01:31:19
-
2022-12-21 10:54:00
-
2023-02-27 14:55:56
-
2020-05-13 09:30:49
-
2021-04-09 10:52:42
-
2021-05-08 17:00:29
-
2019-11-14 10:25:59
无更多相似问答 去提问
![易百纳技术社区](/img/web/quest_unlogin_avatar.png)
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5SS928V100使用PQTools推流至VLC失败
-
10Hi3516CV610安装SDK时编译BSP问题
-
25Hi3516DV500运行PQTools.sh报错问题
-
5自定义算子DecBBox中的参数如何设置
-
5SS928 host_uvc例子读usb相机问题
-
10RV1126 ffmpeg rkmedia vdec 播放器,播放本地mp4问题
-
5RV1126 201型串口连接之后没有打印输出
-
5RV1126开发板能否接4路摄像头?
-
25Linux交叉编译Qt,适配opengl,构建报错
-
50rv1126 鱼眼矫正失败,“FEC MeshXY.bin open error!!!”
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认