/** This function initializes and deinitializes the library related initialization
  * needed for file parsing
  */
OMX_ERRORTYPE omx_videosrc_component_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp,internalRequestMessageType *message) {
  omx_videosrc_component_PrivateType* omx_videosrc_component_Private = (omx_videosrc_component_PrivateType*)openmaxStandComp->pComponentPrivate;
  OMX_ERRORTYPE err = OMX_ErrorNone;
  OMX_STATETYPE oldState = omx_videosrc_component_Private->state;

  DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s\n", __func__);

  /* Execute the base message handling */
  err = omx_base_component_MessageHandler(openmaxStandComp,message);

  if (message->messageType == OMX_CommandStateSet && err == OMX_ErrorNone){ 
    if ((message->messageParam == OMX_StateExecuting) && (oldState == OMX_StateIdle)) {    
      err = omx_videosrc_component_Init(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Source Init Failed Error=%x\n",__func__,err); 
      }
    } else if ((message->messageParam == OMX_StateIdle) && (oldState == OMX_StateExecuting)) {
      err = omx_videosrc_component_Deinit(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Source Deinit Failed Error=%x\n",__func__,err); 
      }
    }
  }
  return err;
}
Beispiel #2
0
static OMX_ERRORTYPE vid_dec_MessageHandler(OMX_COMPONENTTYPE* comp, internalRequestMessageType *msg)
{
   vid_dec_PrivateType* priv = comp->pComponentPrivate;

   if (msg->messageType == OMX_CommandStateSet) {
      if ((msg->messageParam == OMX_StateIdle ) && (priv->state == OMX_StateLoaded)) {
         if (priv->profile == PIPE_VIDEO_PROFILE_MPEG2_MAIN)
            vid_dec_mpeg12_Init(priv);
         else if (priv->profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH)
            vid_dec_h264_Init(priv);
         else if (priv->profile == PIPE_VIDEO_PROFILE_HEVC_MAIN)
            vid_dec_h265_Init(priv);

      } else if ((msg->messageParam == OMX_StateLoaded) && (priv->state == OMX_StateIdle)) {
         if (priv->shadow) {
            priv->shadow->destroy(priv->shadow);
            priv->shadow = NULL;
         }
         if (priv->codec) {
            priv->codec->destroy(priv->codec);
            priv->codec = NULL;
         }
      }
   }

   return omx_base_component_MessageHandler(comp, msg);
}
OMX_ERRORTYPE omx_xvideo_sink_component_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp,internalRequestMessageType *message) {

  omx_xvideo_sink_component_PrivateType* omx_xvideo_sink_component_Private = (omx_xvideo_sink_component_PrivateType*)openmaxStandComp->pComponentPrivate;
  OMX_ERRORTYPE err;
  OMX_STATETYPE eState;

  DEBUG(DEB_LEV_FUNCTION_NAME, "In %s\n", __func__);
  eState = omx_xvideo_sink_component_Private->state; //storing current state

  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateExecuting ) && (omx_xvideo_sink_component_Private->state == OMX_StateIdle)) {
      DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s sink component from loaded to idle \n", __func__);
      err = omx_xvideo_sink_component_Init(openmaxStandComp);
      if(err!=OMX_ErrorNone) {
        DEBUG(DEB_LEV_ERR, "In %s Video Sink Init Failed Error=%x\n",__func__,err);
        return err;
      }
    }
  }
  // Execute the base message handling
  err = omx_base_component_MessageHandler(openmaxStandComp,message);

  if (message->messageType == OMX_CommandStateSet) {
    if ((message->messageParam == OMX_StateIdle ) && (omx_xvideo_sink_component_Private->state == OMX_StateIdle) && eState == OMX_StateExecuting) {
      err = omx_xvideo_sink_component_Deinit(openmaxStandComp);
      if(err!=OMX_ErrorNone) {
        DEBUG(DEB_LEV_ERR, "In %s Video Sink Deinit Failed Error=%x\n",__func__,err);
        return err;
      }
    }
  }
  return err;
}
OMX_ERRORTYPE omx_videoenc_component_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp,internalRequestMessageType *message) {

  omx_videoenc_component_PrivateType* omx_videoenc_component_Private = openmaxStandComp->pComponentPrivate;
  OMX_ERRORTYPE eError;

  DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s\n", __func__);

  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateIdle ) && (omx_videoenc_component_Private->state == OMX_StateLoaded)) {
      if (!omx_videoenc_component_Private->avcodecReady) {
        eError = omx_videoenc_component_ffmpegLibInit(omx_videoenc_component_Private);
        if (eError != OMX_ErrorNone) {
          return OMX_ErrorNotReady;
        }
        omx_videoenc_component_Private->avcodecReady = OMX_TRUE;
      }
      eError = omx_videoenc_component_Init(openmaxStandComp);
      if(eError!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Encoder Init Failed Error=%x\n",__func__,eError); 
        return eError;
      } 
    } else if ((message->messageParam == OMX_StateLoaded) && (omx_videoenc_component_Private->state == OMX_StateIdle)) {
      eError = omx_videoenc_component_Deinit(openmaxStandComp);
      if(eError!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Encoder Deinit Failed Error=%x\n",__func__,eError); 
        return eError;
      } 
    }
  }
  // Execute the base message handling
  return omx_base_component_MessageHandler(openmaxStandComp,message);
}
/*
 * Terminate source --- called by jpeg_finish_decompress
 * after all data has been read.  Often a no-op.
 *
 * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
 * application must deal with any cleanup that should happen even
 * for error exit.
 */
