qn1550385020

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020  发布于  2019-03-13 15:57:54
采纳率 0%
3个问答
5138

HI_MPI_VENC_SendFrame报错

 
场景:
想把一张由BGR转成YUV的图片送到 VENC 模块编码成jpeg。

前提:
1 SDK初始化成功;
2 SAMPLE_COMM_VENC_SnapStart(0, &size, HI_FALSE);调用成功
3 HI_MPI_VENC_StartRecvFrame(0, &stRecvParam); 调用成功
4 直接将YUV图片的虚拟地址中的数据写成文件,图片没什么问题,能使用工具看到图像。

问题:在构造了VIDEO_FRAME_INFO_S 变量之后,将相应的数据填好,然后直接调用 HI_MPI_VENC_SendFrame ,发现报错了
错误码 :A0088003 参数超出合法范围。
错误信息:<3>[  venc] [Func]:VencCheckVideoInfo [Line]:1509 [Info]:Venc 1,Video buffer of the VideoFrame is error!!

请问有哪位开发过程中遇到过相似的问题没?
我来回答
回答10个
时间排序
认可量排序

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020 2019-03-13 18:47:18
认可0
问题找到了,出现这个问题的原因是因为 构造 VIDEO_FRAME_INFO_S  的时候,
之前是通过HI_MPI_SYS_MmzAlloc_Cached接口分配的phy_addr 和 vir_addr。获取不到u32PoolId;
现在改成了
VB_BLK handleY = VB_INVALID_HANDLE;                                                  
do {                                                                                 
    handleY = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, height * width * 3 / 2,  NULL);  
}while (VB_INVALID_HANDLE == handleY);                                               
                                                                                    
VB_POOL poolID =  HI_MPI_VB_Handle2PoolId (handleY);
yuv_phy_addr = HI_MPI_VB_Handle2PhysAddr(handleY);                                   
yuv_vir_addr = (std::uint8_t*)HI_MPI_SYS_Mmap(yuv_phy_addr, height * width * 3 / 2);
然后将 VIDEO_FRAME_INFO_S  中的 u32PoolId 赋值为poolID 就可以了。

muchforest

0个粉丝

1

问答

0

专栏

0

资料

muchforest 2019-03-27 19:07:16
认可0
我就是这么写的,并没有什么用啊,一直报88003
        VB_BLK handleY  = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, 1920 * 1080 * 3 / 2, NULL);
        if( handleY == VB_INVALID_HANDLE)
        {
                printf("getblock for y failed\n");
                return -1;
        }
       
        VB_POOL poolID =  HI_MPI_VB_Handle2PoolId(handleY);
        printf("pool id %d\n", poolID);

        HI_U64 phyYaddr;
        HI_U64* virYaddr;
        phyYaddr = HI_MPI_VB_Handle2PhysAddr(handleY);
        if( phyYaddr == 0)
        {
                printf("HI_MPI_VB_Handle2PhysAddr for handleY failed\n");
                return -1;
        }
       
        virYaddr = (HI_U64*) HI_MPI_SYS_Mmap(phyYaddr, 1920 * 1080 * 3 / 2);

        printf("address %ld,%ld, %d\n", phyYaddr, virYaddr, poolID);
        pstFrame->stVFrame.u32Width = 1920;
        pstFrame->stVFrame.u32Height = 1080;
        pstFrame->stVFrame.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
        pstFrame->u32PoolId = poolID;
    pstFrame->stVFrame.u64PhyAddr[0] = phyYaddr;
    pstFrame->stVFrame.u64PhyAddr[1] = pstFrame->stVFrame.u64PhyAddr[0] + 1920 * 1080;
   
    pstFrame->stVFrame.u64VirAddr[0] = (HI_U64)(HI_UL)virYaddr;
    pstFrame->stVFrame.u64VirAddr[1] = pstFrame->stVFrame.u64VirAddr[0]  + 1920 * 1080;
   
    pstFrame->stVFrame.u32Stride[0] = 1920;
    pstFrame->stVFrame.u32Stride[1] = 1920;
        pstFrame->stVFrame.enField     = VIDEO_FIELD_FRAME;
   
    pstFrame->stVFrame.enCompressMode = COMPRESS_MODE_NONE;
    pstFrame->stVFrame.enVideoFormat  = VIDEO_FORMAT_LINEAR;
        pstFrame->stVFrame.enDynamicRange = DYNAMIC_RANGE_SDR8;

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020 2019-03-28 10:39:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141111&ptid=73545]muchforest 发表于 2019-3-27 19:07[/url]
我就是这么写的,并没有什么用啊,一直报88003
        VB_BLK handleY  = HI_MPI_VB_GetBlock(VB_INVALID_POOLID ...[/quote]

你是调用的哪个接口报错了?

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020 2019-03-28 10:52:32
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141125&ptid=73545]qn1550385020 发表于 2019-3-28 10:39[/url]
你是调用的哪个接口报错了?[/quote]

