qn1562925782

qn1562925782

0个粉丝

1

问答

0

专栏

0

资料

qn1562925782  发布于  2019-07-12 18:29:38
采纳率 0%
1个问答
4755

Hi3559A读取YUV文件调用VENC进行H264编码,HI_MPI_VENC_SendFrame报错0xa0088003

     
Hi3559A读取YUV文件调用VENC进行H264编码,VB创建和通道创建都成功了,在调用HI_MPI_VENC_SendFrame函数时报错0xa0088003,/dev/logmpp日志输出以下内容:



[code]<3>[  venc] [Func]:AvcCheckPixelFormat [Line]:1379 [Info]:H.264 don't support format 25.
<3>[  venc] [Func]:VencCheckVideoInfo [Line]:1575 [Info]:Venc 0 : Sendinfo pic info err.[/code]


format 25应该是PIXEL_FORMAT_YVU_SEMIPLANAR_420,海思的SDK中明确说明VENC是支持Semi-planar YVU 4:2:0格式的<>,不知为何会报这个错。

YUV文件读取和发送给VNC的代码片段如下:
[code]未省略代码,出错后面的部分就不发了
HI_S32 SAMPLE_COMM_VENC_GetVencStreamProcEx(HI_VOID)
{
    //...一些变量定义

    /******************************************
     step 1:  check & prepare save-file & venc-fd
    ******************************************/
    /* decide the stream file name, and open file to save stream */
    /* Set Venc Fd. */
        pFile1 = fopen("test.h264","wb+");
        if(pFile1 == NULL)
        {
                printf("new test.h265 file failed\n");
                return -1;
        }
       
        pFile2 = fopen("1080P.yuv","r+");
    // pFile2 = fopen("1080P.yuv","r+");
        if(pFile2 == NULL)
        {
                printf("open 1080P.yuv file failed\n");
                return -1;
        }
       
    VencFd = HI_MPI_VENC_GetFd(VencChn);
    if (VencFd < 0)
    {
        SAMPLE_PRT("HI_MPI_VENC_GetFd failed with %#x!\n",VencFd);
        return -1;
    }
       
        VB_BLK handleY = VB_INVALID_HANDLE;
        HI_U64 phyYaddr;
    HI_U64 *pVirYaddr;
   
        VIDEO_FRAME_INFO_S *pstFrame = malloc(sizeof(VIDEO_FRAME_INFO_S));
       
    /******************************************
     step 2:  Start to get streams of each channel.
    ******************************************/
    while (frame < 30)
    {
                /* 分配物理buffer并且映射到用户空间 */
                do
                {
                        handleY = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, 1920 * 1080 * 3 / 2 , NULL);
            if (VB_INVALID_HANDLE == handleY) {
                SAMPLE_PRT("handleY is VB_INVALID_HANDLE\n");
            }
                }
                while (VB_INVALID_HANDLE == handleY);       
                if( handleY == VB_INVALID_HANDLE)
                {
                        printf("getblock for y failed\n");
                        return -1;
                }
                else {
            printf("handleY is %d\n", handleY);
        }
                VB_POOL poolID =  HI_MPI_VB_Handle2PoolId (handleY);//得到poolID
        printf("pool ID = %d\n", poolID);

                phyYaddr = HI_MPI_VB_Handle2PhysAddr(handleY);
                if( phyYaddr == 0)
                {
                        printf("HI_MPI_VB_Handle2PhysAddr for handleY failed\n");
                        return -1;
                }
               
                pVirYaddr = (HI_U64 *) HI_MPI_SYS_Mmap(phyYaddr, 1920 * 1080 * 3 / 2);
               
                /* 图像帧结构初始化 */
                memset(&(pstFrame->stVFrame),0x00,sizeof(VIDEO_FRAME_S));
                pstFrame->stVFrame.u32Width = 1920;
                pstFrame->stVFrame.u32Height = 1080;
                pstFrame->stVFrame.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420;//;
                pstFrame->u32PoolId = poolID;
        pstFrame->enModId = HI_ID_USER;
                pstFrame->stVFrame.u64PhyAddr[0] = phyYaddr;
                pstFrame->stVFrame.u64PhyAddr[1] = phyYaddr + 1920 * 1080;
                pstFrame->stVFrame.u64VirAddr[0] = (HI_U64)(HI_UL)pVirYaddr;
                pstFrame->stVFrame.u64VirAddr[1] = (HI_U64)(HI_UL)pVirYaddr + 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;
        pstFrame->stVFrame.enColorGamut = COLOR_GAMUT_BT709;
                pstFrame->stVFrame.u64PTS     = frame * 40;
        pstFrame->stVFrame.u32TimeRef = frame * 2;

                /*  从原始文件读取yuv420sp帧,然后调用给编码接口 */
        s32Ret = fread(pVirYaddr,1920 * 1080 * 3 / 2, 1, pFile2);
                if(s32Ret < 0)
                {
                        printf("fread yuv420sp failed\n");
                        return -1;
                }
        else {
            printf("Read 1 frame from file : length = %d\n", s32Ret);
        }

        getchar();

                /* 开始发送读到的数据到编码接口 报错!*/
                s32Ret = HI_MPI_VENC_SendFrame(VencChn, pstFrame, -1);[/code]
我来回答
回答7个
时间排序
认可量排序

qn1562925782

0个粉丝

1

问答

0

专栏

0

资料

qn1562925782 2019-07-12 18:51:57
认可0
补充一下,在创建完通道,并开始发数据之前, cat /proc/umap/venc结果如下:
[code]cat /proc/umap/venc

[VENC] Version: [Hi3559AV100_MPP_V2.0.1.0 B092 Release], Build Time[Jul 12 2018, 21:25:32]

-----MODULE PARAM--------------------------------------------------------------
    VencBufferCache   FrameBufRecycle
                  0                 0

-----VENC CHN ATTR 1-----------------------------------------------------------
      ID   Width  Height  Type  ByFrame    Sequence   LeftBytes     LeftFrm  CurPacks   GopMode  Prio
       0    1920    1080    96        Y           0           0           0         0   NormalP     0

-----VENC CHN ATTR 2-----------------------------------------------------------
   VeStr   SrcFr   TarFr     Timeref  PixFmt PicAddr      WakeUpFrmCnt
       N      -1      -1           1      NA  0x       0           1

-----VENC CHN RECEIVE STAT-----------------------------------------------------
      ID       Start     StartEx    RecvLeft     EncLeft    JpegEncodeMode
       0           1           1           1           1                NA

-----VENC VPSS QUERY-----------------------------------------------------------
      ID       Query     QueryOk     QueryFR       Invld        Full      VbFail   QueryFail     InfoErr        Stop
       0           0           0           0           0           0           0           0           0           0

-----VENC SEND1----------------------------------------------------------------
      ID     VpssSnd     VInfErr     OthrSnd     OInfErr        Send        Stop        Full     CropErr    DrectSnd     SizeErr
       0           0           0           0           0           0           0           0           0           0           0

-----VENC SEND2----------------------------------------------------------------
      ID     SendVgs     StartOk   StartFail       IntOk     IntFail      SrcAdd      SrcSub     DestAdd     DestSub
       0           0           0           0           0           0           0           0           0           0

-----VENC PIC QUEUE STATE------------------------------------------------------
      ID    Free    Busy     Vgs
       0       6       0       0

-----VENC CHNL INFO------------------------------------------------------------
      ID         Inq       InqOk       Start     StartOk      Config     VencInt  ChaResLost    OverLoad        Skip
       0        4212           0           0           0           0           0           0           0           0

-----VENC CROP INFO------------------------------------------------------------
      ID  CropEn  StartX  StartY   Width  Height
       0       N       0       0       0       0

-----ROI INFO------------------------------------------------------------------
     ID      Type     Index    bRoiEn    bAbsQp    Qp     Width    Height    StartX    StartY


-----VENC STREAM STATE---------------------------------------------------------
      ID     FreeCnt     BusyCnt     UserCnt     UserGet     UserRls    GetTimes    Interval   FrameRate
       0           0           0           0           0           0           0           0           0[/code]

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-07-15 09:14:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=145349&ptid=75170]qn1562925782 发表于 2019-7-12 18:51[/url]
补充一下,在创建完通道,并开始发数据之前, cat /proc/umap/venc结果如下:[/quote]

