754
- 收藏
- 点赞
- 分享
- 举报
在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
该回答已被题主采纳为最佳答案
或将文件直接拖到这里
悬赏:
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
-
2024-08-18 19:20:48
-
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-06-14 09:04:05
-
2023-04-12 19:54:47
-
2022-06-12 03:16:28
-
2023-09-19 14:21:44
-
2021-11-26 01:31:19
-
2020-05-13 09:30:49
-
2022-12-21 10:54:00
-
2023-02-27 14:55:56
-
2021-04-09 10:52:42
-
2021-05-08 17:00:29
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5想要咨询一下Sil9135+Sil9134形成的一个显示链路.
-
5Hi3516移植USB摄像头的SDK,如何修改Makefile?
-
5ss928从SD卡启动
-
50HI3516CV610调试raw+ahd,均使用2lane mipi
-
5HI3516DV500接收不到FPGA传过来的BT1120数据,时钟和配置都没问题VI就是检测不到数据~
-
5请教一下,Hi3516DV500 ebaina的SDK有没有实现RTSP推流?
-
5SS928的emmc有32GB,bootargs设置使用16GB,但是为啥能用的只有rootfs的大小
-
33SS928怎样烧写ubuntu系统
-
10ToolPlatform下载rootfs提示网络失败
-
10谁有GK7205V500的SDK
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认