OMX_ERRORTYPE omx_jpegdec_decoder_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp, internalRequestMessageType *message)  {

  omx_jpegdec_component_PrivateType* omx_jpegdec_component_Private = (omx_jpegdec_component_PrivateType*)openmaxStandComp->pComponentPrivate;  
  OMX_ERRORTYPE err;
  OMX_STATETYPE eCurrentState = omx_jpegdec_component_Private->state;
  DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s\n", __func__);
//ACT_OMX_LOG("Entry:%s \n",__FUNCTION__);
  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateIdle) && (omx_jpegdec_component_Private->state == OMX_StateLoaded)) {
      err = omx_jpegdec_component_Init(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s MAD Decoder Init Failed Error=%x\n",__func__,err); 
        return err;
      }
    } 
  }
  /** Execute the base message handling */
  err = omx_base_component_MessageHandler(openmaxStandComp, message);

  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateLoaded) && (eCurrentState == OMX_StateIdle)) {
      err = omx_jpegdec_component_Deinit(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s MAD Decoder Deinit Failed Error=%x\n",__func__,err); 
        return err;
      }
    }
  }

  return err;  
}
OMX_ERRORTYPE omx_shvpudec_component_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp,internalRequestMessageType *message) {
  omx_shvpudec_component_PrivateType* omx_shvpudec_component_Private = (omx_shvpudec_component_PrivateType*)openmaxStandComp->pComponentPrivate;
  OMX_ERRORTYPE err;
  OMX_STATETYPE eCurrentState = omx_shvpudec_component_Private->state;

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

  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateExecuting ) && (omx_shvpudec_component_Private->state == OMX_StateIdle)) {
      if (!omx_shvpudec_component_Private->avcodecReady) {
        err = omx_shvpudec_component_ffmpegLibInit(omx_shvpudec_component_Private);
        if (err != OMX_ErrorNone) {
          return OMX_ErrorNotReady;
        }
        omx_shvpudec_component_Private->avcodecReady = OMX_TRUE;
      }
    } 
    else if ((message->messageParam == OMX_StateIdle ) && (omx_shvpudec_component_Private->state == OMX_StateLoaded)) {
      err = omx_shvpudec_component_Init(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Decoder Init Failed Error=%x\n",__func__,err); 
        return err;
      } 
    } else if ((message->messageParam == OMX_StateLoaded) && (omx_shvpudec_component_Private->state == OMX_StateIdle)) {
      err = omx_shvpudec_component_Deinit(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Video Decoder Deinit Failed Error=%x\n",__func__,err); 
        return err;
      } 
    }
  }
  // Execute the base message handling
  err =  omx_base_component_MessageHandler(openmaxStandComp,message);

  if (message->messageType == OMX_CommandStateSet){
   if ((message->messageParam == OMX_StateIdle  ) && (eCurrentState == OMX_StateExecuting)) {
      if (omx_shvpudec_component_Private->avcodecReady) {
        omx_shvpudec_component_ffmpegLibDeInit(omx_shvpudec_component_Private);
        omx_shvpudec_component_Private->avcodecReady = OMX_FALSE;
      }
    }
  }
  return err;
}
Beispiel #7
0
static OMX_ERRORTYPE vid_dec_MessageHandler(OMX_COMPONENTTYPE* comp, internalRequestMessageType *msg)
{
   vid_dec_PrivateType* priv = comp->pComponentPrivate;

   if (msg->messageType == OMX_CommandStateSet) {
      if ((msg->messageParam == OMX_StateIdle ) && (priv->state == OMX_StateLoaded)) {

         struct pipe_video_codec templat = {};
         omx_base_video_PortType *port;

         port = (omx_base_video_PortType *)priv->ports[OMX_BASE_FILTER_INPUTPORT_INDEX];

         templat.profile = priv->profile;
         templat.entrypoint = PIPE_VIDEO_ENTRYPOINT_BITSTREAM;
         templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
         templat.width = port->sPortParam.format.video.nFrameWidth;
         templat.height = port->sPortParam.format.video.nFrameHeight;
         templat.max_references = 2;
         templat.expect_chunked_decode = true;

         priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat);

         if (priv->profile == PIPE_VIDEO_PROFILE_MPEG2_MAIN)
            vid_dec_mpeg12_Init(priv);
         else if (priv->profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH)
            vid_dec_h264_Init(priv);

      } else if ((msg->messageParam == OMX_StateLoaded) && (priv->state == OMX_StateIdle)) {
         if (priv->shadow) {
            priv->shadow->destroy(priv->shadow);
            priv->shadow = NULL;
         }
         if (priv->codec) {
            priv->codec->destroy(priv->codec);
            priv->codec = NULL;
         }
      }
   }

   return omx_base_component_MessageHandler(comp, msg);
}
/** handles the message generated by the IL client 
  * @param openmaxStandComp the component handle
  * @param message is the message type
  */
