173dd808754c641fe798273d356ee38368715fa7bLajos Molnar/*
273dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Copyright (C) 2016 The Android Open Source Project
373dd808754c641fe798273d356ee38368715fa7bLajos Molnar *
473dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License");
573dd808754c641fe798273d356ee38368715fa7bLajos Molnar * you may not use this file except in compliance with the License.
673dd808754c641fe798273d356ee38368715fa7bLajos Molnar * You may obtain a copy of the License at
773dd808754c641fe798273d356ee38368715fa7bLajos Molnar *
873dd808754c641fe798273d356ee38368715fa7bLajos Molnar *      http://www.apache.org/licenses/LICENSE-2.0
973dd808754c641fe798273d356ee38368715fa7bLajos Molnar *
1073dd808754c641fe798273d356ee38368715fa7bLajos Molnar * Unless required by applicable law or agreed to in writing, software
1173dd808754c641fe798273d356ee38368715fa7bLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS,
1273dd808754c641fe798273d356ee38368715fa7bLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373dd808754c641fe798273d356ee38368715fa7bLajos Molnar * See the License for the specific language governing permissions and
1473dd808754c641fe798273d356ee38368715fa7bLajos Molnar * limitations under the License.
1573dd808754c641fe798273d356ee38368715fa7bLajos Molnar */
1673dd808754c641fe798273d356ee38368715fa7bLajos Molnar
1773dd808754c641fe798273d356ee38368715fa7bLajos Molnar#ifndef OMX_UTILS_H_
1873dd808754c641fe798273d356ee38368715fa7bLajos Molnar#define OMX_UTILS_H_
1973dd808754c641fe798273d356ee38368715fa7bLajos Molnar
201ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim#include <media/IOMX.h>
211ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim
2273dd808754c641fe798273d356ee38368715fa7bLajos Molnar/***** DO NOT USE THIS INCLUDE!!! INTERAL ONLY!!! UNLESS YOU RESIDE IN media/libstagefright *****/
2373dd808754c641fe798273d356ee38368715fa7bLajos Molnar
2473dd808754c641fe798273d356ee38368715fa7bLajos Molnar// OMXUtils contains omx-specific utility functions for stagefright/omx library
2573dd808754c641fe798273d356ee38368715fa7bLajos Molnar// TODO: move ACodec and OMXClient into this library
2673dd808754c641fe798273d356ee38368715fa7bLajos Molnar
2773dd808754c641fe798273d356ee38368715fa7bLajos Molnarnamespace android {
2873dd808754c641fe798273d356ee38368715fa7bLajos Molnar
2973dd808754c641fe798273d356ee38368715fa7bLajos Molnartemplate<class T>
3073dd808754c641fe798273d356ee38368715fa7bLajos Molnarstatic void InitOMXParams(T *params) {
3173dd808754c641fe798273d356ee38368715fa7bLajos Molnar    memset(params, 0, sizeof(T));
3273dd808754c641fe798273d356ee38368715fa7bLajos Molnar    params->nSize = sizeof(T);
3373dd808754c641fe798273d356ee38368715fa7bLajos Molnar    params->nVersion.s.nVersionMajor = 1;
3473dd808754c641fe798273d356ee38368715fa7bLajos Molnar    params->nVersion.s.nVersionMinor = 0;
3573dd808754c641fe798273d356ee38368715fa7bLajos Molnar    params->nVersion.s.nRevision = 0;
3673dd808754c641fe798273d356ee38368715fa7bLajos Molnar    params->nVersion.s.nStep = 0;
3773dd808754c641fe798273d356ee38368715fa7bLajos Molnar}
3873dd808754c641fe798273d356ee38368715fa7bLajos Molnar
3973dd808754c641fe798273d356ee38368715fa7bLajos Molnarstatus_t StatusFromOMXError(OMX_ERRORTYPE err);
4073dd808754c641fe798273d356ee38368715fa7bLajos Molnar
411ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kimconst char *GetComponentRole(bool isEncoder, const char *mime);
42d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhangstatus_t SetComponentRole(const sp<IOMXNode> &omxNode, const char *role);
431ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim
441ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kimstruct DescribeColorFormat2Params;
451ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim
461ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kimbool IsFlexibleColorFormat(
47d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang        const sp<IOMXNode> &omxNode, uint32_t colorFormat,
48d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang        bool usingNativeBuffers, OMX_U32 *flexibleEquivalent);
491ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kimbool DescribeDefaultColorFormat(DescribeColorFormat2Params &describeParams);
501ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kimbool DescribeColorFormat(
51d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang        const sp<IOMXNode> &omxNode,
521ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim        DescribeColorFormat2Params &describeParams);
531ad5b240bfd49aa918092dbdc18c1a24c5e6c3a4Wonsik Kim
54d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhanginline static const char *asString(MetadataBufferType i, const char *def = "??") {
55d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    using namespace android;
56d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    switch (i) {
57d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case kMetadataBufferTypeCameraSource:   return "CameraSource";
58d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case kMetadataBufferTypeGrallocSource:  return "GrallocSource";
59d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case kMetadataBufferTypeANWBuffer:      return "ANWBuffer";
60d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case kMetadataBufferTypeNativeHandleSource: return "NativeHandleSource";
61d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case kMetadataBufferTypeInvalid:        return "Invalid";
62d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        default:                                return def;
63d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    }
64d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang}
65d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang
66d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhanginline static const char *asString(IOMX::PortMode mode, const char *def = "??") {
67d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    using namespace android;
68d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    switch (mode) {
69d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case IOMX::kPortModePresetByteBuffer:   return "PresetByteBuffer";
70d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case IOMX::kPortModePresetANWBuffer:    return "PresetANWBuffer";
71d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case IOMX::kPortModePresetSecureBuffer: return "PresetSecureBuffer";
72d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case IOMX::kPortModeDynamicANWBuffer:   return "DynamicANWBuffer";
73d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        case IOMX::kPortModeDynamicNativeHandle:return "DynamicNativeHandle";
74d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang        default:                                return def;
75d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang    }
76d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang}
77d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang
7873dd808754c641fe798273d356ee38368715fa7bLajos Molnar}  // namespace android
7973dd808754c641fe798273d356ee38368715fa7bLajos Molnar
8073dd808754c641fe798273d356ee38368715fa7bLajos Molnar#endif
81