Example #1
0
OMX_ERRORTYPE volumeEmptyBufferDone(
    OMX_OUT OMX_HANDLETYPE hComponent,
    OMX_OUT OMX_PTR pAppData,
    OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) {

    OMX_ERRORTYPE err;
    static int iBufferDropped = 0;

    if(pBuffer != NULL) {
        if(!bEOS) {
            if(pOutBuffer[0]->pBuffer == pBuffer->pBuffer) {
                pOutBuffer[0]->nFilledLen = pBuffer->nFilledLen;
                err = OMX_FillThisBuffer(appPriv->audiosrchandle, pOutBuffer[0]);
            } else {
                pOutBuffer[1]->nFilledLen = pBuffer->nFilledLen;
                err = OMX_FillThisBuffer(appPriv->audiosrchandle, pOutBuffer[1]);
            }
            if(err != OMX_ErrorNone) {
                DEBUG(DEB_LEV_ERR, "In %s Error %08x Calling FillThisBuffer\n", __func__,err);
            }
        } else {
            DEBUG(DEB_LEV_ERR, "In %s: eos=%x Dropping Fill This Buffer\n", __func__,(int)pBuffer->nFlags);
            iBufferDropped++;
            if(iBufferDropped == 2) {
                tsem_up(appPriv->eofSem);
            }
        }
    } else {
        if(!bEOS) {
            tsem_up(appPriv->eofSem);
        }
        DEBUG(DEB_LEV_ERR, "Ouch! In %s: had NULL buffer to output...\n", __func__);
    }
    return OMX_ErrorNone;
}
OMX_ERRORTYPE start_data_process(HTEST *hTest)
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;
    OMX_U32 i, wait_cnt = 0;

    hTest->bHoldBuffers = OMX_FALSE;

	OMX_CONFIG_BOOLEANTYPE sCapturing;
	OMX_INIT_STRUCT(&sCapturing, OMX_CONFIG_BOOLEANTYPE);
	sCapturing.bEnabled = OMX_TRUE;
    ret = OMX_SetConfig(hTest->hComponent,OMX_IndexConfigCapturing, &sCapturing);
    if (ret != OMX_ErrorNone)
        return ret;

    /* 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
static OMX_ERRORTYPE camera_sourceFillBufferDone(
        OMX_OUT OMX_HANDLETYPE hComponent,
        OMX_OUT OMX_PTR pAppData,
        OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer)
{   

    DEBUG(DEB_LEV_FUNCTION_NAME, "In %s for camera component\n",__func__);

    DEBUG(DEB_LEV_FULL_SEQ, "%s: Get returned buffer (0x%lX) from port[%ld], nFilledLen=%ld\n", __func__, (OMX_U32)pBuffer, pBuffer->nOutputPortIndex, pBuffer->nFilledLen);

    if (pBuffer->nOutputPortIndex == OMX_CAMPORT_INDEX_CP)
    {
        DEBUG(DEB_LEV_FULL_SEQ, "%s: writing to file",__func__);
        //fwrite(pBuffer->pBuffer + pBuffer->nOffset, 1, pBuffer->nFilledLen, fCapture);
        pBuffer->nFilledLen = 0;
        pBuffer->nOffset = 0;
        OMX_FillThisBuffer(appPriv->camerahandle, pBuffer);
        fprintf(stdout, "capture buffer done!!!\n");
    }
    else if(pBuffer->nOutputPortIndex == OMX_CAMPORT_INDEX_VF)
    {
        if(pBuffer->nFilledLen >0)
        {
            unsigned char *vaddr = NULL;
            vaddr = bufferHandleLock((buffer_handle_t)pBuffer->pBuffer,0,0);
            if(vaddr){
            surface_display_main_show(vaddr+pBuffer->nOffset, DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT,DEFAULT_CAMERA_COLOR_FORMAT);
            
            }
            bufferHandleUnlock((buffer_handle_t)pBuffer->pBuffer);
        }
        if ((pBuffer->nFlags & OMX_BUFFERFLAG_STARTTIME) != 0)
        {
            DEBUG(DEB_LEV_ERR, "%s: Get buffer flag OMX_BUFFERFLAG_STARTTIME!\n", __func__);
        }

        /*
#ifndef OMX_SKIP64BIT
        DEBUG(DEB_LEV_ERR, "%s: buffer[0x%lX] time stamp: 0x%016llX\n", __func__, (OMX_U32)pBuffer, pBuffer->nTimeStamp);
#else
        DEBUG(DEB_LEV_ERR, "%s: buffer[0x%lX] time stamp: 0x%08lX%08lX\n", __func__, (OMX_U32)pBuffer, pBuffer->nTimeStamp.nHighPart, pBuffer->nTimeStamp.nLowPart);
#endif
*/

        pBuffer->nFilledLen = 0;
        pBuffer->nOffset = 0;

        OMX_FillThisBuffer(appPriv->camerahandle, pBuffer);

    }

    DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s for camera component, return code: 0x%X\n",__func__, OMX_ErrorNone);
    return OMX_ErrorNone;
}
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 #5
0
OMX_ERRORTYPE audiosrcFillBufferDone(
    OMX_OUT OMX_HANDLETYPE hComponent,
    OMX_OUT OMX_PTR pAppData,
    OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) {

    OMX_ERRORTYPE err;
    OMX_STATETYPE eState;

    if(pBuffer != NULL) {
        if(!bEOS) {
            /** if there is volume component component in processing state then send this buffer, in non tunneled case
              * else in non tunneled case, write the output buffer contents in the specified output file
              */
            if(flagIsVolCompRequested && (!flagSetupTunnel)) {
                OMX_GetState(appPriv->volume_handle,&eState);
                if(eState == OMX_StateExecuting || eState == OMX_StatePause) {
                    if(pInBufferVolc[0]->pBuffer == pBuffer->pBuffer) {
                        pInBufferVolc[0]->nFilledLen = pBuffer->nFilledLen;
                        err = OMX_EmptyThisBuffer(appPriv->volume_handle, pInBufferVolc[0]);
                    } else {
                        pInBufferVolc[1]->nFilledLen = pBuffer->nFilledLen;
                        err = OMX_EmptyThisBuffer(appPriv->volume_handle, pInBufferVolc[1]);
                    }
                    if(err != OMX_ErrorNone) {
                        DEBUG(DEB_LEV_ERR, "In %s Error %08x Calling FillThisBuffer\n", __func__,err);
                    }
                } else {
                    err = OMX_FillThisBuffer(hComponent, pBuffer);
                }
            } else if((pBuffer->nFilledLen > 0) && (!flagSetupTunnel)) {
                fwrite(pBuffer->pBuffer, 1,  pBuffer->nFilledLen, outfile);
                pBuffer->nFilledLen = 0;
            }
            if(pBuffer->nFlags == OMX_BUFFERFLAG_EOS) {
                DEBUG(DEB_LEV_ERR, "In %s: eos=%x Calling Empty This Buffer\n", __func__, (int)pBuffer->nFlags);
                bEOS = OMX_TRUE;
            }
            if(!bEOS && !flagIsVolCompRequested && (!flagSetupTunnel)) {
                err = OMX_FillThisBuffer(hComponent, pBuffer);
            }
        } else {
            DEBUG(DEB_LEV_ERR, "In %s: eos=%x Dropping Empty This Buffer\n", __func__,(int)pBuffer->nFlags);
        }
    } else {
        DEBUG(DEB_LEV_ERR, "Ouch! In %s: had NULL buffer to output...\n", __func__);
    }
    return OMX_ErrorNone;
}
OMX_ERRORTYPE SampleTest_ReadOutBuffers(SampleCompTestCtxt * pContext)
{

	OMX_ERRORTYPE eError = OMX_ErrorNone;
	BufferList *pList;
	OMX_BUFFERHEADERTYPE *pBufHeader;

	pList = pContext->pOutBufferList;
	while (pList && pList->pBufHdr)
	{
		printf("\nAbout to do FTB\n");

		BUFFERLIST_CLEAR_ENTRY(pList, pBufHeader);

		eError = OMX_FillThisBuffer(pContext->hComp, pBufHeader);

		OMX_TEST_BAIL_IF_ERROR(eError);
		if (pBufHeader->nFlags == OMX_BUFFERFLAG_EOS)
		{
			pContext->nBufDoneCalls = OMX_TEST_BUFFERS_OF_TRAFFIC;
		}
	}

      OMX_TEST_BAIL:
	return eError;

}
OMX_ERRORTYPE videosrcFillBufferDone(
  OMX_OUT OMX_HANDLETYPE hComponent,
  OMX_OUT OMX_PTR pAppData,
  OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) {

  OMX_ERRORTYPE err;

  if(pBuffer != NULL){
    if(!bEOS) {
      /** if there is color conv component in processing state then send this buffer, in non tunneled case
        * else in non tunneled case, write the output buffer contents in the specified output file
        */
      if(pBuffer->nFilledLen > 0) {
          fwrite(pBuffer->pBuffer, sizeof(char),  pBuffer->nFilledLen, outfile);
          pBuffer->nFilledLen = 0;
      }
      if(pBuffer->nFlags == OMX_BUFFERFLAG_EOS) {
        DEBUG(DEB_LEV_ERR, "In %s: eos=%x Calling Empty This Buffer\n", __func__, (int)pBuffer->nFlags);
        bEOS = OMX_TRUE;
      }
      if(!bEOS ) {
        err = OMX_FillThisBuffer(hComponent, pBuffer);
      }
    } else {
      DEBUG(DEB_LEV_ERR, "In %s: eos=%x Dropping Empty This Buffer\n", __func__,(int)pBuffer->nFlags);
    }
  } else {
    DEBUG(DEB_LEV_ERR, "Ouch! In %s: had NULL buffer to output...\n", __func__);
  }
  return OMX_ErrorNone;
}
Example #8
0
OMX_ERRORTYPE COpenMaxVideo::PrimeFillBuffers(void)
{
  OMX_ERRORTYPE omx_err = OMX_ErrorNone;
  OpenMaxVideoBuffer *buffer;

  #if defined(OMX_DEBUG_VERBOSE)
  CLog::Log(LOGDEBUG, "%s::%s\n", CLASSNAME, __func__);
  #endif
  // tell OpenMax to start filling output buffers
  for (size_t i = 0; i < m_omx_output_buffers.size(); i++)
  {
    buffer = m_omx_output_buffers[i];
    // always set the port index.
    buffer->omx_buffer->nOutputPortIndex = m_omx_output_port;
    // Need to clear the EOS flag.
    buffer->omx_buffer->nFlags &= ~OMX_BUFFERFLAG_EOS;
    buffer->omx_buffer->pAppPrivate = buffer;

    omx_err = OMX_FillThisBuffer(m_omx_decoder, buffer->omx_buffer);
    if (omx_err)
      CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer failed with omx_err(0x%x)\n",
        CLASSNAME, __func__, omx_err);
  }

  return omx_err;
}
OMX_ERRORTYPE process_event(HTEST *hTest, MSG *pMsg)
{
	OMX_EVENTTYPE event = pMsg->data.event.eEvent;
	OMX_U32 nPortIndex = pMsg->data.event.nData1;

	if(event == OMX_EventPortSettingsChanged)
	{
		port_disable(hTest, nPortIndex);
		port_enable(hTest, nPortIndex);

		OMX_STATETYPE eState = OMX_StateInvalid;
		OMX_GetState(hTest->hComponent, &eState);
		if(eState == OMX_StateExecuting)
		{
			/* Send output buffers */
			OMX_S32 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 OMX_ErrorNone;
}
OMX_ERRORTYPE onFillBufferDone(OMX_HANDLETYPE hComponent,
							   OMX_PTR pAppData,
							   OMX_BUFFERHEADERTYPE* pBuffer)
{    
	/*if (isFirstCallback) {
		isFirstCallback = false;
		currentFrameTime = ofGetElapsedTimeMillis();
		ofLogVerbose() << "isFirstCallback";
	}else 
	{
		lastFrameTime = currentFrameTime;
		currentFrameTime = ofGetElapsedTimeMillis();
		ofLogVerbose() << "Frame process time: " << currentFrameTime - lastFrameTime;
		
	}*/

	//ofLogVerbose() << "onFillBufferDone<----------";
	//COMXCoreComponent *ctx = static_cast<COMXCoreComponent*>(pAppData);
	OMX_ERRORTYPE didFillBuffer = OMX_FillThisBuffer(hComponent, pBuffer);
	if (didFillBuffer == OMX_ErrorNone) 
	{
		//OMXDecoderBase *ctx = static_cast<OMXDecoderBase*>(pAppData);
		
		OMXDecoderBase::fillBufferCounter++;
		//ofLogVerbose(__func__) << " fillBufferCounter: " << fillBufferCounter;
	}
	
	return didFillBuffer;
}
void * process_thread(void *ptr)
{
	HTEST *hTest = (HTEST*)ptr;
	OMX_BUFFERHEADERTYPE *pBufferHdr = NULL;
	MSG sMsg;

	while(1)
	{
		hTest->pMsgQ->Get(&sMsg);
		if(sMsg.type == EVENT)
		{
			process_event(hTest, &sMsg);
		}
		else if(sMsg.type == EMPTY_DONE)
		{
			pBufferHdr = sMsg.data.buffer.pBuffer;
			if(hTest->bHoldBuffers != OMX_TRUE)
			{
				read_data(hTest, pBufferHdr);
				OMX_EmptyThisBuffer(sMsg.hComponent, pBufferHdr);
			}
		}
		else if(sMsg.type == FILL_DONE)
		{
			pBufferHdr = sMsg.data.buffer.pBuffer;
			if(hTest->bHoldBuffers != OMX_TRUE)
				OMX_FillThisBuffer(sMsg.hComponent, pBufferHdr);
		}

		if(hTest->bStop == OMX_TRUE)
			break;
	}

	return NULL;
}
OMX_ERRORTYPE port_enable(HTEST *hTest, OMX_U32 nPortIndex)
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;
    OMX_COMPONENTTYPE *hComponent;
    OMX_U32 i;

    hComponent = hTest->hComponent;
    ret = SendCommand(hTest, OMX_CommandPortEnable, nPortIndex, NULL, OMX_FALSE);
    if(ret != OMX_ErrorNone)
        return ret;

    prepare_port_buffers(hTest, nPortIndex);

    WaitCommand(hTest, OMX_CommandPortEnable, nPortIndex, NULL);

    hTest->bHoldBuffers = OMX_FALSE;
    for(i=0; i<hTest->nBufferHdr[nPortIndex]; i++) {
        if(hTest->PortDir[nPortIndex] == OMX_DirOutput) {
            OMX_FillThisBuffer(hTest->hComponent, hTest->pBufferHdr[nPortIndex][i]);
        }
    }

    printf("port enable done.\n");

    return OMX_ErrorNone;
}
OMX_ERRORTYPE AnatomyOMXClient::OnFillBufferDone(
        OMX_IN OMX_HANDLETYPE hComponent,
        OMX_IN OMX_PTR pAppData,
        OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) {

	AnatomyOMXClient* omxclient = reinterpret_cast<AnatomyOMXClient*>(pAppData);
	CHECK( NULL != omxclient);
	CHECK( NULL != pBuffer );

	omxclient->addOMXBufferInfo(kPortIndexOutput, pBuffer);

	if( pBuffer->nFlags & OMX_BUFFERFLAG_EOS || omxclient->getStatus() == 1 )
	{
		omxclient->signalEOF();
		omxclient->setStatus(1);
		return OMX_ErrorNone;
	}

	if( pBuffer->nSize > 0 )
	{
		omxclient->render(pBuffer->pBuffer, pBuffer->nSize);
	}

	OMX_FillThisBuffer(hComponent, pBuffer);
	omxclient->removeOMXBufferInfo(kPortIndexOutput, pBuffer);
	return OMX_ErrorNone;
}
Example #14
0
void COpenMaxVideo::SetDropState(bool bDrop)
{
  m_drop_state = bDrop;

  if (m_drop_state)
  {
    OMX_ERRORTYPE omx_err;

    // blow all but the last ready video frame
    pthread_mutex_lock(&m_omx_output_mutex);
    while (m_omx_output_ready.size() > 1)
    {
      m_dts_queue.pop();
      OMX_BUFFERHEADERTYPE *omx_buffer = m_omx_output_ready.front()->omx_buffer;
      m_omx_output_ready.pop();
      // return the omx buffer back to OpenMax to fill.
      omx_err = OMX_FillThisBuffer(m_omx_decoder, omx_buffer);
      if (omx_err)
        CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer, omx_err(0x%x)\n",
          CLASSNAME, __func__, omx_err);
    }
    pthread_mutex_unlock(&m_omx_output_mutex);

    #if defined(OMX_DEBUG_VERBOSE)
    CLog::Log(LOGDEBUG, "%s::%s - m_drop_state(%d)\n",
      CLASSNAME, __func__, m_drop_state);
    #endif
  }
}
Example #15
0
void my_fill_buffer_done(void* data, COMPONENT_T* comp)
{
    if (OMX_FillThisBuffer(ilclient_get_handle(video_render), eglBuffer) != OMX_ErrorNone)
    {
        printf("OMX_FillThisBuffer failed in callback\n");
        exit(1);
    }
}
Example #16
0
bool COpenMaxVideo::GetPicture(DVDVideoPicture* pDvdVideoPicture)
{
  while (m_omx_output_busy.size() > 1)
  {
    // fetch a output buffer and pop it off the busy list
    pthread_mutex_lock(&m_omx_output_mutex);
    OpenMaxVideoBuffer *buffer = m_omx_output_busy.front();
    m_omx_output_busy.pop();
    pthread_mutex_unlock(&m_omx_output_mutex);

    bool done = buffer->omx_buffer->nFlags & OMX_BUFFERFLAG_EOS;
    if (!done)
    {
      // return the omx buffer back to OpenMax to fill.
      OMX_ERRORTYPE omx_err = OMX_FillThisBuffer(m_omx_decoder, buffer->omx_buffer);
      if (omx_err)
        CLog::Log(LOGERROR, "%s::%s - OMX_FillThisBuffer, omx_err(0x%x)\n",
          CLASSNAME, __func__, omx_err);
    }
  }

  if (!m_omx_output_ready.empty())
  {
    OpenMaxVideoBuffer *buffer;
    // fetch a output buffer and pop it off the ready list
    pthread_mutex_lock(&m_omx_output_mutex);
    buffer = m_omx_output_ready.front();
    m_omx_output_ready.pop();
    m_omx_output_busy.push(buffer);
    pthread_mutex_unlock(&m_omx_output_mutex);

    pDvdVideoPicture->dts = DVD_NOPTS_VALUE;
    pDvdVideoPicture->pts = DVD_NOPTS_VALUE;
    pDvdVideoPicture->format = RENDER_FMT_OMXEGL;
    pDvdVideoPicture->openMax = this;
    pDvdVideoPicture->openMaxBuffer = buffer;

    if (!m_dts_queue.empty())
    {
      pDvdVideoPicture->dts = m_dts_queue.front();
      m_dts_queue.pop();
    }
    // nTimeStamp is in microseconds
    pDvdVideoPicture->pts = (buffer->omx_buffer->nTimeStamp == 0) ? DVD_NOPTS_VALUE : (double)buffer->omx_buffer->nTimeStamp / 1000.0;
  }
  #if defined(OMX_DEBUG_VERBOSE)
  else
  {
    CLog::Log(LOGDEBUG, "%s::%s - called but m_omx_output_ready is empty\n",
      CLASSNAME, __func__);
  }
  #endif

  pDvdVideoPicture->iFlags  = DVP_FLAG_ALLOCATED;
  pDvdVideoPicture->iFlags |= m_drop_state ? DVP_FLAG_DROPPED : 0;

  return true;
}
OMX_ERRORTYPE onFillBufferDone(OMX_HANDLETYPE hComponent,
							   OMX_PTR pAppData,
							   OMX_BUFFERHEADERTYPE* pBuffer)
{    
	
	//ofLogVerbose() << "onFillBufferDone<----------";
	//COMXCoreComponent *ctx = static_cast<COMXCoreComponent*>(pAppData);
	OMX_ERRORTYPE didFillBuffer = OMX_FillThisBuffer(hComponent, pBuffer);
	return didFillBuffer;
}
Example #18
0
OMX_ERRORTYPE omxil_comp::FillThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer)
{
	OMX_ERRORTYPE result;

	result = OMX_FillThisBuffer(comp, pBuffer);
	if (result != OMX_ErrorNone) {
		fprintf(stderr, "OMX_FillThisBuffer failed.\n");
	}

	return result;
}
Example #19
0
status_t OMXNodeInstance::fillBuffer(OMX::buffer_id buffer) {
    Mutex::Autolock autoLock(mLock);

    OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer;
    header->nFilledLen = 0;
    header->nOffset = 0;
    header->nFlags = 0;

    OMX_ERRORTYPE err = OMX_FillThisBuffer(mHandle, header);

    return StatusFromOMXError(err);
}
Example #20
0
OMX_ERRORTYPE my_fill_buffer_done(OMX_HANDLETYPE hComponent,
					OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer)
{
	appctx *ctx = (appctx *) pAppData;

  if (OMX_FillThisBuffer(ctx->render, ctx->eglBuffer) != OMX_ErrorNone)
   {
      printf("OMX_FillThisBuffer failed in callback\n");
      exit(1);
   }
	return OMX_ErrorNone;
}
OMX_ERRORTYPE camera_sourceFillBufferDone(
  OMX_HANDLETYPE hComponent,
  OMX_PTR pAppData,
  OMX_BUFFERHEADERTYPE* pBuffer) {

  DEBUG(DEB_LEV_FUNCTION_NAME, "In %s for camera component\n",__func__);

  DEBUG(DEB_LEV_FULL_SEQ, "%s: Get returned buffer (0x%lX) from port[%ld], nFilledLen=%ld\n", __func__, (OMX_U32)pBuffer, pBuffer->nOutputPortIndex, pBuffer->nFilledLen);

  if (pBuffer->nOutputPortIndex == OMX_CAMPORT_INDEX_CP) {
    if ((pBuffer->nFlags & OMX_BUFFERFLAG_STARTTIME) != 0) {
      DEBUG(DEB_LEV_FULL_SEQ, "%s: Get buffer flag OMX_BUFFERFLAG_STARTTIME!\n", __func__);
      pBuffer->nFlags = 0;
    }
    /* Print time stamp of each buffer */
#ifndef OMX_SKIP64BIT
    DEBUG(DEB_LEV_FULL_SEQ, "%s: buffer[0x%lX] time stamp: 0x%016llX\n", __func__, (OMX_U32)pBuffer, pBuffer->nTimeStamp);
#else
    DEBUG(DEB_LEV_FULL_SEQ, "%s: buffer[0x%lX] time stamp: 0x%08lX%08lX\n", __func__, (OMX_U32)pBuffer, pBuffer->nTimeStamp.nHighPart, pBuffer->nTimeStamp.nLowPart);
#endif
  }

  if (pBuffer->nOutputPortIndex == OMX_CAMPORT_INDEX_CP &&  fCapture != NULL) {
    DEBUG(DEB_LEV_FULL_SEQ, "%s: writing to file",__func__);
    fwrite(pBuffer->pBuffer + pBuffer->nOffset, 1, pBuffer->nFilledLen, fCapture);
    pBuffer->nFilledLen = 0;
    pBuffer->nOffset = 0;
    OMX_FillThisBuffer(appPriv->camerahandle, pBuffer);
  }
  else if (pBuffer->nOutputPortIndex == OMX_CAMPORT_INDEX_CP_T &&  fThumbnail != NULL) {
    fwrite(pBuffer->pBuffer + pBuffer->nOffset, 1, pBuffer->nFilledLen, fThumbnail);
    pBuffer->nFilledLen = 0;
    pBuffer->nOffset = 0;
    OMX_FillThisBuffer(appPriv->camerahandle, pBuffer);
  }

  DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s for camera component, return code: 0x%X\n",__func__, OMX_ErrorNone);
  return OMX_ErrorNone;
}
Example #22
0
    void FillThisBuffer(iterator it) {
        OMX_BUFFERHEADERTYPE* bh = it->buf;
        bh->nFlags = 0;
        bh->nOffset = 0;
        bh->nFilledLen = 0;
            //enum { Y0=1920*1080 };
            //static char z16[16] = {0};
            //memcpy(bh->pBuffer+Y0, z16, 16);
            //memcmp(bh->pBuffer+Y0, z16, 16);
        it->flags |= MSK_USED;
printf("%s:%s [%d] %d %d %x\n", __FUNCTION__,"OMX_FillThisBuffer", INDEX(it), bh->nFilledLen, bh->nOffset, bh->nFlags);
        OMX_ERRORTYPE err = OMX_FillThisBuffer(component, bh);
        ERR_EXIT_IF(err!=OMX_ErrorNone, "OMX_FillThisBuffer %d", int(err));
    }
