/*--------------------------------------------------------------------------*/ /* First set default values to base class XDM params structure */ /* Please refer User guide Table 4.5 for further details on values */ /*--------------------------------------------------------------------------*/ params->videnc2Params.encodingPreset = XDM_USER_DEFINED; //Docter shen params->videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY; // params->videnc2Params.rateControlPreset = IVIDEO_STORAGE; params->videnc2Params.maxHeight = IMG_HEIGHT; params->videnc2Params.maxWidth = IMG_WIDTH; params->videnc2Params.dataEndianness = XDM_BYTE; params->videnc2Params.maxInterFrameInterval = 1; params->videnc2Params.maxBitRate = -1; // params->videnc2Params.maxBitRate = 1500000; //Docter shen params->videnc2Params.minBitRate = 0; params->videnc2Params.inputChromaFormat = XDM_YUV_420SP; params->videnc2Params.inputContentType = IVIDEO_PROGRESSIVE; params->videnc2Params.operatingMode = IVIDEO_ENCODE_ONLY; params->videnc2Params.profile = IH264_HIGH_PROFILE; params->videnc2Params.level = IH264_LEVEL_51; params->videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME;//IVIDEO_NUMROWS; //Antimax IVIDEO_ENTIREFRAME params->videnc2Params.outputDataMode = IVIDEO_ENTIREFRAME;//IVIDEO_SLICEMODE; //Antimax IVIDEO_ENTIREFRAME params->videnc2Params.numInputDataUnits = 1; params->videnc2Params.numOutputDataUnits = 1; /*--------------------------------------------------------------------------*/ /* Set rate controll params in extended XDM params structure */ /* Please refer User guide Table 4.7 for further details on values */ /*--------------------------------------------------------------------------*/ params->rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED; params->rateControlParams.scalingMatrixPreset = IH264_SCALINGMATRIX_DEFAULT; params->rateControlParams.rcAlgo = IH264_RATECONTROL_DEFAULT; params->rateControlParams.minPicSizeRatioI = 0; params->rateControlParams.maxPicSizeRatioI = 640; params->rateControlParams.minPicSizeRatioP = 0; params->rateControlParams.maxPicSizeRatioP = 0; params->rateControlParams.minPicSizeRatioB = 0; params->rateControlParams.maxPicSizeRatioB = 0; params->rateControlParams.frameSkipThMulQ5 = 0; params->rateControlParams.vbvUseLevelThQ5 = 0; params->rateControlParams.qpI = -1; params->rateControlParams.qpP = -1; params->rateControlParams.qpOffsetB = 4; params->rateControlParams.qpMaxI = 40; params->rateControlParams.qpMinI = 10; params->rateControlParams.qpMaxP = 51; params->rateControlParams.qpMinP = 10; params->rateControlParams.qpMaxB = 51; params->rateControlParams.qpMinB = 10; params->rateControlParams.allowFrameSkip = 0; params->rateControlParams.removeExpensiveCoeff = 0; params->rateControlParams.chromaQPIndexOffset = 0; params->rateControlParams.IPQualityFactor = IH264_QUALITY_FACTOR_DEFAULT; #if (GDR_MODE_ENABLE) params->rateControlParams.initialBufferLevel = 5000000; params->rateControlParams.HRDBufferSize = 5000000; #else params->rateControlParams.initialBufferLevel = 1024000; params->rateControlParams.HRDBufferSize = params->rateControlParams.initialBufferLevel * 2; #endif params->rateControlParams.enablePRC = 1; params->rateControlParams.enablePartialFrameSkip = 0; params->rateControlParams.discardSavedBits = 0; params->rateControlParams.VBRDuration = 8; params->rateControlParams.VBRsensitivity = 0; #if (GDR_MODE_ENABLE) params->rateControlParams.skipDistributionWindowLength = 5; params->rateControlParams.numSkipInDistributionWindow = 1; #else params->rateControlParams.skipDistributionWindowLength = 0; params->rateControlParams.numSkipInDistributionWindow = 0; #endif params->rateControlParams.enableHRDComplianceMode = 1; /*--------------------------------------------------------------------------*/ /* Set Inter coding params in extended XDM params structure */ /* Please refer User guide Table 4.8 for further details on values */ /*--------------------------------------------------------------------------*/ params->interCodingParams.interCodingPreset = IH264_INTERCODING_USERDEFINED; params->interCodingParams.searchRangeHorP = 144; params->interCodingParams.searchRangeVerP = 32; params->interCodingParams.searchRangeHorB = 144; params->interCodingParams.searchRangeVerB = 16; params->interCodingParams.interCodingBias = IH264_BIASFACTOR_DEFAULT; params->interCodingParams.skipMVCodingBias = IH264_BIASFACTOR_DEFAULT; #if (GDR_MODE_ENABLE) params->interCodingParams.minBlockSizeP = 0; params->interCodingParams.minBlockSizeB = 0; #else params->interCodingParams.minBlockSizeP = IH264_BLOCKSIZE_8x8; params->interCodingParams.minBlockSizeB = IH264_BLOCKSIZE_8x8; #endif params->interCodingParams.meAlgoMode = IH264ENC_MOTIONESTMODE_DEFAULT; /*--------------------------------------------------------------------------*/ /* Set Intra coding params in extended XDM params structure */ /* Please refer User guide Table 4.9 for further details on values */ /*--------------------------------------------------------------------------*/ params->intraCodingParams.lumaIntra4x4Enable = 0x0FF; params->intraCodingParams.lumaIntra8x8Enable = 0x0FF; params->intraCodingParams.lumaIntra16x16Enable = 0xF; params->intraCodingParams.chromaIntra8x8Enable = 0xF; params->intraCodingParams.chromaComponentEnable = IH264_CHROMA_COMPONENT_DEFAULT; #if (GDR_MODE_ENABLE) params->intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED; params->intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_GDR; params->intraCodingParams.intraRefreshRate = 2; params->intraCodingParams.gdrOverlapRowsBtwFrames = 1; #else params->intraCodingParams.intraCodingPreset = IH264_INTRACODING_DEFAULT; params->intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_DEFAULT; params->intraCodingParams.intraRefreshRate = 0; params->intraCodingParams.gdrOverlapRowsBtwFrames = 0; #endif params->intraCodingParams.constrainedIntraPredEnable = 0; params->intraCodingParams.intraCodingBias = 0; /*--------------------------------------------------------------------------*/ /* Set NAL unit coding params in extended XDM params structure */ /* Please refer User guide Table 4.10 for further details on values */ /*--------------------------------------------------------------------------*/ #if (GDR_MODE_ENABLE) params->nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED; params->nalUnitControlParams.naluPresentMaskStartOfSequence = 8608; params->nalUnitControlParams.naluPresentMaskIDRPicture = 8672; params->nalUnitControlParams.naluPresentMaskIntraPicture = 8450; #else params->nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_DEFAULT; params->nalUnitControlParams.naluPresentMaskStartOfSequence = 416; params->nalUnitControlParams.naluPresentMaskIDRPicture = 416; params->nalUnitControlParams.naluPresentMaskIntraPicture = 2; #endif params->nalUnitControlParams.naluPresentMaskNonIntraPicture = 2; params->nalUnitControlParams.naluPresentMaskEndOfSequence = 3072; /*--------------------------------------------------------------------------*/ /* Set Slice coding params in extended XDM params structure */ /* Please refer User guide Table 4.11 for further details on values */ /*--------------------------------------------------------------------------*/ params->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_DEFAULT;//IH264_SLICECODING_USERDEFINED;//Antimax IH264_SLICECODING_DEFAULT; params->sliceCodingParams.sliceMode = IH264_SLICEMODE_DEFAULT;//IH264_SLICEMODE_MBUNIT;//Antimax IH264_SLICEMODE_DEFAULT; params->sliceCodingParams.sliceUnitSize = 352; params->sliceCodingParams.sliceStartOffset[0] = 0; params->sliceCodingParams.sliceStartOffset[1] = 0; params->sliceCodingParams.sliceStartOffset[2] = 0; params->sliceCodingParams.streamFormat = IH264_STREAM_FORMAT_DEFAULT;//IH264_BYTE_STREAM;//Antimax IH264_STREAM_FORMAT_DEFAULT; /*--------------------------------------------------------------------------*/ /* Set Loop filter coding params in extended XDM params structure */ /* Please refer User guide Table 4.12 for further details on values */ /*--------------------------------------------------------------------------*/ params->loopFilterParams.loopfilterPreset = IH264_LOOPFILTER_DEFAULT; params->loopFilterParams.loopfilterDisableIDC = IH264_DISABLE_FILTER_DEFAULT; params->loopFilterParams.filterOffsetA = 0; params->loopFilterParams.filterOffsetB = 0; /*--------------------------------------------------------------------------*/ /* Set VUI coding params in extended XDM params structure */ /* Please refer User guide Table 4.14 for further details on values */ /*--------------------------------------------------------------------------*/ #if (GDR_MODE_ENABLE) params->vuiCodingParams.vuiCodingPreset = IH264_VUICODING_USERDEFINED; params->vuiCodingParams.aspectRatioInfoPresentFlag = 0; params->vuiCodingParams.aspectRatioIdc = 255; params->vuiCodingParams.videoSignalTypePresentFlag = 1; params->vuiCodingParams.videoFormat = 5; params->vuiCodingParams.videoFullRangeFlag = 1; #else params->vuiCodingParams.vuiCodingPreset = IH264_VUICODING_DEFAULT; params->vuiCodingParams.aspectRatioInfoPresentFlag = 1; params->vuiCodingParams.aspectRatioIdc = 1; params->vuiCodingParams.videoSignalTypePresentFlag = 0; params->vuiCodingParams.videoFormat = IH264ENC_VIDEOFORMAT_NTSC; params->vuiCodingParams.videoFullRangeFlag = 0; #endif params->vuiCodingParams.timingInfoPresentFlag = 1; params->vuiCodingParams.numUnitsInTicks = 1000; params->vuiCodingParams.hrdParamsPresentFlag = 1; /*--------------------------------------------------------------------------*/ /* disable frame packing SEI encoding coding params by default */ /*--------------------------------------------------------------------------*/ params->framePackingSEIParams.framePackingPreset = 0; #if (GDR_MODE_ENABLE) params->framePackingSEIParams.framePackingType = IH264_FRAMEPACK_CHECKERBOARD; #else params->framePackingSEIParams.framePackingType = IH264_FRAMEPACK_SIDE_BY_SIDE; #endif params->framePackingSEIParams.frame0PositionX = 0; params->framePackingSEIParams.frame0PositionY = 0; params->framePackingSEIParams.frame1PositionX = 0; params->framePackingSEIParams.frame1PositionY = 0; /*--------------------------------------------------------------------------*/ /* Set StereoVideoinformation coding params in extended XDM params structure*/ /* Please refer User guide for further details on values */ /*--------------------------------------------------------------------------*/ params->stereoInfoParams.stereoInfoPreset = IH264_STEREOINFO_DISABLE; params->stereoInfoParams.topFieldIsLeftViewFlag = 1; params->stereoInfoParams.viewSelfContainedFlag = 0; /*--------------------------------------------------------------------------*/ /* Set FMO coding params in extended XDM params structure */ /* Please refer User guide Table 4.13 for further details on values */ /*--------------------------------------------------------------------------*/ params->fmoCodingParams.fmoCodingPreset = IH264_FMOCODING_DEFAULT; params->fmoCodingParams.numSliceGroups = 1; params->fmoCodingParams.sliceGroupMapType = IH264_SLICE_GRP_MAP_DEFAULT; params->fmoCodingParams.sliceGroupChangeDirectionFlag = IH264ENC_SLICEGROUP_CHANGE_DIRECTION_DEFAULT; params->fmoCodingParams.sliceGroupChangeRate = 0; params->fmoCodingParams.sliceGroupChangeCycle = 0; params->fmoCodingParams.sliceGroupParams[0] = 0; params->fmoCodingParams.sliceGroupParams[1] = 0; /*--------------------------------------------------------------------------*/ /* Set Extended XDM Encode parameters in extended XDM params structure */ /* Please refer User guide Table 4.15 for further details on values */ /*--------------------------------------------------------------------------*/ params->interlaceCodingType = IH264_INTERLACE_FIELDONLY_ARF; params->bottomFieldIntra = 0; params->gopStructure = IH264ENC_GOPSTRUCTURE_NONUNIFORM; params->entropyCodingMode = IH264_ENTROPYCODING_CABAC; #if (GDR_MODE_ENABLE) params->transformBlockSize = IH264_TRANSFORM_8x8; params->log2MaxFNumMinus4 = 10; params->IDRFrameInterval = 0; #else params->transformBlockSize = IH264_TRANSFORM_ADAPTIVE; params->log2MaxFNumMinus4 = 8; params->IDRFrameInterval = 25; #endif params->picOrderCountType = IH264_POC_TYPE_0; params->enableRCDO = 0; params->pConstantMemory = 0; params->reservedParams[0] = 0; params->reservedParams[1] = 0x1F; params->reservedParams[2] = 0; params->enableGMVSei = 0; params->constraintSetFlags = 0; params->enableLongTermRefFrame = 0; params->enableWatermark = 0; params->LTRPPeriod = 0xFFFFFFFF; params->numTemporalLayer = IH264_TEMPORAL_LAYERS_1; params->referencePicMarking = IH264_LONG_TERM_PICTURE; params->svcCodingParams.dependencyID = 0; params->svcCodingParams.qualityID = 0; params->svcCodingParams.enhancementProfileID = 0; params->svcCodingParams.layerIndex = 0; params->svcCodingParams.svcExtensionFlag = IH264_SVC_EXTENSION_FLAG_DISABLE; params->debugTraceLevel = 1; params->lastNFramesToLog = 0; params->enableAnalyticinfo = 0; /*--------------------------------------------------------------------------*/ /* Set dynamic parameters */ /* Most of the default parameters can be copied from Encdoer params */ /*--------------------------------------------------------------------------*/ memcpy(&((dynamicParams)->rateControlParams), &(params->rateControlParams), sizeof(IH264ENC_RateControlParams)); memcpy(&((dynamicParams)->interCodingParams), &(params->interCodingParams), sizeof(IH264ENC_InterCodingParams)); memcpy(&((dynamicParams)->intraCodingParams), &(params->intraCodingParams), sizeof(IH264ENC_IntraCodingParams)); memcpy(&((dynamicParams)->sliceCodingParams), &(params->sliceCodingParams), sizeof(IH264ENC_SliceCodingParams)); /*--------------------------------------------------------------------------*/ /* Set all the XDM dynamic values to default values */ /*--------------------------------------------------------------------------*/ dynamicParams->videnc2DynamicParams.size = sizeof(IH264ENC_DynamicParams); dynamicParams->videnc2DynamicParams.captureWidth = IMG_WIDTH; dynamicParams->videnc2DynamicParams.forceFrame = IVIDEO_NA_FRAME; dynamicParams->videnc2DynamicParams.generateHeader = XDM_ENCODE_AU; dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = 1; dynamicParams->videnc2DynamicParams.inputHeight = IMG_HEIGHT; dynamicParams->videnc2DynamicParams.inputWidth = IMG_WIDTH; dynamicParams->videnc2DynamicParams.interFrameInterval = 1; //modify by david #if (GDR_MODE_ENABLE) dynamicParams->videnc2DynamicParams.intraFrameInterval = 0; #else dynamicParams->videnc2DynamicParams.intraFrameInterval = 30; #endif #if (GDR_MODE_ENABLE) dynamicParams->videnc2DynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_PIXEL; #else dynamicParams->videnc2DynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL; #endif dynamicParams->videnc2DynamicParams.putDataFxn = NULL; dynamicParams->videnc2DynamicParams.putDataHandle = 0; dynamicParams->videnc2DynamicParams.refFrameRate = 30000; dynamicParams->videnc2DynamicParams.sampleAspectRatioHeight = 1; dynamicParams->videnc2DynamicParams.sampleAspectRatioWidth = 1; dynamicParams->videnc2DynamicParams.targetBitRate = 2000000; dynamicParams->videnc2DynamicParams.targetFrameRate = 30000; dynamicParams->videnc2DynamicParams.putDataFxn = NULL; dynamicParams->videnc2DynamicParams.getDataFxn = NULL; dynamicParams->videnc2DynamicParams.getBufferFxn = NULL; dynamicParams->videnc2DynamicParams.getDataHandle = NULL; dynamicParams->sliceGroupChangeCycle = params->fmoCodingParams.sliceGroupChangeCycle; dynamicParams->searchCenter.x = 32767; dynamicParams->searchCenter.y = 0; dynamicParams->enableStaticMBCount = 0; dynamicParams->enableROI = 0; dynamicParams->reservedDynParams[0] = 0; dynamicParams->reservedDynParams[1] = 0; dynamicParams->reservedDynParams[2] = 0; params->maxIntraFrameInterval = dynamicParams->videnc2DynamicParams.intraFrameInterval; for (i = 0; i < IVIDEO_MAX_NUM_METADATA_PLANES; i++) { params->videnc2Params.metadataType[i] = IVIDEO_METADATAPLANE_NONE; } } venc_params.h264_status.videnc2Status.size = sizeof(IH264ENC_Status); venc_params.h264_status.videnc2Status.extendedError = 0; venc_params.h264_params.videnc2Params.size = sizeof(IH264ENC_Params); venc_params.h264_dynamic_params.videnc2DynamicParams.size = sizeof(IH264ENC_DynamicParams); venc_params.h264_dynamic_params.videnc2DynamicParams.lateAcquireArg = 0x100; venc_params.h264_dynamic_params.videnc2DynamicParams.captureWidth = IMG_WIDTH; venc_params.h264_dynamic_params.videnc2DynamicParams.inputHeight = IMG_HEIGHT; venc_params.h264_dynamic_params.videnc2DynamicParams.inputWidth = IMG_WIDTH; venc_params.h264_dynamic_params.videnc2DynamicParams.targetBitRate = 1500000; //1800000; //3500000; venc_params.h264_dynamic_params.videnc2DynamicParams.targetFrameRate = 30000; #if (GDR_MODE_ENABLE) venc_params.b_gdr_mode = 0x1; venc_params.gdr_interval = venc_params.h264_dynamic_params.videnc2DynamicParams.inputHeight >> 4; venc_params.h264_dynamic_params.videnc2DynamicParams.lateAcquireArg = 0; #endif