qn1554107965

qn1554107965

0个粉丝

3

问答

1

专栏

0

资料

qn1554107965  发布于  2019-11-20 22:35:41
采纳率 0%
3个问答
2891

海思 自定义一帧数据发送到venc

 
海思 自定义一帧数据发送到venc  HI_MPI_VENC_SendFrame failed, s32Ret=0xA0088010
我来回答
回答1个
时间排序
认可量排序

qn1554107965

0个粉丝

3

问答

1

专栏

0

资料

qn1554107965 2019-11-20 22:36:41
认可0
这是创建一帧数据的具体函数
static int create_frame(int width, int height, int stride, VIDEO_FRAME_INFO_S *pstVFrameInfo,int frame)
{
        HI_U32     u32LStride,u32CStride, u32LumaSize;
    HI_U32     u32ChrmSize,u32PhyAddr;
    HI_U32     u32Size;
    VB_BLK VbBlk;
    /* 图像帧结构初始化 */      
    memset(&(pstVFrameInfo->stVFrame),0x00,sizeof(VIDEO_FRAME_S));

    u32LStride  = stride;
    u32CStride  = stride;

    u32LumaSize = (u32LStride * height);
    u32ChrmSize = (u32CStride * height)/2;/* YUV 420 */
    u32Size = 1920*1080*3/2;

    /* alloc video buffer block ---------------------------------------------------------- */
    //VbBlk = HI_MPI_VB_GetBlock(1, u32Size, "ddr1");
    VbBlk = HI_MPI_VB_GetBlock(1, u32Size, HI_NULL);
    if (VB_INVALID_HANDLE == VbBlk) {
        printf("HI_MPI_VB_GetBlock err! size:%d\n",u32Size);
        return -1;
    }
    else
        {
        printf("HI_MPI_VB_GetBlock ok ok o k! size:%d   VbBlk %d\n",u32Size,VbBlk);
        }
   

    u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(VbBlk);
    if (0 == u32PhyAddr) {
        return -1;
    }

    pstVFrameInfo->u32PoolId = HI_MPI_VB_Handle2PoolId(VbBlk);
    if (VB_INVALID_POOLID == pstVFrameInfo->u32PoolId) {
        return -1;
    }
    else
        {
        printf("pstVFrameInfo->u32PoolId--------%d\n",pstVFrameInfo->u32PoolId);
        }
    //printf("HI_MPI_SYS_Mmap--p %p\n",HI_MPI_SYS_Mmap(u32PhyAddr, 1920 * 1080 * 3 / 2));
    HI_VOID * pVirYaddr;
        pVirYaddr = HI_MPI_SYS_Mmap(u32PhyAddr, 1920 * 1080 * 3 / 2);
    printf("pVirYaddr %p  %x \n",pVirYaddr,pVirYaddr);
   

    pstVFrameInfo->stVFrame.u64PhyAddr[0] = u32PhyAddr;
    pstVFrameInfo->stVFrame.u64PhyAddr[1] = pstVFrameInfo->stVFrame.u64PhyAddr[0] + u32LumaSize;
    pstVFrameInfo->stVFrame.u64PhyAddr[2] = pstVFrameInfo->stVFrame.u64PhyAddr[1] + u32ChrmSize;

    pstVFrameInfo->stVFrame.u64VirAddr[0] = (HI_U64)pVirYaddr;               
    printf("u64VirAddr[0]-----%x\n",pstVFrameInfo->stVFrame.u64VirAddr[0]);
    pstVFrameInfo->stVFrame.u64VirAddr[1] = pstVFrameInfo->stVFrame.u64VirAddr[0] + u32LumaSize;
    pstVFrameInfo->stVFrame.u64VirAddr[2] = pstVFrameInfo->stVFrame.u64VirAddr[1] + u32ChrmSize;

    pstVFrameInfo->stVFrame.u32Width  = 1920;
    pstVFrameInfo->stVFrame.u32Height = 1080;
    pstVFrameInfo->stVFrame.u32Stride[0] = 1920;
    pstVFrameInfo->stVFrame.u32Stride[1] = 1920;
   pstVFrameInfo->stVFrame.u32Stride[2] = 1920;
    pstVFrameInfo->stVFrame.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

    pstVFrameInfo->stVFrame.enField = VIDEO_FIELD_INTERLACED; /* Intelaced D1,otherwise VIDEO_FIELD_FRAME */

   

    return 0;
}
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区