ImxVpuDecReturnCodes imx_vpu_dec_load(void) { IMX_VPU_TRACE("VPU load instance counter: %lu", vpu_load_inst_counter); if (vpu_load_inst_counter != 0) return IMX_VPU_DEC_RETURN_CODE_OK; ImxVpuDecReturnCodes ret = dec_convert_retcode(VPU_DecLoad()); if (ret != IMX_VPU_DEC_RETURN_CODE_OK) IMX_VPU_ERROR("loading decoder failed: %s", imx_vpu_dec_error_string(ret)); else { IMX_VPU_TRACE("loaded decoder"); ++vpu_load_inst_counter; } return ret; }
bool CDVDVideoCodecIMX::VpuOpen(void) { VpuDecRetCode ret; VpuVersionInfo vpuVersion; VpuMemInfo memInfo; VpuDecConfig config; int param; memset(&memInfo, 0, sizeof(VpuMemInfo)); ret = VPU_DecLoad(); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - VPU load failed with error code %d.\n", __FUNCTION__, ret); goto VpuOpenError; } ret = VPU_DecGetVersionInfo(&vpuVersion); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - VPU version cannot be read (%d).\n", __FUNCTION__, ret); goto VpuOpenError; } else { if (g_advancedSettings.CanLogComponent(LOGVIDEO)) CLog::Log(LOGDEBUG, "VPU Lib version : major.minor.rel=%d.%d.%d.\n", vpuVersion.nLibMajor, vpuVersion.nLibMinor, vpuVersion.nLibRelease); } ret = VPU_DecQueryMem(&memInfo); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - iMX VPU query mem error (%d).\n", __FUNCTION__, ret); goto VpuOpenError; } VpuAllocBuffers(&memInfo); m_decOpenParam.nReorderEnable = 1; m_decOpenParam.nChromaInterleave = 1; m_decOpenParam.nMapType = 0; m_decOpenParam.nTiled2LinearEnable = 0; m_decOpenParam.nEnableFileMode = 0; ret = VPU_DecOpen(&m_vpuHandle, &m_decOpenParam, &memInfo); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - iMX VPU open failed (%d).\n", __FUNCTION__, ret); goto VpuOpenError; } config = VPU_DEC_CONF_SKIPMODE; param = VPU_DEC_SKIPNONE; ret = VPU_DecConfig(m_vpuHandle, config, ¶m); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - iMX VPU set skip mode failed (%d).\n", __FUNCTION__, ret); goto VpuOpenError; } // Note that libvpufsl (file vpu_wrapper.c) associates VPU_DEC_CAP_FRAMESIZE // capability to the value of nDecFrameRptEnabled which is in fact directly // related to the ability to generate VPU_DEC_ONE_FRM_CONSUMED even if the // naming is misleading... ret = VPU_DecGetCapability(m_vpuHandle, VPU_DEC_CAP_FRAMESIZE, ¶m); m_frameReported = (param != 0); if (ret != VPU_DEC_RET_SUCCESS) { CLog::Log(LOGERROR, "%s - iMX VPU get framesize capability failed (%d).\n", __FUNCTION__, ret); m_frameReported = false; } return true; VpuOpenError: Dispose(); return false; }