This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

demos进行参数params扩展,没有成功创建编码句柄



您好:

我尝试对video.c里面的params结构体进行扩展,只扩展了一个参数,但是在调用_create函数的时候返回了错误。不知道是什么原因造成的,求助大家,谢谢!

下面是我相关程序的步骤:

1、设置默认参数值

const IVIDENC1_Params IVIDENC1_Params_DEFAULT = {
    sizeof(IVIDENC1_Params),           /* size */
    XDM_DEFAULT,                      /* encodingPreset */
    IVIDEO_LOW_DELAY,                 /* rateControlPreset */
    720,                              /* maxHeight */
    1280,                             /* maxWidth */
    30000,                            /* maxFrameRate */
    6000000,                          /* maxBitRate */
    XDM_BYTE,                         /* dataEndianness */
    0,                                /* maxInterFrameInterval */
    XDM_YUV_420P,                     /* inputChromaFormat */
    IVIDEO_PROGRESSIVE,               /* inputContentType */
    XDM_CHROMA_NA                     /* reconChromaFormat */
};

2、定义扩展结构体
typedef struct MYIVIDDEC_Params {
    IVIDENC1_Params videncParams;
    XDAS_Int32 profileIdc;
    
} MYIVIDDEC_Params;

3、在main函数里面定义params

IVIDENC1_Params          defaultParams       = IVIDENC1_Params_DEFAULT;

MYIVIDDEC_Params        params;

4、对params进行赋值

    params.videncParams = defaultParams;

    params.videncParams.size = sizeof(MYIVIDDEC_Params);

    params.videncParams.maxWidth        = 736;//envp->imageWidth;

    params.videncParams.maxHeight       = 576;//Dmai_roundUp(envp->imageHeight, CODECHEIGHTALIGN);

    params.videncParams.encodingPreset  = XDM_HIGH_SPEED;

    params.videncParams.inputChromaFormat = XDM_YUV_420SP;

    params.videncParams.maxFrameRate      = 25000;

    params.videncParams.maxBitRate        = 500000;

    params.videncParams.rateControlPreset = IVIDEO_NONE;

    params.profileIdc=66;//增加的参数赋值

5、调用create函数

VIDENC1_Handle          hEncode;

/* Create video encoder instance */
    hEncode = VIDENC1_create(hEngine, codecName,(VIDENC1_Params*)&params);

    if (hEncode == NULL) {
        printf("!!!!!!!!!!Failed to open video encode algorithm: %s (0x%x)\n",
                 codecName, Engine_getLastError(hEngine));
        free(hVe);
        return NULL;
    }

结果:返回!!!!!!!!!!Failed to open video encode algorithm: h264enc (0x0)

另外,视频格式选VideoStd_D1_PAL

            扩展结构体除了以上的MYIVIDDEC_Params,还用过IH264VENC_Params,同样出错;

            create函数除了以上的 VIDENC1_create,还用过Venc1_create,同样出错;

            create函数使用强制转换(IVIDENC1_Params*)&params,同样出错。

可能是什么原因引起的呢?

求助啊!!!!!!

谢谢!

  • 你好,

    不知道你使用的是那个芯片,下面以DM36x 为例,你看看能否尝试类型下面的代码(下面的代码不是完整代码),看是否有帮助:

    typedef struct
    {
            VIDENC1_Handle   hEncode;

        union{
            VIDENC1_Params        params;
            IH264VENC_Params    params_h264;
        };
        union{
            VIDENC1_DynamicParams    dynamicParams;
            IH264VENC_DynamicParams dynamicParams_h264;
        };


    } ALG_VidEncObj;

      ALG_VidEncObj           *pObj;

    pObj->params.size                              = sizeof(IH264VENC_Params);

    pObj->params_h264.profileIdc                     = 100;

    。。。

     pObj->hEncode = VIDENC1_create(gALG_hEngine, pObj->algName, &pObj->params);

  • 最后找到问题了,是参数设置的互相有冲突,所以进不去编码环节

    还是非常感谢!!