| 1 | /* | 
|---|
| 2 | Copyright (c) 2012, Broadcom Europe Ltd | 
|---|
| 3 | All rights reserved. | 
|---|
| 4 |  | 
|---|
| 5 | Redistribution and use in source and binary forms, with or without | 
|---|
| 6 | modification, are permitted provided that the following conditions are met: | 
|---|
| 7 | * Redistributions of source code must retain the above copyright | 
|---|
| 8 | notice, this list of conditions and the following disclaimer. | 
|---|
| 9 | * Redistributions in binary form must reproduce the above copyright | 
|---|
| 10 | notice, this list of conditions and the following disclaimer in the | 
|---|
| 11 | documentation and/or other materials provided with the distribution. | 
|---|
| 12 | * Neither the name of the copyright holder nor the | 
|---|
| 13 | names of its contributors may be used to endorse or promote products | 
|---|
| 14 | derived from this software without specific prior written permission. | 
|---|
| 15 |  | 
|---|
| 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | 
|---|
| 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 
|---|
| 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 
|---|
| 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY | 
|---|
| 20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 
|---|
| 21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
|---|
| 22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 
|---|
| 23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|---|
| 24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
|---|
| 25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|---|
| 26 | */ | 
|---|
| 27 |  | 
|---|
| 28 | #include "interface/vmcs_host/khronos/IL/OMX_Core.h" | 
|---|
| 29 | #include "interface/vmcs_host/khronos/IL/OMX_Component.h" | 
|---|
| 30 | #include "interface/vmcs_host/khronos/IL/OMX_Video.h" | 
|---|
| 31 | #include "interface/vmcs_host/khronos/IL/OMX_Audio.h" | 
|---|
| 32 | #include "interface/vmcs_host/khronos/IL/OMX_Broadcom.h" | 
|---|
| 33 | #include "mmalomx_logging.h" | 
|---|
| 34 | #include "mmalomx.h" | 
|---|
| 35 | #include "mmalomx_util_params.h" | 
|---|
| 36 | #include "interface/vcos/vcos_types.h" | 
|---|
| 37 |  | 
|---|
| 38 | VCOS_LOG_CAT_T mmalomx_log_category; | 
|---|
| 39 | static VCOS_LOG_LEVEL_T mmalomx_log_level = VCOS_LOG_ERROR; | 
|---|
| 40 |  | 
|---|
| 41 | #define MMALOMX_SAT(a,b,c) ((a)<(b)?(a):(a)>(c)?(c):(a)) | 
|---|
| 42 |  | 
|---|
| 43 | void mmalomx_logging_init(void) | 
|---|
| 44 | { | 
|---|
| 45 | vcos_log_set_level(VCOS_LOG_CATEGORY, mmalomx_log_level); | 
|---|
| 46 | vcos_log_register( "mmalomx", VCOS_LOG_CATEGORY); | 
|---|
| 47 | } | 
|---|
| 48 |  | 
|---|
| 49 | void mmalomx_logging_deinit(void) | 
|---|
| 50 | { | 
|---|
| 51 | mmalomx_log_level = mmalomx_log_category.level; | 
|---|
| 52 | vcos_log_unregister(VCOS_LOG_CATEGORY); | 
|---|
| 53 | } | 
|---|
| 54 |  | 
|---|
| 55 | const char *mmalomx_param_to_string(OMX_INDEXTYPE param) | 
|---|
| 56 | { | 
|---|
| 57 | static const struct { | 
|---|
| 58 | const char *string; | 
|---|
| 59 | const OMX_INDEXTYPE param; | 
|---|
| 60 | } param_to_names[] = | 
|---|
| 61 | { | 
|---|
| 62 | { "OMX_IndexParamPriorityMgmt", OMX_IndexParamPriorityMgmt}, | 
|---|
| 63 | { "OMX_IndexParamAudioInit", OMX_IndexParamAudioInit}, | 
|---|
| 64 | { "OMX_IndexParamImageInit", OMX_IndexParamImageInit}, | 
|---|
| 65 | { "OMX_IndexParamVideoInit", OMX_IndexParamVideoInit}, | 
|---|
| 66 | { "OMX_IndexParamOtherInit", OMX_IndexParamOtherInit}, | 
|---|
| 67 | { "OMX_IndexParamPortDefinition", OMX_IndexParamPortDefinition}, | 
|---|
| 68 | { "OMX_IndexParamCompBufferSupplier", OMX_IndexParamCompBufferSupplier}, | 
|---|
| 69 | { "OMX_IndexParamAudioPortFormat", OMX_IndexParamAudioPortFormat}, | 
|---|
| 70 | { "OMX_IndexParamVideoPortFormat", OMX_IndexParamVideoPortFormat}, | 
|---|
| 71 | { "OMX_IndexParamImagePortFormat", OMX_IndexParamImagePortFormat}, | 
|---|
| 72 | { "OMX_IndexParamOtherPortFormat", OMX_IndexParamOtherPortFormat}, | 
|---|
| 73 | { "OMX_IndexParamAudioPcm", OMX_IndexParamAudioPcm}, | 
|---|
| 74 | { "OMX_IndexParamAudioAac", OMX_IndexParamAudioAac}, | 
|---|
| 75 | { "OMX_IndexParamAudioMp3", OMX_IndexParamAudioMp3}, | 
|---|
| 76 | { "OMX_IndexParamVideoMpeg2", OMX_IndexParamVideoMpeg2}, | 
|---|
| 77 | { "OMX_IndexParamVideoMpeg4", OMX_IndexParamVideoMpeg4}, | 
|---|
| 78 | { "OMX_IndexParamVideoWmv", OMX_IndexParamVideoWmv}, | 
|---|
| 79 | { "OMX_IndexParamVideoRv", OMX_IndexParamVideoRv}, | 
|---|
| 80 | { "OMX_IndexParamVideoAvc", OMX_IndexParamVideoAvc}, | 
|---|
| 81 | { "OMX_IndexParamVideoH263", OMX_IndexParamVideoH263}, | 
|---|
| 82 | { "OMX_IndexParamStandardComponentRole", OMX_IndexParamStandardComponentRole}, | 
|---|
| 83 | { "OMX_IndexParamContentURI", OMX_IndexParamContentURI}, | 
|---|
| 84 | { "OMX_IndexParamCommonSensorMode", OMX_IndexParamCommonSensorMode}, | 
|---|
| 85 | { "OMX_IndexConfigCommonWhiteBalance", OMX_IndexConfigCommonWhiteBalance}, | 
|---|
| 86 | { "OMX_IndexConfigCommonDigitalZoom", OMX_IndexConfigCommonDigitalZoom}, | 
|---|
| 87 | { "OMX_IndexConfigCommonExposureValue", OMX_IndexConfigCommonExposureValue}, | 
|---|
| 88 | { "OMX_IndexConfigCapturing", OMX_IndexConfigCapturing}, | 
|---|
| 89 | { "OMX_IndexAutoPauseAfterCapture", OMX_IndexAutoPauseAfterCapture}, | 
|---|
| 90 | { "OMX_IndexConfigCommonRotate", OMX_IndexConfigCommonRotate}, | 
|---|
| 91 | { "OMX_IndexConfigCommonMirror", OMX_IndexConfigCommonMirror}, | 
|---|
| 92 | { "OMX_IndexConfigCommonScale", OMX_IndexConfigCommonScale}, | 
|---|
| 93 | { "OMX_IndexConfigCommonInputCrop", OMX_IndexConfigCommonInputCrop}, | 
|---|
| 94 | { "OMX_IndexConfigCommonOutputCrop", OMX_IndexConfigCommonOutputCrop}, | 
|---|
| 95 | { "OMX_IndexParamNumAvailableStreams", OMX_IndexParamNumAvailableStreams}, | 
|---|
| 96 | { "OMX_IndexParamActiveStream", OMX_IndexParamActiveStream}, | 
|---|
| 97 | { "OMX_IndexParamVideoBitrate", OMX_IndexParamVideoBitrate}, | 
|---|
| 98 | { "OMX_IndexParamVideoProfileLevelQuerySupported", OMX_IndexParamVideoProfileLevelQuerySupported}, | 
|---|
| 99 |  | 
|---|
| 100 | { "OMX_IndexParam unknown", (OMX_INDEXTYPE)0} | 
|---|
| 101 | }; | 
|---|
| 102 | const char *name = mmalomx_parameter_name_omx((uint32_t)param); | 
|---|
| 103 | int i; | 
|---|
| 104 |  | 
|---|
| 105 | if (name) | 
|---|
| 106 | return name; | 
|---|
| 107 |  | 
|---|
| 108 | for(i = 0; param_to_names[i].param && | 
|---|
| 109 | param_to_names[i].param != param; i++); | 
|---|
| 110 |  | 
|---|
| 111 | return param_to_names[i].string; | 
|---|
| 112 | } | 
|---|
| 113 |  | 
|---|
| 114 | const char *mmalomx_cmd_to_string(OMX_COMMANDTYPE cmd) | 
|---|
| 115 | { | 
|---|
| 116 | static const char *names[] = { | 
|---|
| 117 | "OMX_CommandStateSet", "OMX_CommandFlush", "OMX_CommandPortDisable", | 
|---|
| 118 | "OMX_CommandPortEnable", "OMX_CommandMarkBuffer", "OMX_Command unknown" | 
|---|
| 119 | }; | 
|---|
| 120 |  | 
|---|
| 121 | return names[MMALOMX_SAT((int)cmd, 0, (int)vcos_countof(names)-1)]; | 
|---|
| 122 | } | 
|---|
| 123 |  | 
|---|
| 124 | const char *mmalomx_state_to_string(OMX_STATETYPE state) | 
|---|
| 125 | { | 
|---|
| 126 | static const char *names[] = { | 
|---|
| 127 | "OMX_StateInvalid", "OMX_StateLoaded", "OMX_StateIdle", | 
|---|
| 128 | "OMX_StateExecuting", "OMX_StatePause", "OMX_StateWaitForResources", | 
|---|
| 129 | "OMX_State unknown" | 
|---|
| 130 | }; | 
|---|
| 131 |  | 
|---|
| 132 | return names[MMALOMX_SAT((int)state, 0, (int)vcos_countof(names)-1)]; | 
|---|
| 133 | } | 
|---|
| 134 |  | 
|---|
| 135 | const char *mmalomx_event_to_string(OMX_EVENTTYPE event) | 
|---|
| 136 | { | 
|---|
| 137 | static const char *names[] = { | 
|---|
| 138 | "OMX_EventCmdComplete", "OMX_EventError", "OMX_EventMark", | 
|---|
| 139 | "OMX_EventPortSettingsChanged", "OMX_EventBufferFlag", | 
|---|
| 140 | "OMX_EventResourcesAcquired", "OMX_EventComponentResumed", | 
|---|
| 141 | "OMX_EventDynamicResourcesAvailable", "OMX_EventPortFormatDetected", | 
|---|
| 142 | "OMX_Event unknown" | 
|---|
| 143 | }; | 
|---|
| 144 |  | 
|---|
| 145 | return names[MMALOMX_SAT((int)event, 0, (int)vcos_countof(names)-1)]; | 
|---|
| 146 | } | 
|---|
| 147 |  | 
|---|
| 148 | const char *mmalomx_error_to_string(OMX_ERRORTYPE error) | 
|---|
| 149 | { | 
|---|
| 150 | static const char *names[] = { | 
|---|
| 151 | "OMX_ErrorInsufficientResources", "OMX_ErrorUndefined", | 
|---|
| 152 | "OMX_ErrorInvalidComponentName", "OMX_ErrorComponentNotFound", | 
|---|
| 153 | "OMX_ErrorInvalidComponent", "OMX_ErrorBadParameter", | 
|---|
| 154 | "OMX_ErrorNotImplemented", "OMX_ErrorUnderflow", | 
|---|
| 155 | "OMX_ErrorOverflow", "OMX_ErrorHardware", "OMX_ErrorInvalidState", | 
|---|
| 156 | "OMX_ErrorStreamCorrupt", "OMX_ErrorPortsNotCompatible", | 
|---|
| 157 | "OMX_ErrorResourcesLost", "OMX_ErrorNoMore", "OMX_ErrorVersionMismatch", | 
|---|
| 158 | "OMX_ErrorNotReady", "OMX_ErrorTimeout", "OMX_ErrorSameState", | 
|---|
| 159 | "OMX_ErrorResourcesPreempted", "OMX_ErrorPortUnresponsiveDuringAllocation", | 
|---|
| 160 | "OMX_ErrorPortUnresponsiveDuringDeallocation", | 
|---|
| 161 | "OMX_ErrorPortUnresponsiveDuringStop", "OMX_ErrorIncorrectStateTransition", | 
|---|
| 162 | "OMX_ErrorIncorrectStateOperation", "OMX_ErrorUnsupportedSetting", | 
|---|
| 163 | "OMX_ErrorUnsupportedIndex", "OMX_ErrorBadPortIndex", | 
|---|
| 164 | "OMX_ErrorPortUnpopulated", "OMX_ErrorComponentSuspended", | 
|---|
| 165 | "OMX_ErrorDynamicResourcesUnavailable", "OMX_ErrorMbErrorsInFrame", | 
|---|
| 166 | "OMX_ErrorFormatNotDetected", "OMX_ErrorContentPipeOpenFailed", | 
|---|
| 167 | "OMX_ErrorContentPipeCreationFailed", "OMX_ErrorSeperateTablesUsed", | 
|---|
| 168 | "OMX_ErrorTunnelingUnsupported", | 
|---|
| 169 | "OMX_Error unknown" | 
|---|
| 170 | }; | 
|---|
| 171 |  | 
|---|
| 172 | if(error == OMX_ErrorNone) return "OMX_ErrorNone"; | 
|---|
| 173 |  | 
|---|
| 174 | error -= OMX_ErrorInsufficientResources; | 
|---|
| 175 | return names[MMALOMX_SAT((int)error, 0, (int)vcos_countof(names)-1)]; | 
|---|
| 176 | } | 
|---|
| 177 |  | 
|---|