the routine follows. The call to VIDENC1_control is the routine that
segfaults. I'm not using the ividEncfxns->algControl call...

thanks...

Vladimir Pantelic wrote:
> Stephen Berry wrote:
>
>>> why would I need to change the size to a different structure type?
>>>
>>> I double checked the example and this was in there, I just missed it.
>>> I'll give it a try and see what happens... thanks!
>
>> I made this change, and the code still SEGFAULTS in the control call.
>> If I return after the creation of the encoder (using the theory that
>> it is already setup correctly) then the code faults in the first call
>> to process.
>
> Could you please give the exact code you use in the control and
> process calls?
>
>
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
static int  videoEncodeAlgCreate(Engine_Handle hEngine,
                                 VIDENC1_Handle *hEncodePtr,
                                 VideoEncoder videoEncoder,
                                 int width, int height, int bitrate)
{
    VIDENC1_DynamicParams   dynamicParams;
    VIDENC1_Status          encStatus;
    VIDENC1_Params          params;
    IMP4VENC_Params         ext_params;
    XDAS_Int32              status;
//    IVIDENC1                status;
    char                    *algName;
    VIDENC1_Handle          hEncode;
    IALG_Fxns *ividEncfxns;

    algName = videoEncodeAlgNames[videoEncoder];

    params.size                  = sizeof(VIDENC1_Params);
    params.encodingPreset        = XDM_DEFAULT;
//XXX    params.rateControlPreset     = bitrate < 0 ? IVIDEO_NONE :
IVIDEO_LOW_DELAY;
    params.rateControlPreset     = bitrate < 0 ? IVIDEO_NONE :
IVIDEO_STORAGE;
    params.maxHeight             = height;
    params.maxWidth              = width;
    params.maxFrameRate          = gblGetYFactor() == NTSCSTD ? 30000 :
25000;
    params.maxBitRate            = bitrate < 0 ? 0 : bitrate;
    params.inputChromaFormat     = XDM_YUV_422ILE;
    params.dataEndianness        = XDM_BYTE;
    params.maxInterFrameInterval = 0;
    params.inputContentType      = IVIDEO_PROGRESSIVE;

// Set the create time extended parameters

// These parameters are for the highest quality picture...
    ext_params.videncParams = params;
    ext_params.subWindowHeight = 480;
    ext_params.subWindowWidth = 720;
    ext_params.intraFrameInterval = 0;  // I frame only
    ext_params.intraDcVlcThr = XDM_DEFAULT;
    ext_params.rotation = XDM_DEFAULT;
    ext_params.intraThres = 192;
    ext_params.intraAlgo = DM355_MPEG4E_INTRA_INTER_DECISION_HQ_LP;
    ext_params.numMBRows = 5;
    ext_params.initQ = 30;   // MAX quality!!
    ext_params.rcQ_MAX = 31;
    ext_params.rcQ_MIN = 1;
    ext_params.rateFix = XDM_DEFAULT;
    ext_params.rateFixRange = 4;
    ext_params.VBV_size = 10000;
    ext_params.InitQ_P = 4;
    ext_params.meRange = 31;
    ext_params.meAlgo = DM355_MPEG4E_ME_HQ_LP;
    ext_params.SkipMBAlgo = DM355_MPEG4E_SKIP_MB_HQ_LP;
    ext_params.UMV = DM355_MPEG4E_UMV_HQ_LP;
    ext_params.IIDC = DM355_MPEG4E_INTRA_INTER_BLK_SIZE_HQ_LP;


#if 1
    ext_params.videncParams.size = sizeof(IMP4VENC_Params);

    hEncode = (VIDENC1_Handle) ALG_create(1, (IALG_Fxns *)&
MP4VENC_TI_IMP4VENC,
                                       (IALG_Handle) NULL,
                                       (IALG_Params *) & ext_params);
#else
    /* Create video encoder instance */
    hEncode = VIDENC1_create(hEngine, algName, &params);
#endif

    if (hEncode == NULL) {
        ERR("Failed to open video encode algorithm: %s (0x%x)\n",
            algName, Engine_getLastError(hEngine));
        return FAILURE;
    }

//    return SUCCESS;

    dynamicParams.size                = sizeof(VIDENC1_DynamicParams);
    dynamicParams.inputHeight         = height;
    dynamicParams.inputWidth          = width;
    dynamicParams.targetBitRate       = bitrate < 0 ? 0 : bitrate;
//    dynamicParams.intraFrameInterval  = 30;
    dynamicParams.intraFrameInterval  = 0; // I frame only
    dynamicParams.generateHeader      = XDM_ENCODE_AU;
    dynamicParams.captureWidth        = 0;
//XXX    dynamicParams.forceIFrame         = 0;

    if (gblGetYFactor() == NTSCSTD) {
        dynamicParams.targetFrameRate = 30000;
        dynamicParams.refFrameRate    = 30000;
    }
    else {
        dynamicParams.targetFrameRate = 25000;
        dynamicParams.refFrameRate    = 25000;
    }

    /* Set video encoder dynamic parameters */
    encStatus.size = sizeof(VIDENC1_Status);
    encStatus.data.buf = NULL;

/* Set Dynamic Params */
#if 0
    ividEncfxns = (IALG_Fxns *)hEncode->fxns ;

    status = ividEncfxns->algControl((VIDENC1_Handle)hEncode, XDM_SETPARAMS,
                                  (VIDENC1_DynamicParams *)& ext_params,
                                  (VIDENC1_Status *)&encStatus);
   
#endif
    status = VIDENC1_control((VIDENC1_Handle)hEncode, XDM_SETPARAMS,
&dynamicParams,
                            &encStatus);

    if (status != VIDENC1_EOK) {
        ERR("XDM_SETPARAMS failed, status=%ld\n", status);
        return FAILURE;
    }

    *hEncodePtr = hEncode;

    return SUCCESS;
}

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to