PIXEL_FORMAT_YVU_SEMIPLANAR_420 这个是25,

logmpp:
<3>[  venc] [Func]:AvcCheckPixelFormat [Line]:1379 [Info]:H.264 don't support format 25.

说明不支持

试试 PIXEL_FORMAT_YUV_SEMIPLANAR_420
一般来说是YUV,  YVU看上去好奇怪, 可以对比一下3.0和4.0的文档, 3.0的是YUV

qn1562925782

0个粉丝

1

问答

0

专栏

0

资料

qn1562925782 2019-07-17 11:21:31
认可0
谢谢!已经找到问题,是SDK版本的问题
aqws
aqws   回复   qn1562925782  2022-11-20 09:24:45
0

楼主能把通过的代码分享一下吗,最近在做相关的内容,谢谢

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-07-17 11:26:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=145478&ptid=75170]qn1562925782 发表于 2019-7-17 11:21[/url]
谢谢!已经找到问题,是SDK版本的问题[/quote]

:victory:


pstFrame->stVFrame.enColorGamut = COLOR_GAMUT_BT709;
                pstFrame->stVFrame.u64PTS     = frame * 40;
        pstFrame->stVFrame.u32TimeRef = frame * 2;

第一个 709 是啥?
第二个是 是毫秒,  意思是25fs?
第三个 是啥?

