qn1568618437

qn1568618437

0个粉丝

2

问答

0

专栏

0

资料

qn1568618437  发布于  2019-09-20 16:24:04
采纳率 0%
2个问答
2348

3519运行SDK中的sample_venc 返回段错误,

 
我是再调用HI_MPI_VPSS_GetChnFrame函数后,欲取YUV数据,再这个函数后调用了vi_dump里面的sample_yuv_8bit_dump这个函数,初次之外没做任何操作,程序报段错误,希望路过的大佬指点迷津,菜鸟不胜感激。
函数运行后的打印如下:
/data/demo # ./sample_venc 2
The SONY_IMX290_2M_30FPS,the enMode is 0
[SAMPLE_VENC_CheckSensor]-469: Sensor size is (1920,1080), but encode chnl is (1920,1080) !
The SONY_IMX290_2M_30FPS,the enMode is 0
[SAMPLE_COMM_VI_SetMipiAttr]-1333: ============= MipiDev 0, SetMipiAttr enWDRMode: 0
[Func]:cmos_set_wdr_mode [Line]:1345 [Info]:linear mode
===IMX290 1080P 30fps 12bit LINE Init OK!===
The SONY_IMX290_2M_30FPS,the enMode is 0
[SAMPLE_COMM_ISP_Thread]-173: ISP Dev 0 running !
please input choose gop mode!
         0) NORMALP.
         1) DUALP.
         2) SMARTP.
         3) BIPREDB
0
PT_H265
SAMPLE_RC_QPMAP
PT_H264
please press twice ENTER to exit this sample
The PIXEL_FORMAT_YUV_SEMIPLANAR_420!
The phy_addr: 3b6e2600, size: 3110400
stride: 1920,1920
saving......Y......
Segmentation fault
程序退出了!

通过cat /dev/logmpp查看显示:
/data # cat /dev/logmpp
mmz_userdev:mmz_userdev_release: MMB LEAK(pid=252): 0x3E6EC000, 69632 bytes, ''
mmz_userdev:mmz_userdev_release: mmb<0x3e6ec000> mapped to userspace 0xb4126000 will be unmaped!
mmz_userdev:mmz_userdev_release: MMB LEAK(pid=252): 0x3E6FD000, 36864 bytes, ''
mmz_userdev:mmz_userdev_release: mmb<0x3e6fd000> mapped to userspace 0xb411d000 will be unmaped!
mmz_userdev:mmz_userdev_release: MMB LEAK(pid=252): 0x3E706000, 4096 bytes, ''
mmz_userdev:mmz_userdev_release: mmb<0x3e706000> mapped to userspace 0xb411c000 will be unmaped!


