CodecBase.h revision 8338519ba2d8d731072c4edf7b9953787ce834cf
105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar/*
205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Copyright (C) 2014 The Android Open Source Project
305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License");
505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * you may not use this file except in compliance with the License.
605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * You may obtain a copy of the License at
705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *      http://www.apache.org/licenses/LICENSE-2.0
905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar *
1005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Unless required by applicable law or agreed to in writing, software
1105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS,
1205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * See the License for the specific language governing permissions and
1405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * limitations under the License.
1505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar */
1605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
1705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#ifndef CODEC_BASE_H_
1805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
1905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#define CODEC_BASE_H_
2005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
2105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <stdint.h>
2205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
238338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <media/IOMX.h>
245b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar#include <media/MediaCodecInfo.h>
2505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <media/stagefright/foundation/AHandler.h>
268338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <media/hardware/HardwareAPI.h>
278338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
28a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar#include <utils/NativeHandle.h>
2905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
308338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <system/graphics.h>
318338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
3205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarnamespace android {
3305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
3405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct ABuffer;
35d291c222357303b9611cab89d0c3b047584ef377Chong Zhangstruct PersistentSurface;
3605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
3705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct CodecBase : public AHandler {
3805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    enum {
3905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFillThisBuffer      = 'fill',
4005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatDrainThisBuffer     = 'drai',
4105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatEOS                 = 'eos ',
4205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatShutdownCompleted   = 'scom',
4305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatFlushCompleted      = 'fcom',
4405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatOutputFormatChanged = 'outC',
4505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatError               = 'erro',
4605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentAllocated  = 'cAll',
4705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatComponentConfigured = 'cCon',
4805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatInputSurfaceCreated = 'isfc',
49d291c222357303b9611cab89d0c3b047584ef377Chong Zhang        kWhatInputSurfaceAccepted = 'isfa',
5005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatSignaledInputEOS    = 'seos',
5105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        kWhatBuffersAllocated    = 'allc',
5290fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar        kWhatOutputFramesRendered = 'outR',
5305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
5405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
5505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void setNotificationMessage(const sp<AMessage> &msg) = 0;
5605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
5705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0;
5805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0;
5905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateCreateInputSurface() = 0;
608f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang    virtual void initiateSetInputSurface(
61d291c222357303b9611cab89d0c3b047584ef377Chong Zhang            const sp<PersistentSurface> &surface) = 0;
6205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateStart() = 0;
6305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void initiateShutdown(bool keepComponentAllocated = false) = 0;
6405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
6505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    // require an explicit message handler
6605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void onMessageReceived(const sp<AMessage> &msg) = 0;
6705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
685b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar    virtual status_t queryCapabilities(
695b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar            const AString &name, const AString &mime, bool isEncoder,
705b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar            sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; }
715b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar
721dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar    virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; }
731dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar
7405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalFlush() = 0;
7505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalResume() = 0;
7605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
7705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalRequestIDRFrame() = 0;
7805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalSetParameters(const sp<AMessage> &msg) = 0;
7905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void signalEndOfInputStream() = 0;
8005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    struct PortDescription : public RefBase {
8205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual size_t countBuffers() = 0;
8305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual IOMX::buffer_id bufferIDAt(size_t index) const = 0;
8405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual sp<ABuffer> bufferAt(size_t index) const = 0;
85c6e96a912c2cdedf853e3bd7b68c953fa818ff40Lajos Molnar        virtual sp<NativeHandle> handleAt(size_t index) const { return NULL; };
8686b997dcf1101cdd259460fb4f82204200a9a993Ronghua Wu        virtual sp<RefBase> memRefAt(size_t index) const { return NULL; }
8705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
8805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    protected:
8905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        PortDescription();
9005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        virtual ~PortDescription();
9105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
9205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    private:
9305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar        DISALLOW_EVIL_CONSTRUCTORS(PortDescription);
9405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    };
9505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
968338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    /*
978338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * Codec-related defines
988338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     */
998338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1008338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    /**********************************************************************************************/
1018338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1028338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    /*
1038338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * Media-platform color constants. MediaCodec uses (an extended version of) platform-defined
1048338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * constants that are derived from HAL_DATASPACE, since these are directly exposed to the user.
1058338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * We extend the values to maintain the richer set of information defined inside media
1068338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * containers and bitstreams that are not supported by the platform. We also expect vendors
1078338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * to extend some of these values with vendor-specific values. These are separated into a
1088338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * vendor-extension section so they won't collide with future platform values.
1098338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     */
1108338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1118338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    enum ColorStandard : uint32_t {
1128338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardUnspecified =
1138338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_STANDARD_UNSPECIFIED >> HAL_DATASPACE_STANDARD_SHIFT,
1148338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT709 =     HAL_DATASPACE_STANDARD_BT709 >> HAL_DATASPACE_STANDARD_SHIFT,
1158338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT601_625 = HAL_DATASPACE_STANDARD_BT601_625 >> HAL_DATASPACE_STANDARD_SHIFT,
1168338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT601_625_Unadjusted =
1178338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED >> HAL_DATASPACE_STANDARD_SHIFT,
1188338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT601_525 = HAL_DATASPACE_STANDARD_BT601_525 >> HAL_DATASPACE_STANDARD_SHIFT,
1198338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT601_525_Unadjusted =
1208338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED >> HAL_DATASPACE_STANDARD_SHIFT,
1218338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT2020 =    HAL_DATASPACE_STANDARD_BT2020 >> HAL_DATASPACE_STANDARD_SHIFT,
1228338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT2020Constant =
1238338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE >> HAL_DATASPACE_STANDARD_SHIFT,
1248338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardBT470M =    HAL_DATASPACE_STANDARD_BT470M >> HAL_DATASPACE_STANDARD_SHIFT,
1258338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardFilm =      HAL_DATASPACE_STANDARD_FILM >> HAL_DATASPACE_STANDARD_SHIFT,
1268338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardMax =       HAL_DATASPACE_STANDARD_MASK >> HAL_DATASPACE_STANDARD_SHIFT,
1278338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1288338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-standard values that are not supported by graphics HAL,
1298338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           but track defined color primaries-matrix coefficient combinations in media.
1308338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           These are stable for a given release. */
1318338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardExtendedStart = kColorStandardMax + 1,
1328338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1338338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-standard values that are not supported by graphics HAL
1348338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           nor using media defined color primaries or matrix coefficients. These may differ per
1358338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           device. */
1368338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorStandardVendorStart = 0x10000,
1378338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    };
1388338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1398338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    enum ColorTransfer : uint32_t  {
1408338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferUnspecified =
1418338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_TRANSFER_UNSPECIFIED >> HAL_DATASPACE_TRANSFER_SHIFT,
1428338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferLinear =      HAL_DATASPACE_TRANSFER_LINEAR >> HAL_DATASPACE_TRANSFER_SHIFT,
1438338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferSRGB =        HAL_DATASPACE_TRANSFER_SRGB >> HAL_DATASPACE_TRANSFER_SHIFT,
1448338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferSMPTE_170M =
1458338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar                HAL_DATASPACE_TRANSFER_SMPTE_170M >> HAL_DATASPACE_TRANSFER_SHIFT,
1468338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferGamma22 =     HAL_DATASPACE_TRANSFER_GAMMA2_2 >> HAL_DATASPACE_TRANSFER_SHIFT,
1478338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferGamma28 =     HAL_DATASPACE_TRANSFER_GAMMA2_8 >> HAL_DATASPACE_TRANSFER_SHIFT,
1488338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferST2084 =      HAL_DATASPACE_TRANSFER_ST2084 >> HAL_DATASPACE_TRANSFER_SHIFT,
1498338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferHLG =         HAL_DATASPACE_TRANSFER_HLG >> HAL_DATASPACE_TRANSFER_SHIFT,
1508338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferMax =         HAL_DATASPACE_TRANSFER_MASK >> HAL_DATASPACE_TRANSFER_SHIFT,
1518338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1528338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-transfer values that are not supported by graphics HAL,
1538338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           but track media-defined color-transfer. These are stable for a given release. */
1548338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferExtendedStart = kColorTransferMax + 1,
1558338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1568338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-transfer values that are not supported by graphics HAL
1578338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           nor defined by media. These may differ per device. */
1588338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorTransferVendorStart = 0x10000,
1598338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    };
1608338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1618338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    enum ColorRange : uint32_t  {
1628338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeUnspecified = HAL_DATASPACE_RANGE_UNSPECIFIED >> HAL_DATASPACE_RANGE_SHIFT,
1638338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeFull =        HAL_DATASPACE_RANGE_FULL >> HAL_DATASPACE_RANGE_SHIFT,
1648338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeLimited =     HAL_DATASPACE_RANGE_LIMITED >> HAL_DATASPACE_RANGE_SHIFT,
1658338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeMax =         HAL_DATASPACE_RANGE_MASK >> HAL_DATASPACE_RANGE_SHIFT,
1668338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1678338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-transfer values that are not supported by graphics HAL,
1688338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           but track media-defined color-transfer. These are stable for a given release. */
1698338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeExtendedStart = kColorRangeMax + 1,
1708338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1718338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        /* This marks a section of color-transfer values that are not supported by graphics HAL
1728338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar           nor defined by media. These may differ per device. */
1738338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar        kColorRangeVendorStart = 0x10000,
1748338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    };
1758338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1768338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    /*
1778338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     * Static utilities for codec support
1788338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar     */
1798338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1808338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    // using int32_t for media range/standard/transfers to denote extended ranges
1818338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static int32_t wrapColorAspectsIntoColorStandard(
1828338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            ColorAspects::Primaries primaries, ColorAspects::MatrixCoeffs coeffs);
1838338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static int32_t wrapColorAspectsIntoColorRange(ColorAspects::Range range);
1848338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static int32_t wrapColorAspectsIntoColorTransfer(ColorAspects::Transfer transfer);
1858338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1868338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static status_t unwrapColorAspectsFromColorRange(
1878338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t range, ColorAspects::Range *aspect);
1888338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static status_t unwrapColorAspectsFromColorTransfer(
1898338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t transfer, ColorAspects::Transfer *aspect);
1908338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static status_t unwrapColorAspectsFromColorStandard(
1918338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t standard,
1928338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            ColorAspects::Primaries *primaries, ColorAspects::MatrixCoeffs *coeffs);
1938338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
1948338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static status_t convertPlatformColorAspectsToCodecAspects(
1958338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t range, int32_t standard, int32_t transfer, ColorAspects &aspects);
1968338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static status_t convertCodecColorAspectsToPlatformAspects(
1978338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            const ColorAspects &aspects,
1988338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t *range, int32_t *standard, int32_t *transfer);
1998338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
2008338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    // updates unspecified range, standard and transfer values to their defaults
2018338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static void setDefaultPlatformColorAspectsIfNeeded(
2028338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t &range, int32_t &standard, int32_t &transfer,
2038338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            int32_t width, int32_t height);
2048338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar    static void setDefaultCodecColorAspectsIfNeeded(
2058338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar            ColorAspects &aspects, int32_t width, int32_t height);
2068338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar
20705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprotected:
20805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    CodecBase();
20905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual ~CodecBase();
21005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
21105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprivate:
21205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    DISALLOW_EVIL_CONSTRUCTORS(CodecBase);
21305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar};
21405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
21505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar}  // namespace android
21605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
21705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#endif  // CODEC_BASE_H_
21805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar
219