OMXComponentDefines.h revision e7ace334fb7c64f7b32aa3746e5a11bcefa60bfb
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) {\
41e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("Bad port index %lu, 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) {\
53e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        LOGE("Port out of range %lu", (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
79e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#define DECLARE_OMX_COMPONENT(NAME, ROLE, CLASS) \
80e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static const char *gName = (const char *)(NAME);\
81e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    static const char *gRole = (const char *)(ROLE);\
82e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    OMX_ERRORTYPE CreateInstance(OMX_PTR *instance) {\
83e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        *instance = NULL;\
84e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        ComponentBase *inst = new CLASS;\
85e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        if (!inst) {\
86e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu            return OMX_ErrorInsufficientResources;\
87e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        }\
88e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        *instance = inst;\
89e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu        return OMX_ErrorNone;\
90e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    }\
91e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    struct wrs_omxil_cmodule_ops_s gOps = {CreateInstance};\
92e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu    struct wrs_omxil_cmodule_s WRS_OMXIL_CMODULE_SYMBOL = {gName, &gRole, 1, &gOps};
93e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu
94e7ace334fb7c64f7b32aa3746e5a11bcefa60bfbAndy Qiu#endif /* OMX_COMPONENT_DEFINES_H_ */
95