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;
}
示例#2
0
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;
}
示例#3
0
文件: Queue.cpp 项目: FreeSrk/omx
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;
}