OMX_ERRORTYPE cFillBufferDone(
			      OMX_HANDLETYPE hComponent,
			      OMX_PTR pAppData,
			      OMX_BUFFERHEADERTYPE* pBuffer) {

    fprintf(stderr, "Hi there, I am in the %s callback.\n", __func__);
    if (bEOS) {
	fprintf(stderr, "Buffers filled, exiting\n");
    }
    write(outFd, pBuffer->pBuffer, pBuffer->nFilledLen);
    pBuffer->nFilledLen = 0;
    err = OMX_FillThisBuffer(handle, pBuffer);
    
    return OMX_ErrorNone;
}
/*========================================================*/
static int omx_fillthisbuffer(int index, int PortNum)
{
	struct port_param *sPortParam;
	sPortParam = &(pContext->sPortParam[PortNum]);
	eError = OMX_FillThisBuffer(pContext->hComp,
	    sPortParam->bufferheader[index]);

	OMX_TEST_BAIL_IF_ERROR(eError);
	return eError;

      OMX_TEST_BAIL:
	if (eError != OMX_ErrorNone)
		dprintf(0, "ERROR OMX_FillThisBuffer()\n");
	return eError;
}
Example #25
0
OMX_ERRORTYPE COMXCoreComponent::FillThisBuffer(OMX_BUFFERHEADERTYPE *omx_buffer)
{
    OMX_ERRORTYPE omx_err = OMX_ErrorNone;

    if(!m_handle || !omx_buffer)
        return OMX_ErrorUndefined;

    omx_err = OMX_FillThisBuffer(m_handle, omx_buffer);
    if (omx_err != OMX_ErrorNone) {
        Logger::LogOut(LOG_LEVEL_ERROR, "COMXCoreComponent::FillThisBuffer component(%s) - failed with result(0x%x)",
                m_componentName.c_str(), omx_err);
    }

    return omx_err;
}
Example #26
0
void
g_omx_port_release_buffer (GOmxPort *port,
                           OMX_BUFFERHEADERTYPE *omx_buffer)
{
    switch (port->type)
    {
        case GOMX_PORT_INPUT:
            OMX_EmptyThisBuffer (port->core->omx_handle, omx_buffer);
            break;
        case GOMX_PORT_OUTPUT:
            OMX_FillThisBuffer (port->core->omx_handle, omx_buffer);
            break;
        default:
            break;
    }
}
Example #27
0
static void* captureVideo (void* threadArg){
  //The return value is not needed

  OMXCAM_THREAD_ARG* arg = (OMXCAM_THREAD_ARG*)threadArg;
  int stop = 0;
  OMX_ERRORTYPE error;
  
  safeRunning = 1;
  
  while (safeRunning){
    if (pthread_mutex_lock (&mutex)){
      OMXCAM_error ("pthread_mutex_lock");
      handleError ();
      return (void*)0;
    }
    
    stop = !running;
    
    if (pthread_mutex_unlock (&mutex)){
      OMXCAM_error ("pthread_mutex_unlock");
      handleError ();
      return (void*)0;
    }
    
    if (stop) break;
    
    if ((error = OMX_FillThisBuffer (arg->fillComponent->handle,
        OMXCAM_ctx.outputBuffer))){
      OMXCAM_error ("OMX_FillThisBuffer: %s",
          OMXCAM_dump_OMX_ERRORTYPE (error));
      handleError ();
      return (void*)0;
    }
    
    //Wait until it's filled
    if (OMXCAM_wait (arg->fillComponent, OMXCAM_EventFillBufferDone, 0)){
      handleError ();
      return (void*)0;
    }
    
    //Emit the buffer
    arg->bufferCallback (OMXCAM_ctx.outputBuffer->pBuffer,
        OMXCAM_ctx.outputBuffer->nFilledLen);
  }
  
  return (void*)0;
}
void BaseEngine::threadedFunction()
{
	while (isThreadRunning()) 
	{
		if(bufferAvailable) 
		{
			// The user wants to quit, but don't exit
			// the loop until we are certain that we have processed
			// a full frame till end of the frame, i.e. we're at the end
			// of the current key frame if processing one or until
			// the next key frame is detected. This way we should always
			// avoid corruption of the last encoded at the expense of
			// small delay in exiting.
			if(stopRequested && !isStopping) 
			{
				ofLogVerbose(__func__) << "Exit signal detected, waiting for next key frame boundry before exiting...";
				isStopping = true;
				isKeyframeValid = encoderOutputBuffer->nFlags & OMX_BUFFERFLAG_SYNCFRAME;
			}
			if(isStopping && (isKeyframeValid ^ (encoderOutputBuffer->nFlags & OMX_BUFFERFLAG_SYNCFRAME))) 
			{
				ofLogVerbose(__func__) << "Key frame boundry reached, exiting loop...";
				writeFile();
				
				doFillBuffer = false;
			}else 
			{
				recordingFileBuffer.append((const char*) encoderOutputBuffer->pBuffer + encoderOutputBuffer->nOffset, encoderOutputBuffer->nFilledLen);
				//ofLogVerbose(__func__) << "encoderOutputBuffer->nFilledLen: " << encoderOutputBuffer->nFilledLen;
				doFillBuffer = true;
			}
		}
		// Buffer flushed, request a new buffer to be filled by the encoder component
		if(doFillBuffer) 
		{
			doFillBuffer	= false;
			bufferAvailable = false;
			OMX_ERRORTYPE error = OMX_FillThisBuffer(encoder, encoderOutputBuffer);
			if(error != OMX_ErrorNone) 
			{
				ofLog(OF_LOG_ERROR, "encoder OMX_FillThisBuffer FAIL error: 0x%08x", error);
				close();
				
			}
		}
	}
}
void * process_thread(void *ptr)
{
	HTEST *hTest = (HTEST*)ptr;
	OMX_BUFFERHEADERTYPE *pBufferHdr = NULL;
	MSG sMsg;

	while(1)
	{
		hTest->pMsgQ->Get(&sMsg);
		if(sMsg.type == EVENT)
		{
			process_event(hTest, &sMsg);
		}
		else if(sMsg.type == EMPTY_DONE)
		{
			pBufferHdr = sMsg.data.buffer.pBuffer;
			if(hTest->bHoldBuffers != OMX_TRUE)
			{
				OMX_EmptyThisBuffer(sMsg.hComponent, pBufferHdr);
			}
		}
		else if(sMsg.type == FILL_DONE)
		{
			pBufferHdr = sMsg.data.buffer.pBuffer;
			if (hTest->bAudioTrackStopped && hTest->bVideoTrackStopped)
				break;

			if (pBufferHdr->nOutputPortIndex == hTest->nAudioTrackNum)
			{
				if (hTest->bAudioTrackStopped)
					continue;
			}
			else if (pBufferHdr->nOutputPortIndex == hTest->nVideoTrackNum)
			{
				if (hTest->bVideoTrackStopped)
					continue;
			}

			if(hTest->bHoldBuffers != OMX_TRUE)
				OMX_FillThisBuffer(sMsg.hComponent, pBufferHdr);
		}

	}

	return NULL;
}
static void
release_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer)
{
    switch (port->type)
    {
        case GOMX_PORT_INPUT:
            /* do nothing */
            break;
        case GOMX_PORT_OUTPUT:
            GST_LOG ("FTB: omx_buffer=%p, pAppPrivate=%p, pBuffer=%p",
                    omx_buffer, omx_buffer ? omx_buffer->pAppPrivate : 0, omx_buffer ? omx_buffer->pBuffer : 0);
            OMX_FillThisBuffer (port->core->omx_handle, omx_buffer);
            break;
        default:
            break;
    }
}