函数如下:sample_yuv_8bit_dump:
     if (PIXEL_FORMAT_YVU_SEMIPLANAR_420 == enPixelFormat)  
     {        
         u32Size = (pVBuf->u32Stride[0]) * (pVBuf->u32Height) * 3 / 2;  
         u32UvHeight = pVBuf->u32Height / 2;      
     }
     else if(PIXEL_FORMAT_YVU_SEMIPLANAR_422 == enPixelFormat)
     {
             printf("The PIXEL_FORMAT_YVU_SEMIPLANAR_422!\n");
         u32Size = (pVBuf->u32Stride[0]) * (pVBuf->u32Height) * 2;
         u32UvHeight = pVBuf->u32Height;
     }
     else if(PIXEL_FORMAT_YUV_400 == enPixelFormat)
     {
             printf("The PIXEL_FORMAT_YUV_400!\n");
         u32Size = (pVBuf->u32Stride[0]) * (pVBuf->u32Height);
         u32UvHeight = pVBuf->u32Height;
     }
     else
     {
         printf("%s %d: This YUV format is not support!\n",__func__, __LINE__);
         return;
     }

     phy_addr = pVBuf->u64PhyAddr[0];
         printf("The phy_addr: %x, size: %d\n",phy_addr, u32Size);
     pUserPageAddr[0] = (HI_CHAR*) HI_MPI_SYS_Mmap(phy_addr, u32Size);
     if (HI_NULL == pUserPageAddr[0])
     {
         return;
     }

         printf("stride: %d,%d\n",pVBuf->u32Stride[0], pVBuf->u32Stride[1]);
         pY_map = pUserPageAddr[0];
     pC_map = pY_map + (pVBuf->u32Stride[0]) * (pVBuf->u32Height);

     fprintf(stderr, "saving......Y......\n");
     fflush(stderr);
         if(VIDEO_FORMAT_TILE_16x8 == enVideoFormat)
         {
             for (h = 0; h < pVBuf->u32Height; h++)
             {
                      printf("get......Y........\n");
                 pMemContent = pY_map + h * pVBuf->u32Stride[0];
                         printf("check Segmentation...1........\n");
                 fwrite(pMemContent, pVBuf->u32Stride[0], 1, pfd);
             }
         }
         else
     {
         for (h = 0; h < pVBuf->u32Height; h++)
         {
            pMemContent = pY_map + h * pVBuf->u32Stride[0];
            fwrite(pMemContent, pVBuf->u32Width, 1, pfd);
         }
     }

     if(PIXEL_FORMAT_YUV_400 != enPixelFormat && VIDEO_FORMAT_TILE_16x8 != enVideoFormat)
     {
         fflush(pfd);
         fprintf(stderr, "U......");
         fflush(stderr);
         for (h = 0; h < u32UvHeight; h++)  
         {
                 printf("check Segmentation...4........\n");
             pMemContent = pC_map + h * pVBuf->u32Stride[1];
             pMemContent += 1;

             for (w = 0; w < pVBuf->u32Width / 2; w++)
             {
                 pTmpBuff[w] = *pMemContent;
                 pMemContent += 2;
             }
             fwrite(pTmpBuff, pVBuf->u32Width / 2, 1, pfd);
         }
         fflush(pfd);
         fprintf(stderr, "V......");
         fflush(stderr);
         for (h = 0; h < u32UvHeight; h++)
         {
             pMemContent = pC_map + h * pVBuf->u32Stride[1];

             for (w = 0; w < pVBuf->u32Width / 2; w++)
             {
                 pTmpBuff[w] = *pMemContent;
                 pMemContent += 2;
             }
             fwrite(pTmpBuff, pVBuf->u32Width / 2, 1, pfd);
         }
     }
     fflush(pfd);

     fprintf(stderr, "done  %d!\n", pVBuf->u32TimeRef);
     fflush(stderr);
     HI_MPI_SYS_Munmap(pUserPageAddr[0], u32Size);
     pUserPageAddr[0] = HI_NULL;
     return;
   
我来回答
回答2个
时间排序
认可量排序

qn1568618437

0个粉丝

2

问答

0

专栏

0

资料

qn1568618437 2019-09-20 16:25:46
认可0
希望路过的大佬指点迷津,菜鸟刚开始接触Hi3519

qn1568618437

0个粉丝

2

问答

0

专栏

0

资料

qn1568618437 2019-09-20 17:58:52
认可0
再次运行过后,报的错误如下:
/data/demo # ./sample_venc 2
The SONY_IMX290_2M_30FPS,the enMode is 0
[SAMPLE_VENC_CheckSensor]-469: Sensor size is (1920,1080), but encode chnl is (1920,1080) !
The SONY_IMX290_2M_30FPS,the enMode is 0
[SAMPLE_COMM_SYS_Init]-347: HI_MPI_VB_SetConf failed!
[SAMPLE_VENC_SYS_Init]-246: SAMPLE_COMM_SYS_GetPicSize failed!
[SAMPLE_VENC_VI_Init]-323: Init SYS err for 0xffffffff!
[SAMPLE_VENC_Qpmap_4K]-1645: Init VI err for 0xffffffff!
program exit abnormally!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区