Example #1
0
QUEUE_ERRORTYPE Queue::Get(fsl_osal_ptr pMsg)
{
    QNODE *pQNode = NULL;

    if(bBlocking == E_FSL_OSAL_TRUE)
        fsl_osal_sem_wait(usedNodesSem);
    else {
        if(fsl_osal_sem_trywait(usedNodesSem) != E_FSL_OSAL_SUCCESS)
            return QUEUE_NOT_READY;
    }

    fsl_osal_mutex_lock(lock);

    if(pHead == NULL) {
        fsl_osal_mutex_unlock(lock);
        return QUEUE_OVERFLOW;
    }

    pQNode = pHead;
    pHead = pHead->NextNode;
    fsl_osal_memcpy(pMsg, pQNode->pMsg, nMsgSize);
    pQNode->NextNode = pFreeNodes;
    pFreeNodes = pQNode;
    nQSize --;
    if(pHead == NULL)
        pTail = NULL;

    fsl_osal_sem_post(freeNodesSem);
    fsl_osal_mutex_unlock(lock);

    return QUEUE_SUCCESS;
}
OMX_ERRORTYPE start_data_process(HTEST *hTest)
{
	OMX_ERRORTYPE ret = OMX_ErrorNone;
	OMX_U32 i, wait_cnt = 0;

	hTest->bHoldBuffers = OMX_FALSE;

	while (fsl_osal_sem_trywait(hTest->sParserFormatSem) !=E_FSL_OSAL_SUCCESS)
	{
		usleep(10*1000);
		if(hTest->bError)
			return OMX_ErrorUndefined;

		if((wait_cnt++) > 60*100)
		{
			//if load time is larger than 1 minutes, then timeout
			printf("timeout when wait output\n");
			return OMX_ErrorUndefined;
		}
	}

	ret = parser_process_port_setting_changed(hTest,hTest->nAudioTrackNum);
	if (ret != OMX_ErrorNone)
		return ret;
	ret = parser_process_port_setting_changed(hTest,hTest->nVideoTrackNum);
	if (ret != OMX_ErrorNone)
		return ret;


	OMX_CONFIG_SENDAUDIOFIRST sSendAudioFirst;
	OMX_INIT_STRUCT(&sSendAudioFirst, OMX_CONFIG_SENDAUDIOFIRST);
	sSendAudioFirst.bSendAudioFrameFirst = OMX_FALSE;
	ret = OMX_SetConfig(hTest->hComponent,(OMX_INDEXTYPE)OMX_IndexConfigParserSendAudioFirst, &sSendAudioFirst);
	if (ret != OMX_ErrorNone)
		return ret;
//    do_seek(hTest, 30, OMX_TIME_SeekModeFast);
	/* Send output buffers */
	for(i=0; i<hTest->nBufferHdr[0]; i++)
	{
		hTest->pBufferHdr[0][i]->nFilledLen = 0;
		hTest->pBufferHdr[0][i]->nOffset = 0;
		OMX_FillThisBuffer(hTest->hComponent, hTest->pBufferHdr[0][i]);
	}

	for(i=0; i<hTest->nBufferHdr[1]; i++)
	{
		hTest->pBufferHdr[1][i]->nFilledLen = 0;
		hTest->pBufferHdr[1][i]->nOffset = 0;
		OMX_FillThisBuffer(hTest->hComponent, hTest->pBufferHdr[1][i]);
	}

	return ret;
}
Example #3
0
QUEUE_ERRORTYPE Queue::Get(fsl_osal_ptr pMsg, fsl_osal_u32 nIndex)
{
    QNODE *pQNode, *pQNodePrev = NULL;
    fsl_osal_u32 i;

    if(nIndex > nQSize) {
        fsl_osal_memset(pMsg, 0, nMsgSize);
        return QUEUE_FAILURE;
    }

    if(nIndex == 1)
        return Get(pMsg);

    if(bBlocking == E_FSL_OSAL_TRUE)
        fsl_osal_sem_wait(usedNodesSem);
    else {
        if(fsl_osal_sem_trywait(usedNodesSem) != E_FSL_OSAL_SUCCESS)
            return QUEUE_NOT_READY;
    }

    fsl_osal_mutex_lock(lock);

    if(pHead == NULL) {
        fsl_osal_mutex_unlock(lock);
        return QUEUE_OVERFLOW;
    }

    pQNodePrev = pHead;
    pQNode = pQNodePrev->NextNode;

    for(i=2; i<nIndex; i++){
        pQNodePrev = pQNodePrev->NextNode;
        pQNode = pQNode->NextNode;
    }

    fsl_osal_memcpy(pMsg, pQNode->pMsg, nMsgSize);

    pQNodePrev->NextNode = pQNode->NextNode;
    pQNode->NextNode = pFreeNodes;
    pFreeNodes = pQNode;
    nQSize --;

    if(pTail == pQNode)
        pTail = pQNodePrev;

    fsl_osal_sem_post(freeNodesSem);
    fsl_osal_mutex_unlock(lock);

    return QUEUE_SUCCESS;
}
Example #4
0
OMX_ERRORTYPE GMSubtitlePlayer::Reset()
{
    LOG_DEBUG("GMSubtitlePlayer::Reset\n");

    bReset = OMX_TRUE;
    while(fsl_osal_sem_trywait(pSem) == E_FSL_OSAL_SUCCESS);
    fsl_osal_cond_broadcast(Cond);

    mSample.pBuffer = NULL;
    RenderOneSample();

    fsl_osal_memset(&delayedSample, 0, sizeof(delayedSample));
    delayedSample.nFilledLen = -1;
    return OMX_ErrorNone;
}