HTEST * create_test( OMX_STRING component, OMX_STRING in_file) { HTEST *hTest = NULL; hTest = (HTEST*)fsl_osal_malloc_new(sizeof(HTEST)); if(hTest == NULL) { printf("Failed to allocate memory for test handle.\n"); return 0; } fsl_osal_memset(hTest, 0, sizeof(HTEST)); hTest->name = component; hTest->pMsgQ = FSL_NEW(Queue, ()); if(hTest->pMsgQ == NULL) { printf("Create message queue failed.\n"); return 0; } hTest->pMsgQ->Create(128, sizeof(MSG), E_FSL_OSAL_TRUE); MakeDumpFileName(in_file,hTest->dump_file_path0,0); MakeDumpFileName(in_file,hTest->dump_file_path1,1); hTest->pOutFile0 = fopen(hTest->dump_file_path0, "wb"); if(hTest->pOutFile0 == NULL) { printf("Failed to open file: %s\n", hTest->dump_file_path0); return 0; } hTest->pOutFile1 = fopen(hTest->dump_file_path1, "wb"); if(hTest->pOutFile1 == NULL) { printf("Failed to open file: %s\n", hTest->dump_file_path1); return 0; } fsl_osal_sem_init(&(hTest->sParserFormatSem), 0, 0); return hTest; }
OMX_ERRORTYPE GMSubtitlePlayer::Init() { if(fsl_osal_sem_init(&pSem, 0, 0) != E_FSL_OSAL_SUCCESS) { LOG_ERROR("Failed to create semphore for subtitle thread.\n"); return OMX_ErrorInsufficientResources; } if(E_FSL_OSAL_SUCCESS != fsl_osal_cond_create(&Cond)) { LOG_ERROR("Create condition variable for subtitle thread.\n"); return OMX_ErrorInsufficientResources; } if(E_FSL_OSAL_SUCCESS != fsl_osal_thread_create(&pThread, NULL, GMSubtitlePlayer::ThreadFunc, this)) { LOG_ERROR("Failed to create subtitle thread.\n"); return OMX_ErrorInsufficientResources; } fsl_osal_memset(&delayedSample, 0, sizeof(delayedSample)); delayedSample.nFilledLen = -1; return OMX_ErrorNone; }
QUEUE_ERRORTYPE Queue::Create( fsl_osal_u32 maxQSize, fsl_osal_u32 msgSize, efsl_osal_bool block) { QUEUE_ERRORTYPE ret = QUEUE_SUCCESS; fsl_osal_u32 i, aligned_msg_size; fsl_osal_ptr ptr = NULL; QNODE *pQNode = NULL; fsl_osal_u8 *pMsg = NULL; pQNodeMem = pQMsgMem = NULL; pFreeNodes = pHead = pTail = NULL; nQSize = 0; lock = usedNodesSem = freeNodesSem = NULL; nMaxQSize = maxQSize; nMsgSize = msgSize; bBlocking = block; /* allocate for queue nodes */ ptr = FSL_MALLOC(sizeof(QNODE) * nMaxQSize); if(ptr == NULL) { LOG_ERROR("Failed to allocate memory for queue node.\n"); ret = QUEUE_INSUFFICIENT_RESOURCES; goto err; } pQNodeMem = ptr; pQNode = (QNODE*)ptr; /* alloate for node messages */ aligned_msg_size = (nMsgSize + 3)/4*4; ptr = FSL_MALLOC(nMaxQSize * aligned_msg_size); if(ptr == NULL) { LOG_ERROR("Failed to allocate memory for queue node message.\n"); ret = QUEUE_INSUFFICIENT_RESOURCES; goto err; } pQMsgMem = ptr; pMsg = (fsl_osal_u8*)ptr; for(i=0; i<nMaxQSize-1; i++) { pQNode[i].NextNode = &(pQNode[i+1]); pQNode[i].pMsg = pMsg; pMsg += aligned_msg_size; } pQNode[nMaxQSize-1].NextNode = NULL; pQNode[nMaxQSize-1].pMsg = pMsg; pFreeNodes = pQNode; if(fsl_osal_mutex_init(&lock, fsl_osal_mutex_normal) != E_FSL_OSAL_SUCCESS) { LOG_ERROR("Failed to create mutex for queue.\n"); ret = QUEUE_INSUFFICIENT_RESOURCES; goto err; } if(fsl_osal_sem_init(&usedNodesSem, 0, 0) != E_FSL_OSAL_SUCCESS) { LOG_ERROR("Failed to create mutex for used nodes.\n"); ret = QUEUE_INSUFFICIENT_RESOURCES; goto err; } if(fsl_osal_sem_init(&freeNodesSem, 0, nMaxQSize) != E_FSL_OSAL_SUCCESS) { LOG_ERROR("Failed to create mutex for free nodes.\n"); ret = QUEUE_INSUFFICIENT_RESOURCES; goto err; } return ret; err: Free(); return ret; }