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