如果是调用 HI_MPI_VENC_SendFrame 这个接口失败了,建议你检查下你的u32TimeRef 这个参数赋值了没?
保证这个值偶数增长。

muchforest

0个粉丝

1

问答

0

专栏

0

资料

muchforest 2019-03-28 11:21:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141128&ptid=73545]qn1550385020 发表于 2019-3-28 10:52[/url]
如果是调用 HI_MPI_VENC_SendFrame 这个接口失败了,建议你检查下你的u32TimeRef 这个参数赋值了没?
保 ...[/quote]

我的yuv就一帧图像,想转成jpg,我把这个值设置为0 或者2都不行

muchforest

0个粉丝

1

问答

0

专栏

0

资料

muchforest 2019-03-28 11:22:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141128&ptid=73545]qn1550385020 发表于 2019-3-28 10:52[/url]
如果是调用 HI_MPI_VENC_SendFrame 这个接口失败了,建议你检查下你的u32TimeRef 这个参数赋值了没?
保 ...[/quote]

enModId,这个值需要注意什么吗?

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020 2019-03-28 11:23:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141132&ptid=73545]muchforest 发表于 2019-3-28 11:22[/url]
enModId,这个值需要注意什么吗?[/quote]

    // step4 向编码通道发送数据
    VIDEO_FRAME_INFO_S frame = {0};
    frame.enModId = HI_ID_JPEGE;
    frame.u32PoolId = HI_MPI_VB_Handle2PoolId(handle);
    auto& s = frame.stVFrame;
    s.u32Height = src.rows;
    s.u32Width = src.cols;
    s.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
    s.enField = VIDEO_FIELD_FRAME;
    s.enColorGamut = COLOR_GAMUT_BT709;
    s.u32Stride[0] = s.u32Width;
    s.u32Stride[1] = s.u32Width;
    s.u64PhyAddr[0] = (HI_U64) (yuv_phy_addr);
    s.u64VirAddr[0] = (HI_U64) (yuv_vir_addr);
    s.u64PhyAddr[1] = (HI_U64) (yuv_phy_addr + s.u32Stride[0] * s.u32Height);
    s.u64VirAddr[1] = (HI_U64) (yuv_vir_addr + s.u32Stride[1] * s.u32Height);

    static uint64_t ref_time_index = 0;
    ref_time_index += 2;
    s.u32TimeRef = ref_time_index;
    result = HI_MPI_VENC_SendFrame(venc_id, &frame, -1);

muchforest

0个粉丝

1

问答

0

专栏

0

资料

muchforest 2019-03-28 12:06:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141133&ptid=73545]qn1550385020 发表于 2019-3-28 11:23[/url]
// step4 向编码通道发送数据
    VIDEO_FRAME_INFO_S frame = {0};
    frame.enModId = HI_ID_JP ...[/quote]

还是没搞定,仍然谢谢你

qn1550385020

0个粉丝

3

问答

0

专栏

0

资料

qn1550385020 2019-03-28 14:11:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141138&ptid=73545]muchforest 发表于 2019-3-28 12:06[/url]
还是没搞定,仍然谢谢你[/quote]

cat /dev/logmpp 看下具体的错误信息是什么

qn1533785484

0个粉丝

13

问答

0

专栏

1

资料

qn1533785484 2019-08-07 13:55:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=141128&ptid=73545]qn1550385020 发表于 2019-3-28 10:52[/url]
如果是调用 HI_MPI_VENC_SendFrame 这个接口失败了,建议你检查下你的u32TimeRef 这个参数赋值了没?
保 ...[/quote]

想请教一下, u32TimeRef 这个参数不是图像的序列号么,为什么需要偶数增长呢?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区