OMX_ERRORTYPE omx_vorbis_decoder_MessageHandler(OMX_COMPONENTTYPE* openmaxStandComp,internalRequestMessageType *message)  {
  omx_vorbisdec_component_PrivateType* omx_vorbisdec_component_Private = (omx_vorbisdec_component_PrivateType*)openmaxStandComp->pComponentPrivate;
  OMX_ERRORTYPE err;

  DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s\n", __func__);

  if (message->messageType == OMX_CommandStateSet){
    if ((message->messageParam == OMX_StateIdle) && (omx_vorbisdec_component_Private->state == OMX_StateLoaded)) {
      err = omx_vorbisdec_component_Init(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Vorbis Decoder Init Failed=%x\n",__func__,err); 
        return err;
      }
    } else if ((message->messageParam == OMX_StateLoaded) && (omx_vorbisdec_component_Private->state == OMX_StateIdle)) {
      err = omx_vorbisdec_component_Deinit(openmaxStandComp);
      if(err!=OMX_ErrorNone) { 
        DEBUG(DEB_LEV_ERR, "In %s Vorbis Decoder Deinit Failed=%x\n",__func__,err); 
        return err;
      }
    }
  }
  // Execute the base message handling
  return omx_base_component_MessageHandler(openmaxStandComp, message);
}
/***************************************************************************
* Function : omx_ImageDecoderJpeg_MessageHandler	
*
* Description : message handling of Jpeg encoder.
*
* Params	:
*																			   
*	Name		             Type						In/Out		Description 						   
*  	openmaxStandComp    OMX_COMPONENTTYPE		In/Out	   	Openmax Standard Component structure
*	message	      		      internalRequestMessageType	In			internal Message Type	
*
* Return:
*	OMX_ErrorInsufficientResources if any ComponentPrivate structure alloc failed
*
* Note:
*	 
* Revision:
*
*     Author     		Date     		Version   	 Description
*     yuyiwei       	2008.10.9 	    1.0.0       
*									   
***************************************************************************/
OMX_ERRORTYPE omx_ImageDecoderJpeg_MessageHandler(OMX_COMPONENTTYPE *openmaxStandComp, internalRequestMessageType *message)
{

    omx_jpegdec_component_PrivateType *omx_jpegdec_component_Private = (omx_jpegdec_component_PrivateType*)openmaxStandComp->pComponentPrivate;
    OMX_ERRORTYPE err = OMX_ErrorNone;
    OMX_STATETYPE eCurrentState = omx_jpegdec_component_Private->state;
    DEBUG(DEB_LEV_SIMPLE_SEQ, "In %s\n", __func__);

    if (message->messageType == OMX_CommandStateSet)
    {
        if ((message->messageParam == OMX_StateIdle) && (omx_jpegdec_component_Private->state == OMX_StateLoaded))
        {
        	/** state loaded to state idle and initialise the compenent */
            err = omx_ImageDecoderJpeg_Init(openmaxStandComp);
            if (err != OMX_ErrorNone)
            {
                DEBUG(DEB_LEV_ERR, "In %s Jpeg Decoder Init Failed Error=%x\n", __func__, err);
                return err;
            }
        }
        else if ((message->messageParam == OMX_StateExecuting) && (omx_jpegdec_component_Private->state == OMX_StateIdle))
        {
        	/** state idle to state executing and up the synchronization semaphore*/
            DEBUG(DEB_LEV_FULL_SEQ, "State Changing from Idle to Exec\n");
			/** initialise the tempbuffer */
            omx_jpegdec_component_Private->temporary_buffer_in->nFilledLen = 0;
            omx_jpegdec_component_Private->temporary_buffer_in->nOffset = 0;            
			if (!omx_jpegdec_component_Private->JpegReady)
            {
                //omx_sem_up(omx_jpegdec_component_Private->JpegSyncSem);
                err = omx_ImageDecoderJpeg_LibInit(omx_jpegdec_component_Private);
                if (err != OMX_ErrorNone)
                {
                    return OMX_ErrorNotReady;
                }
                omx_jpegdec_component_Private->JpegReady = OMX_TRUE;
            }
        }
    }
    /** Execute the base message handling */
    err = omx_base_component_MessageHandler(openmaxStandComp, message);

    if (message->messageType == OMX_CommandStateSet)
    {
        if ((message->messageParam == OMX_StateLoaded) && (eCurrentState == OMX_StateIdle))
        {
        	/** state idle to state loaded and deinitialise the compenent */
            err = omx_ImageDecoderJpeg_Deinit(openmaxStandComp);
            if (err != OMX_ErrorNone)
            {
                DEBUG(DEB_LEV_ERR, "In %s Jpeg Decoder Deinit Failed Error=%x\n", __func__, err);
                return err;
            }
        }
        else if ((message->messageParam == OMX_StateIdle) && (eCurrentState == OMX_StateExecuting))
        {
        	/** state executing to state idle */
            omx_ImageDecoderJpeg_LibDeInit(omx_jpegdec_component_Private);
            omx_jpegdec_component_Private->JpegReady = OMX_FALSE;
        }
    }

    return err;
}