3208
- 收藏
- 点赞
- 分享
- 举报
hi3520D如何获取解码后的视频数据
本帖最后由 July 于 2017-7-13 16:48 编辑
sdk中的sample_vdec.c跑了下,可以读取h264视频文件,通过VGA可以显示出图像。
我要做的是对输入的每一帧视频都进行一定的处理,比如变成灰度图像,再将结果进行显示。目前先在sample_vdec.c 这个程序基础上进行修改。这其中要得到vdec解码后的视频帧,问题就是如何得到解码后的数据(YUV?),或者经过vdec解码后的数据保存在了哪里?
程序中只看到hi_mpi_vdec_sendstream()应该是向解码通道传输数据,但是处理后的结果呢?
/******************* send stream *****************/
if (s32BlockMode == HI_IO_BLOCK)
{
s32Ret=HI_MPI_VDEC_SendStream(pstSendParam->VdChn, &stStream, HI_IO_BLOCK);
}
else if (s32BlockMode == HI_IO_NOBLOCK)
{
s32Ret=HI_MPI_VDEC_SendStream(pstSendParam->VdChn, &stStream, HI_IO_NOBLOCK);
}
else
{
s32Ret=HI_MPI_VDEC_SendStream_TimeOut(pstSendParam->VdChn, &stStream, 8000);
}
if (HI_SUCCESS == s32Ret)
{
s32UsedBytes = s32UsedBytes +s32ReadLen + start;
printf("usedbytes:%d,readlen:%d\n",s32UsedBytes,s32ReadLen);
}
else
{
if (s32BlockMode != HI_IO_BLOCK)
{
SAMPLE_PRT("failret:%x\n",s32Ret);
}
usleep(s32IntervalTime);
}
usleep(20000);
// /******************************************
// Self---function 1: get decoded pic from vdec
// ******************************************/
//
// if(pstSendParam->VdChn == 0 && s32BlockMode == HI_IO_BLOCK)
// {
// printf("To get image from vdec.\n");
// s32Ret = HI_MPI_VDEC_GetImage(pstSendParam->VdChn, s32BlockMode, pstFrameInfo);
// if (s32Ret != HI_SUCCESS)
// {
// SAMPLE_PRT("HI_MPI_VDEC_GetImage failed with %#x!\n", s32Ret);
// }
// else
// {
// printf("get image from vdec success.\n");
// s32Ret = HI_MPI_VDEC_ReleaseImage(pstSendParam->VdChn, pstFrameInfo);
// if (s32Ret != HI_SUCCESS)
// {
// SAMPLE_PRT("HI_MPI_VDEC_ReleaseImage failed with %#x!\n", s32Ret);
// }
// }
// }
上面的代码注释中是我自己加的,目的是通过getimage得到vdec之后的图像数据,但是报错0xA0058003,参数超出合法范围。
sdk中的sample_vdec.c跑了下,可以读取h264视频文件,通过VGA可以显示出图像。
我要做的是对输入的每一帧视频都进行一定的处理,比如变成灰度图像,再将结果进行显示。目前先在sample_vdec.c 这个程序基础上进行修改。这其中要得到vdec解码后的视频帧,问题就是如何得到解码后的数据(YUV?),或者经过vdec解码后的数据保存在了哪里?
程序中只看到hi_mpi_vdec_sendstream()应该是向解码通道传输数据,但是处理后的结果呢?
/******************* send stream *****************/
if (s32BlockMode == HI_IO_BLOCK)
{
s32Ret=HI_MPI_VDEC_SendStream(pstSendParam->VdChn, &stStream, HI_IO_BLOCK);
}
else if (s32BlockMode == HI_IO_NOBLOCK)
{
s32Ret=HI_MPI_VDEC_SendStream(pstSendParam->VdChn, &stStream, HI_IO_NOBLOCK);
}
else
{
s32Ret=HI_MPI_VDEC_SendStream_TimeOut(pstSendParam->VdChn, &stStream, 8000);
}
if (HI_SUCCESS == s32Ret)
{
s32UsedBytes = s32UsedBytes +s32ReadLen + start;
printf("usedbytes:%d,readlen:%d\n",s32UsedBytes,s32ReadLen);
}
else
{
if (s32BlockMode != HI_IO_BLOCK)
{
SAMPLE_PRT("failret:%x\n",s32Ret);
}
usleep(s32IntervalTime);
}
usleep(20000);
// /******************************************
// Self---function 1: get decoded pic from vdec
// ******************************************/
//
// if(pstSendParam->VdChn == 0 && s32BlockMode == HI_IO_BLOCK)
// {
// printf("To get image from vdec.\n");
// s32Ret = HI_MPI_VDEC_GetImage(pstSendParam->VdChn, s32BlockMode, pstFrameInfo);
// if (s32Ret != HI_SUCCESS)
// {
// SAMPLE_PRT("HI_MPI_VDEC_GetImage failed with %#x!\n", s32Ret);
// }
// else
// {
// printf("get image from vdec success.\n");
// s32Ret = HI_MPI_VDEC_ReleaseImage(pstSendParam->VdChn, pstFrameInfo);
// if (s32Ret != HI_SUCCESS)
// {
// SAMPLE_PRT("HI_MPI_VDEC_ReleaseImage failed with %#x!\n", s32Ret);
// }
// }
// }
上面的代码注释中是我自己加的,目的是通过getimage得到vdec之后的图像数据,但是报错0xA0058003,参数超出合法范围。
我来回答
回答2个
时间排序
认可量排序
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2015-05-30 17:21:40
-
2020-03-05 17:53:59
-
2017-08-14 14:28:15
-
2016-11-17 18:43:28
-
2016-03-15 14:07:26
-
2016-10-12 11:35:10
-
2015-06-05 08:39:04
-
2021-01-14 11:46:44
-
2017-03-22 17:26:44
-
2014-12-19 15:53:12
-
2018-12-21 01:06:21
-
2018-07-28 10:11:05
-
2016-08-15 17:52:45
-
2014-12-01 15:48:52
-
2017-02-14 15:34:18
-
2017-04-07 17:53:52
-
2019-07-16 16:39:44
-
2018-12-21 16:47:52
-
2015-09-20 20:42:28
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认