elvisup

elvisup

0个粉丝

17

问答

0

专栏

23

资料

elvisup  发布于  2016-08-01 20:31:43
采纳率 0%
17个问答
10934

HI_MPI_VI_GetFrame出错,错误码0xA010800E

 
今天调试的时候,使用HI_MPI_VI_GetFrame接口获取图像数据,但是函数出错,错误码为:0xA010800E

查看spec发现错误码的解释如下:
0xA010800E HI_ERR_VI_BUF_EMPTY 视频输入缓存为空

但是不明白是什么意思,有没有给解释一下??

代码如下:

[code]/******************************************************************************
  A simple program of Hisilicon Hi35xx video encode implementation.
  Copyright (C), 2010-2011, Hisilicon Tech. Co., Ltd.
******************************************************************************
    Modification:  2011-2 Created
******************************************************************************/
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */

#include
#include
#include
#include
#include
#include
#include

#include
#include
#include

#include "sample_comm.h"
#include "../../include/hi_comm_vgs.h"

VIDEO_NORM_E gs_enNorm = VIDEO_ENCODING_MODE_NTSC;

VI_DEV_ATTR_S DEV_ATTR_TEST_BASE =
{
    /* interface mode */
        VI_MODE_DIGITAL_CAMERA,
    /*VI_MODE_DIGITAL_CAMERA,*/
    /* multiplex mode */
    VI_WORK_MODE_1Multiplex,
    /* r_mask    g_mask    b_mask*/
    {0xFFF00000,    0x0},
    /* progessive or interleaving */
    VI_SCAN_PROGRESSIVE,
    /*AdChnId*/
    { -1, -1, -1, -1},
    /*enDataSeq, only support yuv*/
    VI_INPUT_DATA_YUYV,

    /* synchronization information */
    {
        /*port_vsync   port_vsync_neg     port_hsync        port_hsync_neg        */
        VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL, VI_HSYNC_NEG_HIGH, VI_VSYNC_VALID_SINGAL, VI_VSYNC_VALID_NEG_HIGH,

        /*hsync_hfb    hsync_act    hsync_hhb*/
        {
            0,            1280,        0,
            /*vsync0_vhb vsync0_act vsync0_hhb*/
            0,            720,        0,
            /*vsync1_vhb vsync1_act vsync1_hhb*/
            0,            0,            0
        }
    },
    /* use interior ISP */
    /*VI_PATH_ISP,*/
    VI_PATH_BYPASS,
    /* input data type */
    VI_DATA_TYPE_RGB,
    /* bRever */
    HI_FALSE,
    /* DEV CROP */
    {0, 0, 1920, 1080}
};
/******************************************************************************
* function    : main()
* Description : video venc sample
******************************************************************************/
int main(int argc, char* argv[])
{
    HI_S32 s32Ret;

    PIC_SIZE_E enSize = PIC_HD1080;
    HI_U32 u32BlkSize;
    VB_CONF_S stVbConf;

    memset(&stVbConf, 0, sizeof(VB_CONF_S));

    stVbConf.u32MaxPoolCnt = 128;

    SAMPLE_COMM_VI_GetSizeBySensor(&enSize);
        printf("SAMPLE_COMM_VI_GetSizeBySensor = %d\n", PIC_HD1080);

        /*video buffer*/
        u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, \
                                 enSize, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
        printf("SAMPLE_COMM_SYS_CalcPicVbBlkSize = %d\n", u32BlkSize);

        stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
        stVbConf.astCommPool[0].u32BlkCnt = 24;

    /******************************************
     step 2: mpp system init.
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        printf("system init failed with %d!\n", s32Ret);
                return -1;
    }


        //ISP
    s32Ret = SAMPLE_COMM_ISP_Init(WDR_MODE_NONE);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: Sensor init failed!\n", __FUNCTION__);
        return HI_FAILURE;
    }

    /******************************************
     step 3: run isp thread
     note: you can jump over this step, if you do not use Hi3516A interal isp.
    ******************************************/
        s32Ret = SAMPLE_COMM_ISP_Run();
        if (HI_SUCCESS != s32Ret)
        {
                SAMPLE_PRT("%s: ISP init failed!\n", __FUNCTION__);
                /* disable videv */
                return HI_FAILURE;
        }


        //Enable dev and ch
        VI_DEV ViDev = 0;
        VI_CHN ViChn = 0;
        VI_DEV_ATTR_S stDevAttr;
        VI_CHN_ATTR_S stChnAttr;

    memcpy(&stDevAttr, &DEV_ATTR_TEST_BASE, sizeof(stDevAttr));

        /*stDevAttr.enIntfMode = VI_MODE_DIGITAL_CAMERA;*/
        stDevAttr.enIntfMode = VI_MODE_HISPI;
        stDevAttr.enWorkMode = VI_WORK_MODE_1Multiplex;
        stDevAttr.au32CompMask[0] = 0xFFF00000;
        stDevAttr.au32CompMask[1] = 0x0;
        stDevAttr.enScanMode = VI_SCAN_PROGRESSIVE;
        stDevAttr.s32AdChnId[0] = -1;
        stDevAttr.s32AdChnId[1] = -1;
        stDevAttr.s32AdChnId[2] = -1;
        stDevAttr.s32AdChnId[3] = -1;
        stDevAttr.stDevRect.s32X = 0;
        stDevAttr.stDevRect.s32Y = 0;
        stDevAttr.stDevRect.u32Width = 1920;
        stDevAttr.stDevRect.u32Height = 1080;
        printf("set HI_MPI_VI_SetDevAttr\n");
        s32Ret = HI_MPI_VI_SetDevAttr(ViDev, &stDevAttr);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Set dev attributes failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }


        printf("set HI_MPI_VI_EnableDev\n");
        s32Ret = HI_MPI_VI_EnableDev(ViDev);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Enable dev failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }
        stChnAttr.stCapRect.s32X = 0;
        stChnAttr.stCapRect.s32Y = 0;
        stChnAttr.stCapRect.u32Width = 1920;
        stChnAttr.stCapRect.u32Height = 1080;
        stChnAttr.stDestSize.u32Width = 1920;
        stChnAttr.stDestSize.u32Height = 1080;
        stChnAttr.enCapSel = VI_CAPSEL_BOTH;
        stChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
        stChnAttr.bMirror = HI_FALSE;
        stChnAttr.bFlip = HI_FALSE;
        stChnAttr.s32SrcFrameRate = -1;
        stChnAttr.s32DstFrameRate = -1;
        stChnAttr. enCompressMode = COMPRESS_MODE_NONE;

        s32Ret = HI_MPI_VI_SetChnAttr(ViChn,&stChnAttr);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Set chn attributes failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }
        s32Ret = HI_MPI_VI_EnableChn(ViChn);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Enable chn failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }


        /*************************************************************/
    VIDEO_FRAME_INFO_S stFrame;
        if (s32Ret = HI_MPI_VI_SetFrameDepth(ViChn, 3))
        {
                printf("HI_MPI_VI_SetFrameDepth err, vi chn %d , ret = 0x%08x\n", ViChn, s32Ret);
                return HI_FAILURE;
        }

    usleep(90000);

    if (s32Ret = HI_MPI_VI_GetFrame(ViChn, &stFrame, 10000))
    {
        printf("HI_MPI_VI_GetFrame err, vi chn %d , ret = 0x%08x\n", ViChn, s32Ret);
                return -1;
    }
        /*************************************************************/



        /* now, vi is capturing images, you can do something else ... */
        s32Ret = HI_MPI_VI_DisableChn(ViChn);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Disable chn failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }
        s32Ret = HI_MPI_VI_DisableDev(ViDev);
        if (s32Ret != HI_SUCCESS)
        {
                printf("Disable dev failed with error code %#x!\n", s32Ret);
                return HI_FAILURE;
        }

    if (HI_SUCCESS == s32Ret)
    { printf("program exit normally!\n"); }
    else
    { printf("program exit abnormally!\n"); }
    exit(s32Ret);
}

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */[/code]
我来回答
回答5个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-02 07:53:08
认可0
先确定VI工作正常, 有中断

elvisup

0个粉丝

17

问答

0

专栏

23

资料

elvisup 2016-08-02 08:23:13
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35264&ptid=12150]zhuangweiye 发表于 2016-8-2 07:53[/url]
先确定VI工作正常, 有中断[/quote]

如何确定VI工作是否正常?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-02 08:47:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35266&ptid=12150]elvisup 发表于 2016-8-2 08:23[/url]
如何确定VI工作是否正常?[/quote]

看 /proc/umap/vi

qn1550115875

0个粉丝

4

问答

0

专栏

0

资料

qn1550115875 2019-04-09 17:31:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35264&ptid=12150]zhuangweiye 发表于 2016-8-2 07:53[/url]
先确定VI工作正常, 有中断[/quote]

庄工,请问下,我现在想用VI1接收MIPI2的数据,一直无中断,是怎么回事?谢谢
[url=http://bbs.ebaina.com/forum.php?mod=viewthread&tid=74168&extra=]双路Sensor采集VI1无中断[/url]

gteng

0个粉丝

1

问答

0

专栏

0

资料

gteng 2016-08-03 17:49:09
认可0
我今天开始调试也遇见同样的报错
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区