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