static Void IpcFramesInLink_prdCalloutFcn(UArg arg) { IpcFramesInLink_Obj *pObj = (IpcFramesInLink_Obj *) arg; Int32 status; status = System_sendLinkCmd(pObj->tskId, SYSTEM_CMD_NEW_DATA); if (UTILS_ISERROR(status)) { #ifdef SYSTEM_DEBUG_CMD_ERROR UTILS_warn("IPCFRAMEINLINK:[%s:%d]:" "System_sendLinkCmd SYSTEM_IPC_CMD_RELEASE_FRAMES failed" "errCode = %d", __FILE__, __LINE__, status); #endif } }
UInt32 SystemTiler_isAllocatorDisabled(void) { SystemCommon_TilerIsDisabled tilerAllocatorStatus; Int32 status; UInt32 isDisabled = TRUE; status = System_linkControl(SYSTEM_TILER_LINK_ID, SYSTEM_COMMON_CMD_TILER_IS_ALLOCATOR_DISABLED, &tilerAllocatorStatus, sizeof(tilerAllocatorStatus), TRUE); if (!UTILS_ISERROR(status)) { isDisabled = tilerAllocatorStatus.isAllocatorDisabled; } return isDisabled; }
Ptr SystemTiler_allocRaw(UInt32 size,UInt32 align) { SystemCommon_TilerAllocRaw tilerAllocRaw; Int32 status; Ptr allocAddr = NULL; tilerAllocRaw.size = size; tilerAllocRaw.align = align; tilerAllocRaw.allocAddr = NULL; status = System_linkControl(SYSTEM_TILER_LINK_ID, SYSTEM_COMMON_CMD_TILER_ALLOC_RAW, &tilerAllocRaw, sizeof(tilerAllocRaw), TRUE); if (!UTILS_ISERROR(status)) { allocAddr = (Ptr)tilerAllocRaw.allocAddr; } return allocAddr; }
UInt32 SystemTiler_alloc(UInt32 cntMode, UInt32 width, UInt32 height) { UInt32 tileAddr = SYSTEM_TILER_INVALID_ADDR; SystemCommon_TilerAlloc tilerAlloc; Int32 status; tilerAlloc.cntMode = cntMode; tilerAlloc.width = width; tilerAlloc.height = height; status = System_linkControl(SYSTEM_TILER_LINK_ID, SYSTEM_COMMON_CMD_TILER_ALLOC, &tilerAlloc, sizeof(tilerAlloc), TRUE); if (UTILS_ISERROR(status)) { tileAddr = SYSTEM_TILER_INVALID_ADDR; } else { tileAddr = tilerAlloc.tileAddr; } return tileAddr; }
Int32 Utils_memBitBufAlloc(Bitstream_Buf * pBuf, UInt32 size, UInt16 numFrames) { UInt32 bufId; Int32 status = 0; UInt8 *pBaseAddr; Error_Block ebObj; Error_Block *eb = &ebObj; Error_init(eb); /* init Bitstream_Buf to 0's */ memset(pBuf, 0, sizeof(*pBuf)); /* align size to minimum required frame buffer alignment */ size = VpsUtils_align(size, IVACODEC_VDMA_BUFFER_ALIGNMENT); /* allocate the memory for 'numFrames' */ /* for all 'numFrames' memory is contigously allocated */ pBaseAddr = Memory_alloc(gUtils_heapMemHandle[UTILS_MEM_VID_BITS_BUF_HEAP], (size * numFrames), IVACODEC_VDMA_BUFFER_ALIGNMENT, eb); #ifdef UTILS_MEM_DEBUG Vps_printf(" UTILS: MEM: BITS ALLOC, addr = 0x%08x, size = %d bytes\n", pBaseAddr, (size * numFrames)); #endif if (!Error_check(eb) && (pBaseAddr != NULL) && gUtils_memClearBuf[UTILS_MEM_VID_BITS_BUF_HEAP]) memset(pBaseAddr, 0x80, (size * numFrames)); if (pBaseAddr == NULL) { status = -1; /* Error in * allocation, * exit with error */ } if (!UTILS_ISERROR(status)) { /* init memory pointer for 'numFrames' */ for (bufId = 0; bufId < numFrames; bufId++) { /* copy channelNum to Bitstream_Buf from FVID2_Format */ pBuf->channelNum = bufId; pBuf->addr = pBaseAddr; /* On the RTOS side, we assume Virtual addr == PhyAddr */ pBuf->phyAddr = (UInt32)pBaseAddr; pBuf->bufSize = size; /* go to next frame */ pBuf++; /* increment base address */ pBaseAddr += size; } } UTILS_assert(status == 0); return status; }