1/*
2 *
3 * Copyright 2012 Samsung Electronics S.LSI Co. LTD
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * @file       Exynos_OMX_Basecomponent.h
20 * @brief
21 * @author     SeungBeom Kim (sbcrux.kim@samsung.com)
22 *             Yunji Kim (yunji.kim@samsung.com)
23 * @version    2.0.0
24 * @history
25 *    2012.02.20 : Create
26 */
27
28#ifndef EXYNOS_OMX_BASECOMP
29#define EXYNOS_OMX_BASECOMP
30
31#include "Exynos_OMX_Def.h"
32#include "OMX_Component.h"
33#include "Exynos_OSAL_Queue.h"
34#include "Exynos_OMX_Baseport.h"
35
36
37typedef struct _EXYNOS_OMX_MESSAGE
38{
39    OMX_U32 messageType;
40    OMX_U32 messageParam;
41    OMX_PTR pCmdData;
42} EXYNOS_OMX_MESSAGE;
43
44/* for Check TimeStamp after Seek */
45typedef struct _EXYNOS_OMX_TIMESTAMP
46{
47    OMX_BOOL  needSetStartTimeStamp;
48    OMX_BOOL  needCheckStartTimeStamp;
49    OMX_TICKS startTimeStamp;
50    OMX_U32   nStartFlags;
51} EXYNOS_OMX_TIMESTAMP;
52
53typedef struct _EXYNOS_OMX_BASECOMPONENT
54{
55    OMX_STRING                  componentName;
56    OMX_VERSIONTYPE             componentVersion;
57    OMX_VERSIONTYPE             specVersion;
58
59    OMX_STATETYPE               currentState;
60    EXYNOS_OMX_TRANS_STATETYPE  transientState;
61    OMX_BOOL                    abendState;
62    OMX_HANDLETYPE              abendStateEvent;
63
64    EXYNOS_CODEC_TYPE           codecType;
65    EXYNOS_OMX_PRIORITYMGMTTYPE compPriority;
66    OMX_MARKTYPE                propagateMarkType;
67    OMX_HANDLETYPE              compMutex;
68
69    OMX_HANDLETYPE              hComponentHandle;
70
71    /* Message Handler */
72    OMX_BOOL                    bExitMessageHandlerThread;
73    OMX_HANDLETYPE              hMessageHandler;
74    OMX_HANDLETYPE              msgSemaphoreHandle;
75    EXYNOS_QUEUE                messageQ;
76
77    /* Port */
78    OMX_PORT_PARAM_TYPE         portParam;
79    EXYNOS_OMX_BASEPORT        *pExynosPort;
80
81    OMX_HANDLETYPE              pauseEvent;
82
83    /* Callback function */
84    OMX_CALLBACKTYPE           *pCallbacks;
85    OMX_PTR                     callbackData;
86
87    /* Save Timestamp */
88    OMX_TICKS                   timeStamp[MAX_TIMESTAMP];
89    EXYNOS_OMX_TIMESTAMP        checkTimeStamp;
90
91    /* Save Flags */
92    OMX_U32                     nFlags[MAX_FLAGS];
93
94    OMX_BOOL                    getAllDelayBuffer;
95    OMX_BOOL                    reInputData;
96
97    OMX_BOOL bUseFlagEOF;
98    OMX_BOOL bSaveFlagEOS;
99
100    /* Check for Old & New OMX Process type switch */
101    OMX_BOOL bMultiThreadProcess;
102
103    OMX_ERRORTYPE (*exynos_codec_componentInit)(OMX_COMPONENTTYPE *pOMXComponent);
104    OMX_ERRORTYPE (*exynos_codec_componentTerminate)(OMX_COMPONENTTYPE *pOMXComponent);
105
106    OMX_ERRORTYPE (*exynos_AllocateTunnelBuffer)(EXYNOS_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex);
107    OMX_ERRORTYPE (*exynos_FreeTunnelBuffer)(EXYNOS_OMX_BASEPORT *pOMXBasePort, OMX_U32 nPortIndex);
108    OMX_ERRORTYPE (*exynos_BufferProcessCreate)(OMX_COMPONENTTYPE *pOMXComponent);
109    OMX_ERRORTYPE (*exynos_BufferProcessTerminate)(OMX_COMPONENTTYPE *pOMXComponent);
110    OMX_ERRORTYPE (*exynos_BufferFlush)(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex, OMX_BOOL bEvent);
111} EXYNOS_OMX_BASECOMPONENT;
112
113OMX_ERRORTYPE Exynos_OMX_GetParameter(
114    OMX_IN OMX_HANDLETYPE hComponent,
115    OMX_IN OMX_INDEXTYPE  nParamIndex,
116    OMX_INOUT OMX_PTR     ComponentParameterStructure);
117
118OMX_ERRORTYPE Exynos_OMX_SetParameter(
119    OMX_IN OMX_HANDLETYPE hComponent,
120    OMX_IN OMX_INDEXTYPE  nIndex,
121    OMX_IN OMX_PTR        ComponentParameterStructure);
122
123OMX_ERRORTYPE Exynos_OMX_GetConfig(
124    OMX_IN OMX_HANDLETYPE hComponent,
125    OMX_IN OMX_INDEXTYPE  nIndex,
126    OMX_INOUT OMX_PTR     pComponentConfigStructure);
127
128OMX_ERRORTYPE Exynos_OMX_SetConfig(
129    OMX_IN OMX_HANDLETYPE hComponent,
130    OMX_IN OMX_INDEXTYPE  nIndex,
131    OMX_IN OMX_PTR        pComponentConfigStructure);
132
133OMX_ERRORTYPE Exynos_OMX_GetExtensionIndex(
134    OMX_IN OMX_HANDLETYPE  hComponent,
135    OMX_IN OMX_STRING      cParameterName,
136    OMX_OUT OMX_INDEXTYPE *pIndexType);
137
138OMX_ERRORTYPE Exynos_OMX_BaseComponent_Constructor(OMX_IN OMX_HANDLETYPE hComponent);
139OMX_ERRORTYPE Exynos_OMX_BaseComponent_Destructor(OMX_IN OMX_HANDLETYPE hComponent);
140
141#ifdef __cplusplus
142extern "C" {
143#endif
144
145    OMX_ERRORTYPE Exynos_OMX_Check_SizeVersion(OMX_PTR header, OMX_U32 size);
146
147
148#ifdef __cplusplus
149};
150#endif
151
152#endif
153