1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef OMX_UTILS_H_
18#define OMX_UTILS_H_
19
20#include <media/IOMX.h>
21
22/***** DO NOT USE THIS INCLUDE!!! INTERAL ONLY!!! UNLESS YOU RESIDE IN media/libstagefright *****/
23
24// OMXUtils contains omx-specific utility functions for stagefright/omx library
25// TODO: move ACodec and OMXClient into this library
26
27namespace android {
28
29template<class T>
30static void InitOMXParams(T *params) {
31    memset(params, 0, sizeof(T));
32    params->nSize = sizeof(T);
33    params->nVersion.s.nVersionMajor = 1;
34    params->nVersion.s.nVersionMinor = 0;
35    params->nVersion.s.nRevision = 0;
36    params->nVersion.s.nStep = 0;
37}
38
39status_t StatusFromOMXError(OMX_ERRORTYPE err);
40
41const char *GetComponentRole(bool isEncoder, const char *mime);
42status_t SetComponentRole(const sp<IOMXNode> &omxNode, const char *role);
43
44struct DescribeColorFormat2Params;
45
46bool IsFlexibleColorFormat(
47        const sp<IOMXNode> &omxNode, uint32_t colorFormat,
48        bool usingNativeBuffers, OMX_U32 *flexibleEquivalent);
49bool DescribeDefaultColorFormat(DescribeColorFormat2Params &describeParams);
50bool DescribeColorFormat(
51        const sp<IOMXNode> &omxNode,
52        DescribeColorFormat2Params &describeParams);
53
54inline static const char *asString(MetadataBufferType i, const char *def = "??") {
55    using namespace android;
56    switch (i) {
57        case kMetadataBufferTypeCameraSource:   return "CameraSource";
58        case kMetadataBufferTypeGrallocSource:  return "GrallocSource";
59        case kMetadataBufferTypeANWBuffer:      return "ANWBuffer";
60        case kMetadataBufferTypeNativeHandleSource: return "NativeHandleSource";
61        case kMetadataBufferTypeInvalid:        return "Invalid";
62        default:                                return def;
63    }
64}
65
66inline static const char *asString(IOMX::PortMode mode, const char *def = "??") {
67    using namespace android;
68    switch (mode) {
69        case IOMX::kPortModePresetByteBuffer:   return "PresetByteBuffer";
70        case IOMX::kPortModePresetANWBuffer:    return "PresetANWBuffer";
71        case IOMX::kPortModePresetSecureBuffer: return "PresetSecureBuffer";
72        case IOMX::kPortModeDynamicANWBuffer:   return "DynamicANWBuffer";
73        case IOMX::kPortModeDynamicNativeHandle:return "DynamicNativeHandle";
74        default:                                return def;
75    }
76}
77
78}  // namespace android
79
80#endif
81