13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (C) 2021 HiHope Open Source Organization .
33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
53d0407baSopenharmony_ci * You may obtain a copy of the License at
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123d0407baSopenharmony_ci * See the License for the specific language governing permissions and
133d0407baSopenharmony_ci * limitations under the License.
143d0407baSopenharmony_ci */
153d0407baSopenharmony_ci
163d0407baSopenharmony_ci#ifndef VideoExt_h
173d0407baSopenharmony_ci#define VideoExt_h
183d0407baSopenharmony_ci
193d0407baSopenharmony_ci#include <OMX_IVCommon.h>
203d0407baSopenharmony_ci#include <codec_omx_ext.h>
213d0407baSopenharmony_citypedef enum OMX_RANGE {
223d0407baSopenharmony_ci    RangeUnspecified,
233d0407baSopenharmony_ci    RangeFull,
243d0407baSopenharmony_ci    RangeLimited,
253d0407baSopenharmony_ci    RangeOther = 0xff,
263d0407baSopenharmony_ci} OMX_RANGE;
273d0407baSopenharmony_ci
283d0407baSopenharmony_citypedef enum OMX_PRIMARIES {
293d0407baSopenharmony_ci    PrimariesUnspecified,
303d0407baSopenharmony_ci    PrimariesBT709_5,       // Rec.ITU-R BT.709-5 or equivalent
313d0407baSopenharmony_ci    PrimariesBT470_6M,      // Rec.ITU-R BT.470-6 System M or equivalent
323d0407baSopenharmony_ci    PrimariesBT601_6_625,   // Rec.ITU-R BT.601-6 625 or equivalent
333d0407baSopenharmony_ci    PrimariesBT601_6_525,   // Rec.ITU-R BT.601-6 525 or equivalent
343d0407baSopenharmony_ci    PrimariesGenericFilm,   // Generic Film
353d0407baSopenharmony_ci    PrimariesBT2020,        // Rec.ITU-R BT.2020 or equivalent
363d0407baSopenharmony_ci    PrimariesOther = 0xff,
373d0407baSopenharmony_ci} OMX_PRIMARIES;
383d0407baSopenharmony_ci
393d0407baSopenharmony_citypedef enum OMX_TRANSFER {
403d0407baSopenharmony_ci    TransferUnspecified,
413d0407baSopenharmony_ci    TransferLinear,         // Linear transfer characteristics
423d0407baSopenharmony_ci    TransferSRGB,           // sRGB or equivalent
433d0407baSopenharmony_ci    TransferSMPTE170M,      // SMPTE 170M or equivalent (e.g. BT.601/709/2020)
443d0407baSopenharmony_ci    TransferGamma22,        // Assumed display gamma 2.2
453d0407baSopenharmony_ci    TransferGamma28,        // Assumed display gamma 2.8
463d0407baSopenharmony_ci    TransferST2084,         // SMPTE ST 2084 for 10/12/14/16 bit systems
473d0407baSopenharmony_ci    TransferHLG,            // ARIB STD-B67 hybrid-log-gamma
483d0407baSopenharmony_ci    TransferSMPTE240M = 0x40, // SMPTE 240M
493d0407baSopenharmony_ci    TransferXvYCC,          // IEC 61966-2-4
503d0407baSopenharmony_ci    TransferBT1361,         // Rec.ITU-R BT.1361 extended gamut
513d0407baSopenharmony_ci    TransferST428,          // SMPTE ST 428-1
523d0407baSopenharmony_ci    TransferOther = 0xff,
533d0407baSopenharmony_ci} OMX_TRANSFER;
543d0407baSopenharmony_ci
553d0407baSopenharmony_citypedef enum OMX_MATRIXCOEFFS {
563d0407baSopenharmony_ci    MatrixUnspecified,
573d0407baSopenharmony_ci    MatrixBT709_5,          // Rec.ITU-R BT.709-5 or equivalent
583d0407baSopenharmony_ci    MatrixBT470_6M,         // KR=0.30, KB=0.11 or equivalent
593d0407baSopenharmony_ci    MatrixBT601_6,          // Rec.ITU-R BT.601-6 625 or equivalent
603d0407baSopenharmony_ci    MatrixSMPTE240M,        // SMPTE 240M or equivalent
613d0407baSopenharmony_ci    MatrixBT2020,           // Rec.ITU-R BT.2020 non-constant luminance
623d0407baSopenharmony_ci    MatrixBT2020Constant,   // Rec.ITU-R BT.2020 constant luminance
633d0407baSopenharmony_ci    MatrixOther = 0xff,
643d0407baSopenharmony_ci} OMX_MATRIXCOEFFS;
653d0407baSopenharmony_ci
663d0407baSopenharmony_citypedef struct OMX_COLORASPECTS {
673d0407baSopenharmony_ci    OMX_RANGE mRange;                // IN/OUT
683d0407baSopenharmony_ci    OMX_PRIMARIES mPrimaries;        // IN/OUT
693d0407baSopenharmony_ci    OMX_TRANSFER mTransfer;          // IN/OUT
703d0407baSopenharmony_ci    OMX_MATRIXCOEFFS mMatrixCoeffs;  // IN/OUT
713d0407baSopenharmony_ci} OMX_COLORASPECTS;
723d0407baSopenharmony_ci
733d0407baSopenharmony_citypedef struct ISO_COLORASPECTS {
743d0407baSopenharmony_ci    OMX_U32 mRange;                 // IN/OUT
753d0407baSopenharmony_ci    OMX_U32 mPrimaries;             // IN/OUT
763d0407baSopenharmony_ci    OMX_U32 mTransfer;              // IN/OUT
773d0407baSopenharmony_ci    OMX_U32 mMatrixCoeffs;          // IN/OUT
783d0407baSopenharmony_ci} ISO_COLORASPECTS;
793d0407baSopenharmony_ci
803d0407baSopenharmony_citypedef struct OMX_CONFIG_DESCRIBECOLORASPECTSPARAMS {
813d0407baSopenharmony_ci    OMX_U32  nSize;                // IN
823d0407baSopenharmony_ci    OMX_VERSIONTYPE nVersion;      // IN
833d0407baSopenharmony_ci    OMX_U32  nPortIndex;           // IN
843d0407baSopenharmony_ci    OMX_BOOL bRequestingDataSpace; // IN
853d0407baSopenharmony_ci    OMX_BOOL bDataSpaceChanged;    // IN
863d0407baSopenharmony_ci    OMX_U32  nPixelFormat;         // IN
873d0407baSopenharmony_ci    OMX_U32  nDataSpace;           // OUT
883d0407baSopenharmony_ci    OMX_COLORASPECTS sAspects;  // IN/OUT
893d0407baSopenharmony_ci} OMX_CONFIG_DESCRIBECOLORASPECTSPARAMS;
903d0407baSopenharmony_ci
913d0407baSopenharmony_citypedef enum OMX_VIDEO_CODINGTYPEEXT {
923d0407baSopenharmony_ci    OMX_VIDEO_CodingVP8EXT = 9,
933d0407baSopenharmony_ci    OMX_VIDEO_AVCLevel52  = 0x10000,
943d0407baSopenharmony_ci}OMX_VIDEO_CODINGTYPEEXT;
953d0407baSopenharmony_ci
963d0407baSopenharmony_citypedef enum OMX_VIDEO_VP9PROFILETYPE {
973d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile0       = 0x1,
983d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile1       = 0x2,
993d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile2       = 0x4,
1003d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile3       = 0x8,
1013d0407baSopenharmony_ci    // HDR profiles also support passing HDR metadata
1023d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile2HDR    = 0x1000,
1033d0407baSopenharmony_ci    OMX_VIDEO_VP9Profile3HDR    = 0x2000,
1043d0407baSopenharmony_ci    OMX_VIDEO_VP9ProfileUnknown = 0x6EFFFFFF,
1053d0407baSopenharmony_ci    OMX_VIDEO_VP9ProfileMax     = 0x7FFFFFFF
1063d0407baSopenharmony_ci} OMX_VIDEO_VP9PROFILETYPE;
1073d0407baSopenharmony_ci
1083d0407baSopenharmony_ci/** VP9 levels */
1093d0407baSopenharmony_citypedef enum OMX_VIDEO_VP9LEVELTYPE {
1103d0407baSopenharmony_ci    OMX_VIDEO_VP9Level1       = 0x1,
1113d0407baSopenharmony_ci    OMX_VIDEO_VP9Level11      = 0x2,
1123d0407baSopenharmony_ci    OMX_VIDEO_VP9Level2       = 0x4,
1133d0407baSopenharmony_ci    OMX_VIDEO_VP9Level21      = 0x8,
1143d0407baSopenharmony_ci    OMX_VIDEO_VP9Level3       = 0x10,
1153d0407baSopenharmony_ci    OMX_VIDEO_VP9Level31      = 0x20,
1163d0407baSopenharmony_ci    OMX_VIDEO_VP9Level4       = 0x40,
1173d0407baSopenharmony_ci    OMX_VIDEO_VP9Level41      = 0x80,
1183d0407baSopenharmony_ci    OMX_VIDEO_VP9Level5       = 0x100,
1193d0407baSopenharmony_ci    OMX_VIDEO_VP9Level51      = 0x200,
1203d0407baSopenharmony_ci    OMX_VIDEO_VP9Level52      = 0x400,
1213d0407baSopenharmony_ci    OMX_VIDEO_VP9Level6       = 0x800,
1223d0407baSopenharmony_ci    OMX_VIDEO_VP9Level61      = 0x1000,
1233d0407baSopenharmony_ci    OMX_VIDEO_VP9Level62      = 0x2000,
1243d0407baSopenharmony_ci    OMX_VIDEO_VP9LevelUnknown = 0x6EFFFFFF,
1253d0407baSopenharmony_ci    OMX_VIDEO_VP9LevelMax     = 0x7FFFFFFF
1263d0407baSopenharmony_ci} OMX_VIDEO_VP9LEVELTYPE;
1273d0407baSopenharmony_ci
1283d0407baSopenharmony_ci/** Structure to define if dependent slice segments should be used */
1293d0407baSopenharmony_citypedef struct OMX_VIDEO_SLICESEGMENTSTYPE {
1303d0407baSopenharmony_ci    OMX_U32 nSize;
1313d0407baSopenharmony_ci    OMX_VERSIONTYPE nVersion;
1323d0407baSopenharmony_ci    OMX_U32 nPortIndex;
1333d0407baSopenharmony_ci    OMX_BOOL bDepedentSegments;
1343d0407baSopenharmony_ci    OMX_BOOL bEnableLoopFilterAcrossSlices;
1353d0407baSopenharmony_ci} OMX_VIDEO_SLICESEGMENTSTYPE;
1363d0407baSopenharmony_ci#endif