/* * ======== dumpTrace ======== */ static void dumpTrace(Server_Handle server) { Int count; count = Server_fwriteTrace((Server_Handle)server, "", stdout); if (count == -1) { fprintf(stderr, "Error retrieving trace: 0x%x!\n", Engine_getLastError(engine)); } }
void *ALG_jpgEncCreate(ALG_JpgEncCreate *create) { ALG_JpgEncObj *pObj; XDAS_Int32 status; if(gALG_hEngine==NULL) return NULL; pObj = OSA_memAlloc(sizeof(ALG_JpgEncObj)); if(pObj==NULL) return NULL; memset(pObj, 0, sizeof(*pObj)); strcpy(pObj->algName, ALG_VID_CODEC_JPEG_ENC_NAME); memcpy(&pObj->createPrm, create, sizeof(pObj->createPrm)); pObj->params.size = sizeof(IMGENC1_Params); pObj->params.maxHeight = create->height; pObj->params.maxWidth = pObj->createPrm.offsetH>create->width?pObj->createPrm.offsetH:create->width; pObj->params.maxScans = 1; pObj->params.dataEndianness = XDM_BYTE; if(create->encDataFormat==ALG_VID_DATA_FORMAT_YUV422) pObj->params.forceChromaFormat = XDM_YUV_422P; else pObj->params.forceChromaFormat = XDM_YUV_420P; pObj->hEncode = IMGENC1_create(gALG_hEngine, pObj->algName, &pObj->params); if (pObj->hEncode == NULL) { OSA_ERROR("Failed to open video encode algorithm: %s (0x%x)\n", pObj->algName, Engine_getLastError(gALG_hEngine)); OSA_memFree(pObj); return NULL; } status = ALG_jpgEncSetQvalue(pObj, create->qValue); if(status!=OSA_SOK) { ALG_jpgEncDelete(pObj); return NULL; } return pObj; }
DvevmStRetCode dvtb_ceMem(DvevmStEngineInfo *ce) { DVTBASSERT(ce != NULL); DVTBASSERT(ce->hdl != NULL); ce->mem = Engine_getUsedMem(ce->hdl); if (0 == ce->mem) { ce->err = Engine_getLastError(ce->hdl); SYS_ERROR("Unable (%d) to get used memory for Engine <%s>\n", ce->err, ce->name); return DVEVM_ST_FAIL; } else { SYS_OUT("Engine <%s> => Used Memory : %d MAUs\n", ce->name, ce->mem); return DVEVM_ST_SUCCESS; } }
DvevmStRetCode dvtb_ceCpu(DvevmStEngineInfo *ce) { DVTBASSERT(ce != NULL); DVTBASSERT(ce->hdl != NULL); ce->cpu = Engine_getCpuLoad(ce->hdl); if (ce->cpu < 0) { ce->err = Engine_getLastError(ce->hdl); SYS_ERROR("Unable (%d) to get CPU load for Engine <%s>\n", ce->err, ce->name); return DVEVM_ST_FAIL; } else { SYS_OUT("Engine <%s> => CPU Load : %d MAUs\n", ce->name, ce->cpu); return DVEVM_ST_SUCCESS; } }
void *ALG_jpgDecCreate(ALG_JpgDecCreate *create) { ALG_JpgDecObj *pObj; if(gALG_hEngine==NULL) return NULL; pObj = OSA_memAlloc(sizeof(ALG_JpgDecObj)); if(pObj==NULL) return NULL; memset(pObj, 0, sizeof(*pObj)); strcpy(pObj->algName, ALG_VID_CODEC_JPEG_DEC_NAME); memcpy(&pObj->createPrm, create, sizeof(pObj->createPrm)); pObj->params.size = sizeof(pObj->params); pObj->params.maxHeight = create->maxHeight; pObj->params.maxWidth = create->maxWidth; pObj->params.maxScans = 1; pObj->params.dataEndianness = XDM_BYTE; if(create->dataFormat==ALG_VID_DATA_FORMAT_YUV422) pObj->params.forceChromaFormat = XDM_YUV_422ILE; else pObj->params.forceChromaFormat = XDM_YUV_420SP; pObj->hDecode = IMGDEC1_create(gALG_hEngine, pObj->algName, &pObj->params); if (pObj->hDecode == NULL) { OSA_ERROR("Failed to open image decode algorithm: %s (0x%x)\n", pObj->algName, Engine_getLastError(gALG_hEngine)); OSA_memFree(pObj); return NULL; } return pObj; }
void *ALG_vidEncCreate(ALG_VidEncCreate *create) { XDAS_Int32 status; ALG_VidEncObj *pObj; if(gALG_hEngine==NULL) return NULL; pObj = OSA_memAlloc(sizeof(ALG_VidEncObj)); if(pObj==NULL) return NULL; memset(pObj, 0, sizeof(ALG_VidEncObj)); switch(create->codec) { case ALG_VID_CODEC_H264: strcpy(pObj->algName, ALG_VID_CODEC_H264_ENC_NAME); break; case ALG_VID_CODEC_MPEG4: strcpy(pObj->algName, ALG_VID_CODEC_MPEG4_ENC_NAME); break; case ALG_VID_CODEC_MJPEG: strcpy(pObj->algName, ALG_VID_CODEC_JPEG_ENC_NAME); break; default: OSA_memFree(pObj); return NULL; } memcpy(&pObj->createPrm, create, sizeof(pObj->createPrm)); if(create->codec==ALG_VID_CODEC_MJPEG) { ALG_JpgEncCreate jpgCreate; jpgCreate.dataFormat = create->dataFormat; jpgCreate.width = create->width; jpgCreate.height = create->height; jpgCreate.offsetH = create->offsetH; jpgCreate.offsetV = create->offsetV; jpgCreate.encDataFormat = ALG_VID_DATA_FORMAT_YUV420; jpgCreate.qValue = create->qValue; pObj->hJpgEncode = ALG_jpgEncCreate(&jpgCreate); if(pObj->hJpgEncode==NULL) { OSA_memFree(pObj); return NULL; } return pObj; } pObj->params.maxHeight = create->height; pObj->params.maxWidth = create->width; pObj->params.maxFrameRate = ALD_VID_ENC_MAX_FRAMERATE; pObj->params.maxBitRate = ALD_VID_ENC_MAX_BITRATE; pObj->params.inputChromaFormat = XDM_YUV_420SP; pObj->params.dataEndianness = XDM_BYTE; pObj->params.maxInterFrameInterval = 1; pObj->params.inputContentType = IVIDEO_PROGRESSIVE; pObj->params.reconChromaFormat = XDM_YUV_420SP; if(create->codec==ALG_VID_CODEC_MPEG4) { pObj->params.size = sizeof(IMP4VENC_Params); pObj->params.encodingPreset = XDM_USER_DEFINED; pObj->params.maxHeight = create->height; pObj->params.maxWidth = (create->offsetH>create->width)?create->offsetH:create->width; pObj->params_mpeg4.subWindowHeight = create->height; pObj->params_mpeg4.subWindowWidth = create->width; pObj->params_mpeg4.rotation = 0; pObj->params_mpeg4.vbvSize = 0; pObj->params_mpeg4.svhMode = 0; pObj->params_mpeg4.IFrameBitRateBiasFactor = 256; pObj->params_mpeg4.PFrameBitRateBiasFactor = 256; pObj->params_mpeg4.peakBufWindow = 2; pObj->params_mpeg4.minBitRate = 64000; //set to 64kbps switch(create->rateControlType) { case ALG_VID_ENC_RATE_CONTROL_RCOFF: pObj->params.rateControlPreset = IVIDEO_NONE; break; default: case ALG_VID_ENC_RATE_CONTROL_VBR: pObj->params.rateControlPreset = IVIDEO_STORAGE; break; case ALG_VID_ENC_RATE_CONTROL_CBR: pObj->params.rateControlPreset = IVIDEO_LOW_DELAY; break; } } else if(create->codec==ALG_VID_CODEC_H264) { if(77 == create->profileIdc) { pObj->params_h264.profileIdc = 77; pObj->params_h264.transform8x8FlagIntraFrame = 0; pObj->params_h264.transform8x8FlagInterFrame = 0; pObj->params_h264.seqScalingFlag = 0; pObj->params_h264.entropyMode = 1; printf("[alg_vidEnc]zeng Main profile --------------create->profileIdc=%d\n" , create->profileIdc); } else if(66 == create->profileIdc) { pObj->params_h264.profileIdc = 66; pObj->params_h264.transform8x8FlagIntraFrame = 0; pObj->params_h264.transform8x8FlagInterFrame = 0; pObj->params_h264.seqScalingFlag = 0; pObj->params_h264.entropyMode = 0; printf("[alg_vidEnc]zeng baseline profile--------------create->profileIdc=%d\n" , create->profileIdc); } else { pObj->params_h264.profileIdc = 100; pObj->params_h264.transform8x8FlagIntraFrame = 0; pObj->params_h264.transform8x8FlagInterFrame = (create->width>2048)?0:1; pObj->params_h264.seqScalingFlag = 1; pObj->params_h264.entropyMode = 1; printf("[alg_vidEnc]zeng hight profile--------------create->profileIdc=%d\n" , create->profileIdc); } pObj->params.size = sizeof(IH264VENC_Params); pObj->params.rateControlPreset = IVIDEO_USER_DEFINED; pObj->params_h264.levelIdc = IH264VENC_LEVEL_40; pObj->params_h264.Log2MaxFrameNumMinus4 = 0; pObj->params_h264.ConstraintSetFlag = 0; pObj->params_h264.enableVUIparams = 7; pObj->params_h264.meAlgo = 0; pObj->params_h264.enableARM926Tcm = 0; pObj->params_h264.enableDDRbuff = (create->ddrEnable) ? 1 : 0; pObj->params_h264.sliceMode = 3; pObj->params_h264.EnableLongTermFrame = 0; pObj->params_h264.outputDataMode = IH264VENC_TI_ENTIREFRAME; pObj->params_h264.sliceFormat = IH264VENC_TI_BYTESTREAM; printf("[alg_vidEnc]zeng afdfafdasfdasf--------create->profileIdc=%d\n" , create->profileIdc); if((create->encodePreset&ALG_VID_ENC_PRESET_MASK) == ALG_VID_ENC_PRESET_AUTO) { if((create->width<320)||(create->height<128)) { pObj->params.encodingPreset = XDM_USER_DEFINED; pObj->params_h264.encQuality = 0; } else { if(create->mode == ALG_VID_ENC_MODE_STANDARD) { pObj->params.encodingPreset = XDM_HIGH_QUALITY; pObj->params_h264.encQuality = 2; } else { pObj->params.encodingPreset = XDM_HIGH_SPEED; pObj->params_h264.encQuality = 3; } } } else { pObj->params.encodingPreset = XDM_USER_DEFINED; pObj->params_h264.encQuality = 0; } if((create->encodePreset&ALG_VID_ENC_SVC_MASK) == ALG_VID_ENC_PRESET_SVC) { pObj->params_h264.numTemporalLayers = 3; pObj->params_h264.svcSyntaxEnable = XDAS_FALSE; /* To disable svcSyntaxEnable as most player cant play this SVC syntax, if player is comptatible, please change the value to XDAS_TRUE; */ } else { pObj->params_h264.numTemporalLayers = 0; pObj->params_h264.svcSyntaxEnable = XDAS_FALSE; } } /*enable mv when initialize for get memory information*/ pObj->createPrm.mbMvOutEnable = 1; pObj->createPrm.forceKeyFrame = FALSE; /* Create video encoder instance */ pObj->hEncode = VIDENC1_create(gALG_hEngine, pObj->algName, &pObj->params); if (pObj->hEncode == NULL) { OSA_ERROR("Failed to open video encode algorithm: %s (0x%x)\n", pObj->algName, Engine_getLastError(gALG_hEngine)); OSA_memFree(pObj); return NULL; } status = ALG_vidEncSetDynamicParams(pObj); if(status!=OSA_SOK) { ALG_vidEncDelete(pObj); return NULL; } return pObj; }