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, ¶ms); #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
