120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang/*
220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *
338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang * Copyright 2012 Samsung Electronics S.LSI Co. LTD
420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *
520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * Licensed under the Apache License, Version 2.0 (the "License");
620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * you may not use this file except in compliance with the License.
720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * You may obtain a copy of the License at
820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *
920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *      http://www.apache.org/licenses/LICENSE-2.0
1020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *
1120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * Unless required by applicable law or agreed to in writing, software
1220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * distributed under the License is distributed on an "AS IS" BASIS,
1320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * See the License for the specific language governing permissions and
1520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * limitations under the License.
1620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang */
1720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
1820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang/*
1920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @file       Exynos_OMX_Basecomponent.h
2020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @brief
2120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @author     SeungBeom Kim (sbcrux.kim@samsung.com)
2220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang *             Yunji Kim (yunji.kim@samsung.com)
2338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang * @version    2.0.0
2420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @history
2538ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang *    2012.02.20 : Create
2620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang */
2720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
2820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifndef EXYNOS_OMX_BASECOMP
2920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define EXYNOS_OMX_BASECOMP
3020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
3120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OMX_Def.h"
3220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "OMX_Component.h"
3320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OSAL_Queue.h"
3420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OMX_Baseport.h"
3520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
3620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
3720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changtypedef struct _EXYNOS_OMX_MESSAGE
3820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{
3920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_U32 messageType;
4020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_U32 messageParam;
4120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_PTR pCmdData;
4220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang} EXYNOS_OMX_MESSAGE;
4320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
4420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang/* for Check TimeStamp after Seek */
4520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changtypedef struct _EXYNOS_OMX_TIMESTAMP
4620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{
4720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL  needSetStartTimeStamp;
4820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL  needCheckStartTimeStamp;
4920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_TICKS startTimeStamp;
5020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_U32   nStartFlags;
5120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang} EXYNOS_OMX_TIMESTAMP;
5220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
5320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changtypedef struct _EXYNOS_OMX_BASECOMPONENT
5420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{
5520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_STRING                  componentName;
5620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_VERSIONTYPE             componentVersion;
5720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_VERSIONTYPE             specVersion;
5820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
5920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_STATETYPE               currentState;
6020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_OMX_TRANS_STATETYPE  transientState;
61d9966f64b1a4f195c099ccff95672d8fc7b8fed6SeungBeom Kim    OMX_BOOL                    abendState;
62d9966f64b1a4f195c099ccff95672d8fc7b8fed6SeungBeom Kim    OMX_HANDLETYPE              abendStateEvent;
6320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
6420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_CODEC_TYPE           codecType;
6520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_OMX_PRIORITYMGMTTYPE compPriority;
6620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_MARKTYPE                propagateMarkType;
6720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_HANDLETYPE              compMutex;
6820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
6920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_HANDLETYPE              hComponentHandle;
7020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
7120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    /* Message Handler */
7220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL                    bExitMessageHandlerThread;
7320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_HANDLETYPE              hMessageHandler;
7420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_HANDLETYPE              msgSemaphoreHandle;
7520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_QUEUE                messageQ;
7620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
7720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    /* Port */
7820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_PORT_PARAM_TYPE         portParam;
7920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_OMX_BASEPORT        *pExynosPort;
8020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
8120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_HANDLETYPE              pauseEvent;
8220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
8320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    /* Callback function */
8420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_CALLBACKTYPE           *pCallbacks;
8520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_PTR                     callbackData;
8620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
8720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    /* Save Timestamp */
8820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_TICKS                   timeStamp[MAX_TIMESTAMP];
8920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    EXYNOS_OMX_TIMESTAMP        checkTimeStamp;
9020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
9120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    /* Save Flags */
9220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_U32                     nFlags[MAX_FLAGS];
9320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
9420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL                    getAllDelayBuffer;
9520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL                    reInputData;
9620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
9720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL bUseFlagEOF;
9820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_BOOL bSaveFlagEOS;
9920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
10038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    /* Check for Old & New OMX Process type switch */
10138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_BOOL bMultiThreadProcess;
10238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang
10338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_ERRORTYPE (*exynos_codec_componentInit)(OMX_COMPONENTTYPE *pOMXComponent);
10438ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_ERRORTYPE (*exynos_codec_componentTerminate)(OMX_COMPONENTTYPE *pOMXComponent);
10520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
10620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_ERRORTYPE (*exynos_AllocateTunnelBuffer)(EXYNOS_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex);
10720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_ERRORTYPE (*exynos_FreeTunnelBuffer)(EXYNOS_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex);
10838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_ERRORTYPE (*exynos_BufferProcessCreate)(OMX_COMPONENTTYPE *pOMXComponent);
10938ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_ERRORTYPE (*exynos_BufferProcessTerminate)(OMX_COMPONENTTYPE *pOMXComponent);
11038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang    OMX_ERRORTYPE (*exynos_BufferFlush)(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex, OMX_BOOL bEvent);
11120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang} EXYNOS_OMX_BASECOMPONENT;
11220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
11320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_GetParameter(
11420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_HANDLETYPE hComponent,
11520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_INDEXTYPE  nParamIndex,
11620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_INOUT OMX_PTR     ComponentParameterStructure);
11720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
11820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_SetParameter(
11920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_HANDLETYPE hComponent,
12020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_INDEXTYPE  nIndex,
12120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_PTR        ComponentParameterStructure);
12220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
12320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_GetConfig(
12420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_HANDLETYPE hComponent,
12520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_INDEXTYPE  nIndex,
12620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_INOUT OMX_PTR     pComponentConfigStructure);
12720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
12820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_SetConfig(
12920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_HANDLETYPE hComponent,
13020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_INDEXTYPE  nIndex,
13120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_PTR        pComponentConfigStructure);
13220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
13320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_GetExtensionIndex(
13420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_HANDLETYPE  hComponent,
13520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_IN OMX_STRING      cParameterName,
13620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_OUT OMX_INDEXTYPE *pIndexType);
13720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
13820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_BaseComponent_Constructor(OMX_IN OMX_HANDLETYPE hComponent);
13920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_BaseComponent_Destructor(OMX_IN OMX_HANDLETYPE hComponent);
14020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
14120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifdef __cplusplus
14220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changextern "C" {
14320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif
14420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
14520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang    OMX_ERRORTYPE Exynos_OMX_Check_SizeVersion(OMX_PTR header, OMX_U32 size);
14620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
14720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
14820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifdef __cplusplus
14920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang};
15020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif
15120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang
15220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif
153