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); }
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); }