1e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu/*
2e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* Copyright (c) 2009-2011 Intel Corporation.  All rights reserved.
3e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu*
4e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* Licensed under the Apache License, Version 2.0 (the "License");
5e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* you may not use this file except in compliance with the License.
6e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* You may obtain a copy of the License at
7e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu*
8e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* http://www.apache.org/licenses/LICENSE-2.0
9e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu*
10e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* Unless required by applicable law or agreed to in writing, software
11e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* distributed under the License is distributed on an "AS IS" BASIS,
12e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* See the License for the specific language governing permissions and
14e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu* limitations under the License.
15e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu*/
16e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
17e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#ifndef OMX_COMPONENT_DEFINES_H_
18e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define OMX_COMPONENT_DEFINES_H_
19e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
20e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
21e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
22e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define DECLARE_HANDLER(CLASS, FUNC)\
23e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static OMX_ERRORTYPE Get##FUNC(void *inst, OMX_PTR pStructure) {\
24e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return ((CLASS*)inst)->Get##FUNC(pStructure);\
25e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }\
26e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static OMX_ERRORTYPE Set##FUNC(void *inst, OMX_PTR pStructure) {\
27e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return ((CLASS*)inst)->Set##FUNC(pStructure);\
28e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }\
29e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_ERRORTYPE Get##FUNC(OMX_PTR pStructure);\
30e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_ERRORTYPE Set##FUNC(OMX_PTR pStructure);
31e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
32e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_TYPE_HEADER(P)\
33e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    ret = CheckTypeHeader((P), sizeof(*(P)));\
34e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if (ret != OMX_ErrorNone) {\
35e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("Invalid type header.");\
36e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return ret;\
37e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
38e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
39e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_PORT_INDEX(P, INDEX)\
40e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if ((P)->nPortIndex != INDEX) {\
410541f11be2f78b558476772f1f877e140f9d844bywan        LOGE("Bad port index %u, expected: %d", (P)->nPortIndex, INDEX);\
42e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorBadPortIndex;\
43e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
44e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
45e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_ENUMERATION_RANGE(INDEX, RANGE)\
46e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if (INDEX >= RANGE) {\
47e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("No more enumeration.");\
48e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorNoMore;\
49e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
50e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
51e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_PORT_INDEX_RANGE(P)\
52e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if ((P)->nPortIndex != 0 && (P)->nPortIndex != 1) {\
530541f11be2f78b558476772f1f877e140f9d844bywan        LOGE("Port out of range %u", (P)->nPortIndex);\
54e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorBadPortIndex;\
55e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
56e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
57e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_RETURN_VALUE(FUNC)\
58e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if (ret != OMX_ErrorNone) {\
59e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE(FUNC" failed: Error code = 0x%x", ret);\
60e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return ret;\
61e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
62e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
63e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_SET_PARAM_STATE()\
64e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_STATETYPE state;\
65e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    CBaseGetState((void *)GetComponentHandle(), &state);\
66e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if (state != OMX_StateLoaded && state != OMX_StateWaitForResources) {\
67e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("Invalid state to set param.");\
68e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorIncorrectStateOperation;\
69e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
70e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
71e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define CHECK_SET_CONFIG_STATE()\
72e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_STATETYPE state;\
73e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    CBaseGetState((void *)GetComponentHandle(), &state);\
74e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    if (state == OMX_StateLoaded || state == OMX_StateWaitForResources) {\
75e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("Invalid state to set config");\
76e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorNone;\
77e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }
78e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
7919b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang#define CHECK_BS_STATE() \
8019b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    if (mBsState == BS_STATE_EXECUTING) { \
8119b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        LOGE("Wrong state"); \
8219b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        return OMX_ErrorUndefined; \
8319b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    }
8419b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang
8519b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang#define CHECK_BS_STATUS(FUNC) \
8619b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    if (ret != BS_SUCCESS) { \
8719b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        LOGE(FUNC" Failed. ret = 0x%08x\n", ret); \
8819b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        return OMX_ErrorUndefined; \
8919b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    }
9019b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang
9119b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang#define CHECK_STATUS(FUNC) \
9219b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    if (ret != OMX_ErrorNone) { \
9319b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        LOGE(FUNC" Failed. ret = 0x%08x\n", ret); \
9419b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        return ret; \
9519b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    }
9619b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang
9719b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang#define CHECK_ENCODE_STATUS(FUNC)\
9819b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    if (ret < ENCODE_SUCCESS) { \
9919b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        LOGE(FUNC" Failed. ret = 0x%08x\n", ret); \
10019b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang        return OMX_ErrorUndefined; \
10119b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang    }
10219b2ab9f325bdbf3afe530e943fa5a0c0020b308Shuduo Sang
103e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define DECLARE_OMX_COMPONENT(NAME, ROLE, CLASS) \
104e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static const char *gName = (const char *)(NAME);\
105e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static const char *gRole = (const char *)(ROLE);\
106e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_ERRORTYPE CreateInstance(OMX_PTR *instance) {\
107e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        *instance = NULL;\
108e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        ComponentBase *inst = new CLASS;\
109e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        if (!inst) {\
110e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu            return OMX_ErrorInsufficientResources;\
111e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        }\
112e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        *instance = inst;\
113e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorNone;\
114e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }\
115e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    struct wrs_omxil_cmodule_ops_s gOps = {CreateInstance};\
116e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {gName, &gRole, 1, &gOps};
117e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
118e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#endif /* OMX_COMPONENT_DEFINES_H_ */
119