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