Other Parts Discussed in Thread: SYSBIOS
Hi,
I have problems initializing HEVC encoder. algInit returns -1. The root of the problem is unclear. I am using encoder library from MCSDK Video 02_02_00_39
I am trying to create encoder that works on single core (configuration is in the end of the post).
This is the log of multicore api callbacks:
[2014-06-10 13:42:45] swbarr name=H265Ebarrier1
[2014-06-10 13:42:45] swbarr name=H265Ebarrier2
[2014-06-10 13:42:45] swbarr name=H265Ebarrier3
[2014-06-10 13:42:45] swbarr name=H265Ebarrier7
[2014-06-10 13:42:45] swbarr name=H265Ebarrier8
[2014-06-10 13:42:45] swbarr name=H265Ebarrier9
[2014-06-10 13:42:45] swbarr name=H265Ebarrier10
[2014-06-10 13:42:45] lock name=H265E_lock100
[2014-06-10 13:42:45] lock name=H265E_lock200
[2014-06-10 13:42:45] shmem name=shared_mem_pcontext00 type=SL2 size=10984 alignment=128
[2014-06-10 13:42:45] ptr=@0c044680
[2014-06-10 13:42:45] shmem name=shared_mem_referenceL000 type=SL2 size=610560 alignment=128
[2014-06-10 13:42:45] ptr=@84341800
[2014-06-10 13:42:45] shmem name=shared_mem_referenceL100 type=SL2 size=610560 alignment=128
[2014-06-10 13:42:45] ptr=@843d6900
[2014-06-10 13:42:45] shmem name=shared_mem_NAL_params00 type=DDR_CACHED size=72620 alignment=128
[2014-06-10 13:42:45] ptr=@8446ba00
[2014-06-10 13:42:45] shmem name=shared_mem_DataSync_params00 type=DDR_CACHED size=800 alignment=128
[2014-06-10 13:42:45] ptr=@8447d600
[2014-06-10 13:42:45] shmem name=shared_mem_entry_points00 type=DDR_CACHED size=8480 alignment=128
[2014-06-10 13:42:45] ptr=@8447d980
[2014-06-10 13:42:45] shmem name=shared_NAL_info00 type=SL2 size=3504 alignment=128
[2014-06-10 13:42:45] ptr=@0c047180
[2014-06-10 13:42:45] shmem name=shared_mem_CABAC_Context00 type=DDR_CACHED size=1600 alignment=128
[2014-06-10 13:42:45] ptr=@8447fb00
[2014-06-10 13:42:45] shmem name=shared_mem_CABAC_Context00 type=DDR_CACHED size=1600 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_bitout00 type=DDR_CACHED size=24 alignment=128
[2014-06-10 13:42:45] ptr=@84480180
[2014-06-10 13:42:45] shmem name=shared_mem_bitout00 type=DDR_CACHED size=24 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_bitconsumed00 type=DDR_CACHED size=280 alignment=128
[2014-06-10 13:42:45] ptr=@84480200
[2014-06-10 13:42:45] shmem name=shared_mem_bitconsumed00 type=DDR_CACHED size=280 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_CABAC_params00 type=DDR_CACHED size=24 alignment=128
[2014-06-10 13:42:45] ptr=@84480380
[2014-06-10 13:42:45] shmem name=shared_mem_CABAC_params00 type=DDR_CACHED size=24 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_LCU_strs00 type=SL2 size=552 alignment=128
[2014-06-10 13:42:45] ptr=@0c047f80
[2014-06-10 13:42:45] shmem name=shared_mem_MV_Buf00 type=DDR_CACHED size=608256 alignment=128
[2014-06-10 13:42:45] ptr=@84480400
[2014-06-10 13:42:45] shmem name=shared_mem_MV_Buf00 type=DDR_CACHED size=27648 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_MV_Buf00 type=DDR_CACHED size=27648 alignment=128
[2014-06-10 13:42:45] shmem name=shared_mem_const00 type=SL2 size=21040 alignment=128
[2014-06-10 13:42:45] ptr=@0c048200
[2014-06-10 13:42:45] shmem name=shared_mem_scan_tables00 type=SL2 size=16512 alignment=128
[2014-06-10 13:42:45] ptr=@0c04d480
[2014-06-10 13:42:45] shmem name=shared_mem_pic_mngmt_str00 type=DDR_CACHED size=123640 alignment=128
[2014-06-10 13:42:45] algInit failed: -1
First of all it is not clear to me why encoder tries to create shmem keys with the same name few times. Moreover it tries to do it with different sizes for shared_mem_MV_Buf00.
Configuration:
params.videnc2Params.encodingPreset = XDM_USER_DEFINED;
params.videnc2Params.rateControlPreset = IVIDEO_STORAGE; // 1: LOW_DELAY, 2: STORAGE, 4: NONE, 5: USER_DEFINED
params.videnc2Params.maxWidth = 704;
params.videnc2Params.maxHeight = 576;
params.videnc2Params.dataEndianness = XDM_BYTE; // Not configurable
params.videnc2Params.maxInterFrameInterval = 3; // Max I to P frame distance. 1: no B frames, 2: one B frame, 3: two B frames, etc [1, 255]
params.videnc2Params.maxBitRate = 20000000; // In bits per second. Should be valid as per LEVEL limit
params.videnc2Params.minBitRate = 2000000; // In bits per second
params.videnc2Params.inputChromaFormat = XDM_YUV_420P; // Not configurable
params.videnc2Params.inputContentType = IVIDEO_PROGRESSIVE; // 0: PROGRESSIVE, 1: INTERLACED
params.videnc2Params.operatingMode = IVIDEO_ENCODE_ONLY; // Not configurable
params.videnc2Params.profile = IH265_MAIN_PROFILE; // TODO: change description
params.videnc2Params.level = IH265_LEVEL_41; // TODO: change description
params.videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME; // Not configurable
params.videnc2Params.outputDataMode = IVIDEO_ENTIREFRAME; // Not configurable
params.videnc2Params.numInputDataUnits = 1;
params.videnc2Params.numOutputDataUnits = 1;
int i;
for (i = 0 ; i < IVIDEO_MAX_NUM_METADATA_PLANES; i++) {
params.videnc2Params.metadataType[i] = IVIDEO_METADATAPLANE_NONE;
}
params.scalingMatrixPreset = IH265_SCALINGMATRIXPRESET_DEFAULT;
params.decRefreshType = 0; // Decoder referesh type: IDR or CDR [0 or 1].
params.decRefreshInterval = 0;
params.enableTransQuantBypass = 0;
params.maxPoc = 256;
params.enableTransformSkip = 0;
params.maxIntraFrameInterval = 10000;
params.enableWPP = 0;
params.maxNumRefFrames = 1;
params.enableVirtualTile = 0;
params.debugTraceLevel = 0;
params.lastNFramesToLog = 0;
params.rateControlParams.rateControlParamsPreset = IH265_RATECONTROLPARAMS_USERDEFINED;
params.rateControlParams.rcAlgo = 0;
params.rateControlParams.qpI = -1;
params.rateControlParams.qpMaxI = 40;
params.rateControlParams.qpMinI = 12;
params.rateControlParams.qpP = 28;
params.rateControlParams.qpMaxP = 51;
params.rateControlParams.qpMinP = 12;
params.rateControlParams.qpOffsetB = 4;
params.rateControlParams.qpMaxB = 51;
params.rateControlParams.qpMinB = 12;
params.rateControlParams.enableFrameSkip = 0;
params.rateControlParams.enablePartialFrameSkip = 0;
params.rateControlParams.qualityFactorIP = 0;
params.rateControlParams.cbQPIndexOffset = 2;
params.rateControlParams.crQPIndexOffset = 2;
params.rateControlParams.initialBufferLevel = 4000000;
params.rateControlParams.hrdBufferSize = 4000000;
params.rateControlParams.enableHRDComplianceMode = 0;
params.rateControlParams.maxFrameSkipCnt = 0;
params.rateControlParams.SubFrameRC = 1;
params.rateControlParams.maxDeltaQP = 0;
params.rateControlParams.enablePRC = 0;
params.loopFilterParams.loopFilterParamsPreset = IH265_SLICECODINGPRESET_USERDEFINED;
params.loopFilterParams.enableDeblockFilter = 1;
params.loopFilterParams.enableSaoFilter = 1;
params.loopFilterParams.enableLoopFilterSliceBoundary = 0;
params.loopFilterParams.enableLoopFilterTileBoundary = 0;
params.loopFilterParams.separateCbCrSAO = 0;
params.loopFilterParams.offsetLoopFilterInPPSFlag = 0;
params.loopFilterParams.offsetDeblockBetaDiv2 = 0;
params.loopFilterParams.offsetDeblockTcDiv2 = 0;
params.gopCntrlParams.gopCntrlParamsPreset = IH265_GOPCTRLPRESET_DEFAULT;
params.sliceCodingParams.sliceCodingPreset = IH265_SLICECODINGPRESET_USERDEFINED;
params.sliceCodingParams.sliceCodingMode = 0;
params.sliceCodingParams.sliceCodingArg = 0;
params.sliceCodingParams.enableTiles = 0;
params.sliceCodingParams.numTileColumns = 1;
params.sliceCodingParams.numTileRows = 1;
params.sliceCodingParams.enableDependentSlice = 0;
params.intraCodingParams.intraCodingPreset = IH265_INTRACODINGPRESET_USERDEFINED;
params.intraCodingParams.intraRefreshMethod = 0;
params.intraCodingParams.intraRefreshRate = 0;
params.intraCodingParams.constrainedIntraPredEnable = 0;
params.intraCodingParams.enableStrongIntraSmoothing = 1;
params.intraCodingParams.matchYCbCrIntraMode = 0;
params.intraCodingParams.enableLumaIntra4x4Mode = 0;
params.intraCodingParams.enableLumaIntra8x8Mode = 0;
params.intraCodingParams.enableLumaIntra16x16Mode = 0;
params.intraCodingParams.enableLumaIntra32x32Mode = 0;
params.intraCodingParams.enableChromaIntra4x4Mode = 0;
params.intraCodingParams.enableChromaIntra8x8Mode = 0;
params.intraCodingParams.enableChromaIntra16x16Mode = 0;
params.interCodingParams.interCodingPreset = IH265_INTERCODINGPRESET_USERDEFINED;
params.interCodingParams.enableTmvp = 0;
params.interCodingParams.searchRangeHorP = 144;
params.interCodingParams.searchRangeVerP = 32;
params.interCodingParams.searchRangeHorB = 144;
params.interCodingParams.searchRangeVerB = 32;
params.interCodingParams.interCodingBias = 0;
params.interCodingParams.skipMVCodingBias = 0;
params.interCodingParams.numMergeCandidates = 3;
params.interCodingParams.enableBiPredMode = 0;
params.interCodingParams.enableFastIntraAlgo = 1;
params.vuiCodingParams.vuiCodingPreset = IH265_VUICODINGPRESET_DEFAULT;
params.vuiCodingParams.aspectRatioInfoPresentFlag = 0;
params.vuiCodingParams.aspectRatioIdc = 0;
params.vuiCodingParams.videoSignalTypePresentFlag = 0;
params.vuiCodingParams.videoFormat = 0;
params.vuiCodingParams.videoFullRangeFlag = 0;
params.vuiCodingParams.colourDescriptionPresentFlag = 0;
params.vuiCodingParams.colourPrimaries = 0;
params.vuiCodingParams.transferCharacteristics = 0;
params.vuiCodingParams.matrixCoefficients = 0;
params.vuiCodingParams.timingInfoPresentFlag = 0;
params.seiParams.enableSeiFlag = 0;
params.ctbCodingParams.maxCTBSize = 64;
params.ctbCodingParams.maxCUDepth = 3;
dynamicParams.videnc2DynamicParams.forceFrame = IVIDEO_NA_FRAME; // -1: IVIDEO_NA_FRAME, 3: IVIDEO_IDR_FRAME
dynamicParams.videnc2DynamicParams.generateHeader = XDM_ENCODE_AU; // 0: Encode entire access unit including headers, 1: Encode only header
dynamicParams.videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_FALSE; // Non configurable
dynamicParams.videnc2DynamicParams.inputWidth = 704;
dynamicParams.videnc2DynamicParams.inputHeight = 576;
dynamicParams.videnc2DynamicParams.interFrameInterval = params.videnc2Params.maxInterFrameInterval; // I to P frame distance. 1: no B frames, 2: one B frame, 3: two B frames, etc [1, 255]
dynamicParams.videnc2DynamicParams.intraFrameInterval = 120; // The number of frames between two I frames. 0: IPPPP..., 1: IIII..., 2: IPIPIPIPI, 3: IPPIPPIPPI or IPBIPBIPBI, etc.
dynamicParams.videnc2DynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL; // Motion vectors accuracy. 0: integer pel., 2: quarter pel.
dynamicParams.videnc2DynamicParams.putDataFxn = NULL;
dynamicParams.videnc2DynamicParams.putDataHandle = 0;
dynamicParams.videnc2DynamicParams.getDataFxn = NULL;
dynamicParams.videnc2DynamicParams.getDataHandle = 0;
dynamicParams.videnc2DynamicParams.getBufferFxn = NULL;
dynamicParams.videnc2DynamicParams.getBufferHandle = 0;
dynamicParams.videnc2DynamicParams.refFrameRate = 25 * 1000;
dynamicParams.videnc2DynamicParams.targetFrameRate = 25 * 1000;
dynamicParams.videnc2DynamicParams.sampleAspectRatioWidth = 1;
dynamicParams.videnc2DynamicParams.sampleAspectRatioHeight = 1;
dynamicAspectRatio = 0;
dynamicParams.videnc2DynamicParams.targetBitRate = params.videnc2Params.maxBitRate;
memcpy(&dynamicParams.rateControlParams, ¶ms.rateControlParams, sizeof(params.rateControlParams));
memcpy(&dynamicParams.loopFilterParams, ¶ms.loopFilterParams, sizeof(params.loopFilterParams));
memcpy(&dynamicParams.intraCodingParams, ¶ms.intraCodingParams, sizeof(params.intraCodingParams));
memcpy(&dynamicParams.interCodingParams, ¶ms.interCodingParams, sizeof(params.interCodingParams));
memcpy(&dynamicParams.ctbCodingParams, ¶ms.ctbCodingParams, sizeof(params.ctbCodingParams));
memcpy(&dynamicParams.sliceCodingParams, ¶ms.sliceCodingParams, sizeof(params.sliceCodingParams));
dynamicParams.enableTransQuantBypass = params.enableTransQuantBypass;
dynamicParams.enableTransformSkip = params.enableTransformSkip;
dynamicParams.enableROI = 0;
params.ividmc->user_id = 0;
params.ividmc->num_users = 1;
params.ividmc->task_ID = IVIDMC3_TASK_MASTER;
Regards,
Andrey Lisnevich