qn1585199905

0个粉丝

1

问答

0

专栏

0

资料

qn1585199905 2020-04-27 13:53:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=145478&ptid=75170]qn1562925782 发表于 2019-7-17 11:21[/url]
谢谢!已经找到问题,是SDK版本的问题[/quote]

也遇到了同样的问题:dizzy::dizzy::dizzy:
楼主能把通过的代码分享一下吗,谢谢!!!

qn1585199905

0个粉丝

1

问答

0

专栏

0

资料

qn1585199905 2020-05-06 13:06:43
认可0
-----venc start-------
qt-venc[1531]: unhandled level 3 permission fault (11) at 0x7f78c5a000, esr 0x9200004f
pgd = ffffffc0209f3000
[7f78c5a000] *pgd=0000000060a0d003, *pud=0000000060a0d003
, *pmd=0000000060a6b003, *pte=00200000463b9fd3


CPU: 1 PID: 1531 Comm: qt-venc Tainted: P           O    4.9.37 #1
Hardware name: Hisilicon HI3559AV100 DEMO Board (DT)
task: ffffffc02164a400 task.stack: ffffffc0203a0000
PC is at 0x7f78aa2048
LR is at 0x7f78a93d58
pc : [<0000007f78aa2048>] lr : [<0000007f78a93d58>] pstate: 20000000
sp : 0000007ff2aa8740
x29: 0000007ff2aa8740 x28: 0000000000859620
x27: 0000000000000001 x26: 0000007f78c5a000
x25: 0000007f78c5a000 x24: 0000007f78e32010
x23: 0000000000000500 x22: 0000000000000001
x21: 0000000000000500 x20: 0000000000001000
x19: 00000000008591c0 x18: 0000000000000001
x17: 0000007f78a88640 x16: 0000000000607028
x15: 0000000000000611 x14: 0000000000000000
x13: 7979797979797979 x12: 7a7a7a7a7a7a7a7a
x11: 1d1d1d1d1d1d1d1c x10: 1c1c1c1d1d1d1d1d
x9 : 1e1e1e1c1c1c1d1d x8 : 1d1d1d1d1d1f2228
x7 : 7878787878797979 x6 : 7979797979797979
x5 : 0000007f78c5a500 x4 : 000000000085bca0
x3 : 0000007f78c5a000 x2 : 0000000000000500
x1 : 000000000085b7a0 x0 : 0000007f78c5a000

Segmentation fault

我这边报的好像是内存问题,有遇到类似情况的小伙伴吗?
一起交流一下吧,
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区