1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2015 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __MPP_FRAME_H__ 7*437bfbebSnyanmisaka #define __MPP_FRAME_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "mpp_buffer.h" 10*437bfbebSnyanmisaka #include "mpp_meta.h" 11*437bfbebSnyanmisaka 12*437bfbebSnyanmisaka /* 13*437bfbebSnyanmisaka * bit definition for mode flag in MppFrame 14*437bfbebSnyanmisaka */ 15*437bfbebSnyanmisaka /* progressive frame */ 16*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_FRAME (0x00000000) 17*437bfbebSnyanmisaka /* top field only */ 18*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_TOP_FIELD (0x00000001) 19*437bfbebSnyanmisaka /* bottom field only */ 20*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_BOT_FIELD (0x00000002) 21*437bfbebSnyanmisaka /* paired field */ 22*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_PAIRED_FIELD (MPP_FRAME_FLAG_TOP_FIELD|MPP_FRAME_FLAG_BOT_FIELD) 23*437bfbebSnyanmisaka /* paired field with field order of top first */ 24*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_TOP_FIRST (0x00000004) 25*437bfbebSnyanmisaka /* paired field with field order of bottom first */ 26*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_BOT_FIRST (0x00000008) 27*437bfbebSnyanmisaka /* paired field with unknown field order (MBAFF) */ 28*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_DEINTERLACED (MPP_FRAME_FLAG_TOP_FIRST|MPP_FRAME_FLAG_BOT_FIRST) 29*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_FIELD_ORDER_MASK (0x0000000C) 30*437bfbebSnyanmisaka // for multiview stream 31*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_VIEW_ID_MASK (0x000000f0) 32*437bfbebSnyanmisaka 33*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_IEP_DEI_MASK (0x00000f00) 34*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_IEP_DEI_I2O1 (0x00000100) 35*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_IEP_DEI_I4O2 (0x00000200) 36*437bfbebSnyanmisaka #define MPP_FRAME_FLAG_IEP_DEI_I4O1 (0x00000300) 37*437bfbebSnyanmisaka 38*437bfbebSnyanmisaka /* 39*437bfbebSnyanmisaka * MPEG vs JPEG YUV range. 40*437bfbebSnyanmisaka */ 41*437bfbebSnyanmisaka typedef enum { 42*437bfbebSnyanmisaka MPP_FRAME_RANGE_UNSPECIFIED = 0, 43*437bfbebSnyanmisaka MPP_FRAME_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges 44*437bfbebSnyanmisaka MPP_FRAME_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges 45*437bfbebSnyanmisaka MPP_FRAME_RANGE_NB, ///< Not part of ABI 46*437bfbebSnyanmisaka } MppFrameColorRange; 47*437bfbebSnyanmisaka 48*437bfbebSnyanmisaka typedef enum { 49*437bfbebSnyanmisaka MPP_FRAME_CHROMA_DOWN_SAMPLE_MODE_NONE, 50*437bfbebSnyanmisaka MPP_FRAME_CHORMA_DOWN_SAMPLE_MODE_AVERAGE, 51*437bfbebSnyanmisaka MPP_FRAME_CHORMA_DOWN_SAMPLE_MODE_DISCARD, 52*437bfbebSnyanmisaka } MppFrameChromaDownSampleMode; 53*437bfbebSnyanmisaka 54*437bfbebSnyanmisaka typedef enum { 55*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_COMPONEMT = 0, 56*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_PAL = 1, 57*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_NTSC = 2, 58*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_SECAM = 3, 59*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_MAC = 4, 60*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_UNSPECIFIED = 5, 61*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_RESERVED0 = 6, 62*437bfbebSnyanmisaka MPP_FRAME_VIDEO_FMT_RESERVED1 = 7, 63*437bfbebSnyanmisaka } MppFrameVideoFormat; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka /* 66*437bfbebSnyanmisaka * Chromaticity coordinates of the source primaries. 67*437bfbebSnyanmisaka */ 68*437bfbebSnyanmisaka typedef enum { 69*437bfbebSnyanmisaka MPP_FRAME_PRI_RESERVED0 = 0, 70*437bfbebSnyanmisaka MPP_FRAME_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B 71*437bfbebSnyanmisaka MPP_FRAME_PRI_UNSPECIFIED = 2, 72*437bfbebSnyanmisaka MPP_FRAME_PRI_RESERVED = 3, 73*437bfbebSnyanmisaka MPP_FRAME_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) 74*437bfbebSnyanmisaka 75*437bfbebSnyanmisaka MPP_FRAME_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM 76*437bfbebSnyanmisaka MPP_FRAME_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC/SMPTE ST 170 (2004) 77*437bfbebSnyanmisaka MPP_FRAME_PRI_SMPTE240M = 7, ///< functionally identical to above/SMPTE ST 240 78*437bfbebSnyanmisaka MPP_FRAME_PRI_FILM = 8, ///< colour filters using Illuminant C 79*437bfbebSnyanmisaka MPP_FRAME_PRI_BT2020 = 9, ///< ITU-R BT2020 / ITU-R BT.2100-2 80*437bfbebSnyanmisaka MPP_FRAME_PRI_SMPTEST428_1 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) 81*437bfbebSnyanmisaka MPP_FRAME_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 82*437bfbebSnyanmisaka MPP_FRAME_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 83*437bfbebSnyanmisaka MPP_FRAME_PRI_JEDEC_P22 = 22, ///< JEDEC P22 phosphors 84*437bfbebSnyanmisaka MPP_FRAME_PRI_NB, ///< Not part of ABI 85*437bfbebSnyanmisaka } MppFrameColorPrimaries; 86*437bfbebSnyanmisaka 87*437bfbebSnyanmisaka /* 88*437bfbebSnyanmisaka * Color Transfer Characteristic. 89*437bfbebSnyanmisaka */ 90*437bfbebSnyanmisaka typedef enum { 91*437bfbebSnyanmisaka MPP_FRAME_TRC_RESERVED0 = 0, 92*437bfbebSnyanmisaka MPP_FRAME_TRC_BT709 = 1, ///< also ITU-R BT1361 93*437bfbebSnyanmisaka MPP_FRAME_TRC_UNSPECIFIED = 2, 94*437bfbebSnyanmisaka MPP_FRAME_TRC_RESERVED = 3, 95*437bfbebSnyanmisaka MPP_FRAME_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM 96*437bfbebSnyanmisaka MPP_FRAME_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG 97*437bfbebSnyanmisaka MPP_FRAME_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC 98*437bfbebSnyanmisaka MPP_FRAME_TRC_SMPTE240M = 7, 99*437bfbebSnyanmisaka MPP_FRAME_TRC_LINEAR = 8, ///< "Linear transfer characteristics" 100*437bfbebSnyanmisaka MPP_FRAME_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" 101*437bfbebSnyanmisaka MPP_FRAME_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" 102*437bfbebSnyanmisaka MPP_FRAME_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 103*437bfbebSnyanmisaka MPP_FRAME_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut 104*437bfbebSnyanmisaka MPP_FRAME_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) 105*437bfbebSnyanmisaka MPP_FRAME_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system 106*437bfbebSnyanmisaka MPP_FRAME_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system 107*437bfbebSnyanmisaka MPP_FRAME_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems 108*437bfbebSnyanmisaka MPP_FRAME_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 109*437bfbebSnyanmisaka MPP_FRAME_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" 110*437bfbebSnyanmisaka MPP_FRAME_TRC_NB, ///< Not part of ABI 111*437bfbebSnyanmisaka } MppFrameColorTransferCharacteristic; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka /* 114*437bfbebSnyanmisaka * YUV colorspace type. 115*437bfbebSnyanmisaka */ 116*437bfbebSnyanmisaka typedef enum { 117*437bfbebSnyanmisaka MPP_FRAME_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) 118*437bfbebSnyanmisaka MPP_FRAME_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B 119*437bfbebSnyanmisaka MPP_FRAME_SPC_UNSPECIFIED = 2, 120*437bfbebSnyanmisaka MPP_FRAME_SPC_RESERVED = 3, 121*437bfbebSnyanmisaka MPP_FRAME_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) 122*437bfbebSnyanmisaka MPP_FRAME_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 123*437bfbebSnyanmisaka MPP_FRAME_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above 124*437bfbebSnyanmisaka MPP_FRAME_SPC_SMPTE240M = 7, 125*437bfbebSnyanmisaka MPP_FRAME_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 126*437bfbebSnyanmisaka MPP_FRAME_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system 127*437bfbebSnyanmisaka MPP_FRAME_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system 128*437bfbebSnyanmisaka MPP_FRAME_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x 129*437bfbebSnyanmisaka MPP_FRAME_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system 130*437bfbebSnyanmisaka MPP_FRAME_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system 131*437bfbebSnyanmisaka MPP_FRAME_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp 132*437bfbebSnyanmisaka MPP_FRAME_SPC_NB, ///< Not part of ABI 133*437bfbebSnyanmisaka } MppFrameColorSpace; 134*437bfbebSnyanmisaka 135*437bfbebSnyanmisaka /* 136*437bfbebSnyanmisaka * Location of chroma samples. 137*437bfbebSnyanmisaka * 138*437bfbebSnyanmisaka * Illustration showing the location of the first (top left) chroma sample of the 139*437bfbebSnyanmisaka * image, the left shows only luma, the right 140*437bfbebSnyanmisaka * shows the location of the chroma sample, the 2 could be imagined to overlay 141*437bfbebSnyanmisaka * each other but are drawn separately due to limitations of ASCII 142*437bfbebSnyanmisaka * 143*437bfbebSnyanmisaka * 1st 2nd 1st 2nd horizontal luma sample positions 144*437bfbebSnyanmisaka * v v v v 145*437bfbebSnyanmisaka * ______ ______ 146*437bfbebSnyanmisaka *1st luma line > |X X ... |3 4 X ... X are luma samples, 147*437bfbebSnyanmisaka * | |1 2 1-6 are possible chroma positions 148*437bfbebSnyanmisaka *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position 149*437bfbebSnyanmisaka */ 150*437bfbebSnyanmisaka typedef enum { 151*437bfbebSnyanmisaka MPP_CHROMA_LOC_UNSPECIFIED = 0, 152*437bfbebSnyanmisaka MPP_CHROMA_LOC_LEFT = 1, ///< mpeg2/4 4:2:0, h264 default for 4:2:0 153*437bfbebSnyanmisaka MPP_CHROMA_LOC_CENTER = 2, ///< mpeg1 4:2:0, jpeg 4:2:0, h263 4:2:0 154*437bfbebSnyanmisaka MPP_CHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 155*437bfbebSnyanmisaka MPP_CHROMA_LOC_TOP = 4, 156*437bfbebSnyanmisaka MPP_CHROMA_LOC_BOTTOMLEFT = 5, 157*437bfbebSnyanmisaka MPP_CHROMA_LOC_BOTTOM = 6, 158*437bfbebSnyanmisaka MPP_CHROMA_LOC_NB, ///< Not part of ABI 159*437bfbebSnyanmisaka } MppFrameChromaLocation; 160*437bfbebSnyanmisaka 161*437bfbebSnyanmisaka typedef enum { 162*437bfbebSnyanmisaka MPP_CHROMA_UNSPECIFIED, 163*437bfbebSnyanmisaka MPP_CHROMA_400, 164*437bfbebSnyanmisaka MPP_CHROMA_410, 165*437bfbebSnyanmisaka MPP_CHROMA_411, 166*437bfbebSnyanmisaka MPP_CHROMA_420, 167*437bfbebSnyanmisaka MPP_CHROMA_422, 168*437bfbebSnyanmisaka MPP_CHROMA_440, 169*437bfbebSnyanmisaka MPP_CHROMA_444, 170*437bfbebSnyanmisaka } MppFrameChromaFormat; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka /* 173*437bfbebSnyanmisaka * MppFrameFormat bit flag: 174*437bfbebSnyanmisaka * 175*437bfbebSnyanmisaka * +-----------------------------------------------+ 176*437bfbebSnyanmisaka * | 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 | 177*437bfbebSnyanmisaka * +-----------------------------------------------+ 178*437bfbebSnyanmisaka * bit 0 ~ 15: YUV / RGB format value 179*437bfbebSnyanmisaka * bit 16 ~ 19: YUV / RGB flag 0 - YUV; 1 - RGB; 180*437bfbebSnyanmisaka * bit 20 ~ 23: Frame Buffer Compression (FBC) flag, 0 - No FBC; 1 - FBCv1; 2 - FBCv2; 181*437bfbebSnyanmisaka * bit 24 : Big / little end flag, 0 - big end; 1 - little end; 182*437bfbebSnyanmisaka * bit 25 : Tile format flag, 0 - No tile; 1 - tile format; 183*437bfbebSnyanmisaka * bit 26 ~ 27: High Dynamic Range (HDR) flag, 0 - Standard Dynamic Range (SDR); 1 - HDR; 184*437bfbebSnyanmisaka * 185*437bfbebSnyanmisaka * NOTE: FBC format and tile format can not exist at the same time. 186*437bfbebSnyanmisaka */ 187*437bfbebSnyanmisaka 188*437bfbebSnyanmisaka #define MPP_FRAME_FMT_MASK (0x000fffff) 189*437bfbebSnyanmisaka #define MPP_FRAME_FMT_PROP_MASK (0x0ff00000) 190*437bfbebSnyanmisaka 191*437bfbebSnyanmisaka #define MPP_FRAME_FMT_COLOR_MASK (0x000f0000) 192*437bfbebSnyanmisaka #define MPP_FRAME_FMT_YUV (0x00000000) 193*437bfbebSnyanmisaka #define MPP_FRAME_FMT_RGB (0x00010000) 194*437bfbebSnyanmisaka 195*437bfbebSnyanmisaka #define MPP_FRAME_FBC_MASK (0x00f00000) 196*437bfbebSnyanmisaka #define MPP_FRAME_FBC_NONE (0x00000000) 197*437bfbebSnyanmisaka 198*437bfbebSnyanmisaka #define MPP_FRAME_HDR_MASK (0x0c000000) 199*437bfbebSnyanmisaka #define MPP_FRAME_HDR_NONE (0x00000000) 200*437bfbebSnyanmisaka #define MPP_FRAME_HDR (0x04000000) 201*437bfbebSnyanmisaka 202*437bfbebSnyanmisaka #define MPP_FRAME_TILE_FLAG (0x02000000) 203*437bfbebSnyanmisaka 204*437bfbebSnyanmisaka /* 205*437bfbebSnyanmisaka * AFBC_V1 is for ISP output. 206*437bfbebSnyanmisaka * It has default payload offset to be calculated * from width and height: 207*437bfbebSnyanmisaka * Payload offset = MPP_ALIGN(MPP_ALIGN(width, 16) * MPP_ALIGN(height, 16) / 16, SZ_4K) 208*437bfbebSnyanmisaka */ 209*437bfbebSnyanmisaka #define MPP_FRAME_FBC_AFBC_V1 (0x00100000) 210*437bfbebSnyanmisaka /* 211*437bfbebSnyanmisaka * AFBC_V2 is for video decoder output. 212*437bfbebSnyanmisaka * It stores payload offset in first 32-bit in header address 213*437bfbebSnyanmisaka * Payload offset is always set to zero. 214*437bfbebSnyanmisaka */ 215*437bfbebSnyanmisaka #define MPP_FRAME_FBC_AFBC_V2 (0x00200000) 216*437bfbebSnyanmisaka 217*437bfbebSnyanmisaka /* 218*437bfbebSnyanmisaka * RKFBC is for video decoder output and video encoder Input. 219*437bfbebSnyanmisaka * It has default header stride to be calculated * from width and height: 220*437bfbebSnyanmisaka * Header stride = MPP_ALIGN(width, 64) / 64 * 16 221*437bfbebSnyanmisaka * Payload offset is always set to zero. 222*437bfbebSnyanmisaka */ 223*437bfbebSnyanmisaka #define MPP_FRAME_FBC_RKFBC (0x00400000) 224*437bfbebSnyanmisaka 225*437bfbebSnyanmisaka #define MPP_FRAME_FMT_LE_MASK (0x01000000) 226*437bfbebSnyanmisaka 227*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_YUV(fmt) (((fmt & MPP_FRAME_FMT_COLOR_MASK) == MPP_FRAME_FMT_YUV) && \ 228*437bfbebSnyanmisaka ((fmt & MPP_FRAME_FMT_MASK) < MPP_FMT_YUV_BUTT)) 229*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_YUV_10BIT(fmt) ((fmt & MPP_FRAME_FMT_MASK) == MPP_FMT_YUV420SP_10BIT || \ 230*437bfbebSnyanmisaka (fmt & MPP_FRAME_FMT_MASK) == MPP_FMT_YUV422SP_10BIT || \ 231*437bfbebSnyanmisaka (fmt & MPP_FRAME_FMT_MASK) == MPP_FMT_YUV444SP_10BIT) 232*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_RGB(fmt) (((fmt & MPP_FRAME_FMT_COLOR_MASK) == MPP_FRAME_FMT_RGB) && \ 233*437bfbebSnyanmisaka ((fmt & MPP_FRAME_FMT_MASK) < MPP_FMT_RGB_BUTT)) 234*437bfbebSnyanmisaka 235*437bfbebSnyanmisaka /* 236*437bfbebSnyanmisaka * For MPP_FRAME_FBC_AFBC_V1 the 16byte aligned stride is used. 237*437bfbebSnyanmisaka */ 238*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_FBC(fmt) (fmt & MPP_FRAME_FBC_MASK) 239*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_RKFBC(fmt) (fmt & MPP_FRAME_FBC_RKFBC) 240*437bfbebSnyanmisaka 241*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_HDR(fmt) (fmt & MPP_FRAME_HDR_MASK) 242*437bfbebSnyanmisaka 243*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_LE(fmt) ((fmt & MPP_FRAME_FMT_LE_MASK) == MPP_FRAME_FMT_LE_MASK) 244*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_BE(fmt) ((fmt & MPP_FRAME_FMT_LE_MASK) == 0) 245*437bfbebSnyanmisaka 246*437bfbebSnyanmisaka #define MPP_FRAME_FMT_IS_TILE(fmt) (fmt & MPP_FRAME_TILE_FLAG) 247*437bfbebSnyanmisaka 248*437bfbebSnyanmisaka /* mpp color format index definition */ 249*437bfbebSnyanmisaka typedef enum { 250*437bfbebSnyanmisaka MPP_FMT_YUV420SP = (MPP_FRAME_FMT_YUV + 0), /* YYYY... UV... (NV12) */ 251*437bfbebSnyanmisaka /* 252*437bfbebSnyanmisaka * A rockchip specific pixel format, without gap between pixel against 253*437bfbebSnyanmisaka * the P010_10LE/P010_10BE 254*437bfbebSnyanmisaka */ 255*437bfbebSnyanmisaka MPP_FMT_YUV420SP_10BIT = (MPP_FRAME_FMT_YUV + 1), 256*437bfbebSnyanmisaka MPP_FMT_YUV422SP = (MPP_FRAME_FMT_YUV + 2), /* YYYY... UVUV... (NV16) */ 257*437bfbebSnyanmisaka MPP_FMT_YUV422SP_10BIT = (MPP_FRAME_FMT_YUV + 3), ///< Not part of ABI 258*437bfbebSnyanmisaka MPP_FMT_YUV420P = (MPP_FRAME_FMT_YUV + 4), /* YYYY... U...V... (I420) */ 259*437bfbebSnyanmisaka MPP_FMT_YUV420SP_VU = (MPP_FRAME_FMT_YUV + 5), /* YYYY... VUVUVU... (NV21) */ 260*437bfbebSnyanmisaka MPP_FMT_YUV422P = (MPP_FRAME_FMT_YUV + 6), /* YYYY... UU...VV...(422P) */ 261*437bfbebSnyanmisaka MPP_FMT_YUV422SP_VU = (MPP_FRAME_FMT_YUV + 7), /* YYYY... VUVUVU... (NV61) */ 262*437bfbebSnyanmisaka MPP_FMT_YUV422_YUYV = (MPP_FRAME_FMT_YUV + 8), /* YUYVYUYV... (YUY2) */ 263*437bfbebSnyanmisaka MPP_FMT_YUV422_YVYU = (MPP_FRAME_FMT_YUV + 9), /* YVYUYVYU... (YVY2) */ 264*437bfbebSnyanmisaka MPP_FMT_YUV422_UYVY = (MPP_FRAME_FMT_YUV + 10), /* UYVYUYVY... (UYVY) */ 265*437bfbebSnyanmisaka MPP_FMT_YUV422_VYUY = (MPP_FRAME_FMT_YUV + 11), /* VYUYVYUY... (VYUY) */ 266*437bfbebSnyanmisaka MPP_FMT_YUV400 = (MPP_FRAME_FMT_YUV + 12), /* YYYY... */ 267*437bfbebSnyanmisaka MPP_FMT_YUV440SP = (MPP_FRAME_FMT_YUV + 13), /* YYYY... UVUV... */ 268*437bfbebSnyanmisaka MPP_FMT_YUV411SP = (MPP_FRAME_FMT_YUV + 14), /* YYYY... UV... */ 269*437bfbebSnyanmisaka MPP_FMT_YUV444SP = (MPP_FRAME_FMT_YUV + 15), /* YYYY... UVUVUVUV... */ 270*437bfbebSnyanmisaka MPP_FMT_YUV444P = (MPP_FRAME_FMT_YUV + 16), /* YYYY... UUUU... VVVV... */ 271*437bfbebSnyanmisaka MPP_FMT_YUV444SP_10BIT = (MPP_FRAME_FMT_YUV + 17), 272*437bfbebSnyanmisaka MPP_FMT_AYUV2BPP = (MPP_FRAME_FMT_YUV + 18), /* YYYY... UVUVUVUV... */ 273*437bfbebSnyanmisaka MPP_FMT_AYUV1BPP = (MPP_FRAME_FMT_YUV + 19), 274*437bfbebSnyanmisaka MPP_FMT_YUV_BUTT, 275*437bfbebSnyanmisaka 276*437bfbebSnyanmisaka MPP_FMT_RGB565 = (MPP_FRAME_FMT_RGB + 0), /* 16-bit RGB */ 277*437bfbebSnyanmisaka MPP_FMT_BGR565 = (MPP_FRAME_FMT_RGB + 1), /* 16-bit RGB */ 278*437bfbebSnyanmisaka MPP_FMT_RGB555 = (MPP_FRAME_FMT_RGB + 2), /* 15-bit RGB */ 279*437bfbebSnyanmisaka MPP_FMT_BGR555 = (MPP_FRAME_FMT_RGB + 3), /* 15-bit RGB */ 280*437bfbebSnyanmisaka MPP_FMT_RGB444 = (MPP_FRAME_FMT_RGB + 4), /* 12-bit RGB */ 281*437bfbebSnyanmisaka MPP_FMT_BGR444 = (MPP_FRAME_FMT_RGB + 5), /* 12-bit RGB */ 282*437bfbebSnyanmisaka MPP_FMT_RGB888 = (MPP_FRAME_FMT_RGB + 6), /* 24-bit RGB */ 283*437bfbebSnyanmisaka MPP_FMT_BGR888 = (MPP_FRAME_FMT_RGB + 7), /* 24-bit RGB */ 284*437bfbebSnyanmisaka MPP_FMT_RGB101010 = (MPP_FRAME_FMT_RGB + 8), /* 30-bit RGB */ 285*437bfbebSnyanmisaka MPP_FMT_BGR101010 = (MPP_FRAME_FMT_RGB + 9), /* 30-bit RGB */ 286*437bfbebSnyanmisaka MPP_FMT_ARGB8888 = (MPP_FRAME_FMT_RGB + 10), /* 32-bit RGB */ 287*437bfbebSnyanmisaka MPP_FMT_ABGR8888 = (MPP_FRAME_FMT_RGB + 11), /* 32-bit RGB */ 288*437bfbebSnyanmisaka MPP_FMT_BGRA8888 = (MPP_FRAME_FMT_RGB + 12), /* 32-bit RGB */ 289*437bfbebSnyanmisaka MPP_FMT_RGBA8888 = (MPP_FRAME_FMT_RGB + 13), /* 32-bit RGB */ 290*437bfbebSnyanmisaka MPP_FMT_ARGB4444 = (MPP_FRAME_FMT_RGB + 14), /* 16-bit RGB */ 291*437bfbebSnyanmisaka MPP_FMT_ARGB1555 = (MPP_FRAME_FMT_RGB + 15), /* 2-bit RGB */ 292*437bfbebSnyanmisaka MPP_FMT_RGB_BUTT, 293*437bfbebSnyanmisaka 294*437bfbebSnyanmisaka MPP_FMT_BUTT, 295*437bfbebSnyanmisaka } MppFrameFormat; 296*437bfbebSnyanmisaka 297*437bfbebSnyanmisaka /** 298*437bfbebSnyanmisaka * Rational number (pair of numerator and denominator). 299*437bfbebSnyanmisaka */ 300*437bfbebSnyanmisaka typedef struct MppFrameRational { 301*437bfbebSnyanmisaka RK_S32 num; ///< Numerator 302*437bfbebSnyanmisaka RK_S32 den; ///< Denominator 303*437bfbebSnyanmisaka } MppFrameRational; 304*437bfbebSnyanmisaka 305*437bfbebSnyanmisaka typedef struct MppFrameMasteringDisplayMetadata { 306*437bfbebSnyanmisaka RK_U16 display_primaries[3][2]; 307*437bfbebSnyanmisaka RK_U16 white_point[2]; 308*437bfbebSnyanmisaka RK_U32 max_luminance; 309*437bfbebSnyanmisaka RK_U32 min_luminance; 310*437bfbebSnyanmisaka } MppFrameMasteringDisplayMetadata; 311*437bfbebSnyanmisaka 312*437bfbebSnyanmisaka typedef struct MppFrameContentLightMetadata { 313*437bfbebSnyanmisaka RK_U16 MaxCLL; 314*437bfbebSnyanmisaka RK_U16 MaxFALL; 315*437bfbebSnyanmisaka } MppFrameContentLightMetadata; 316*437bfbebSnyanmisaka 317*437bfbebSnyanmisaka typedef struct MppFrameHdrDynamicMeta { 318*437bfbebSnyanmisaka RK_U32 hdr_fmt; 319*437bfbebSnyanmisaka RK_U32 size; 320*437bfbebSnyanmisaka RK_U8 data[]; 321*437bfbebSnyanmisaka } MppFrameHdrDynamicMeta; 322*437bfbebSnyanmisaka 323*437bfbebSnyanmisaka typedef enum MppFrameError { 324*437bfbebSnyanmisaka /* General error not specified */ 325*437bfbebSnyanmisaka MPP_FRAME_ERR_UNKNOW = 0x0001, 326*437bfbebSnyanmisaka 327*437bfbebSnyanmisaka /* Critical error for decoder not support error */ 328*437bfbebSnyanmisaka MPP_FRAME_ERR_UNSUPPORT = 0x0002, 329*437bfbebSnyanmisaka 330*437bfbebSnyanmisaka /* 331*437bfbebSnyanmisaka * Fatal error for decoder can not parse a valid frame for hardware. 332*437bfbebSnyanmisaka * the pixel data is all invalid. 333*437bfbebSnyanmisaka */ 334*437bfbebSnyanmisaka MPP_FRAME_ERR_DEC_INVALID = 0x0010, 335*437bfbebSnyanmisaka 336*437bfbebSnyanmisaka /* 337*437bfbebSnyanmisaka * Normal error for decoder found hardware error on decoding. 338*437bfbebSnyanmisaka */ 339*437bfbebSnyanmisaka MPP_FRAME_ERR_DEC_HW_ERR = 0x0100, 340*437bfbebSnyanmisaka 341*437bfbebSnyanmisaka /* 342*437bfbebSnyanmisaka * Normal error for decoder found missing reference frame on decoding. 343*437bfbebSnyanmisaka */ 344*437bfbebSnyanmisaka MPP_FRAME_ERR_DEC_MISS_REF = 0x0200, 345*437bfbebSnyanmisaka } MppFrameError; 346*437bfbebSnyanmisaka 347*437bfbebSnyanmisaka typedef enum { 348*437bfbebSnyanmisaka MPP_FRAME_THUMBNAIL_NONE, 349*437bfbebSnyanmisaka MPP_FRAME_THUMBNAIL_MIXED, 350*437bfbebSnyanmisaka MPP_FRAME_THUMBNAIL_ONLY, 351*437bfbebSnyanmisaka } MppFrameThumbnailMode; 352*437bfbebSnyanmisaka 353*437bfbebSnyanmisaka #ifdef __cplusplus 354*437bfbebSnyanmisaka extern "C" { 355*437bfbebSnyanmisaka #endif 356*437bfbebSnyanmisaka 357*437bfbebSnyanmisaka /* 358*437bfbebSnyanmisaka * MppFrame interface 359*437bfbebSnyanmisaka */ 360*437bfbebSnyanmisaka MPP_RET mpp_frame_init(MppFrame *frame); 361*437bfbebSnyanmisaka MPP_RET mpp_frame_deinit(MppFrame *frame); 362*437bfbebSnyanmisaka 363*437bfbebSnyanmisaka /* 364*437bfbebSnyanmisaka * normal parameter 365*437bfbebSnyanmisaka * 366*437bfbebSnyanmisaka * offset_x 367*437bfbebSnyanmisaka * <--------> 368*437bfbebSnyanmisaka * 369*437bfbebSnyanmisaka * <---------------+ hor_stride +---------------> 370*437bfbebSnyanmisaka * 371*437bfbebSnyanmisaka * +------------------------------------------------------+ ^ ^ 372*437bfbebSnyanmisaka * | | | | 373*437bfbebSnyanmisaka * | | | | offset_y 374*437bfbebSnyanmisaka * | | | | 375*437bfbebSnyanmisaka * | +--------------------------------+ ^ | | v 376*437bfbebSnyanmisaka * | | | | | | 377*437bfbebSnyanmisaka * | | | + | + 378*437bfbebSnyanmisaka * | | | | 379*437bfbebSnyanmisaka * | | valid data area | height | ver_stride 380*437bfbebSnyanmisaka * | | | | 381*437bfbebSnyanmisaka * | | | + | + 382*437bfbebSnyanmisaka * | | | | | | 383*437bfbebSnyanmisaka * | +--------------------------------+ v | | 384*437bfbebSnyanmisaka * | | | 385*437bfbebSnyanmisaka * | <----------+ width +---------> | | 386*437bfbebSnyanmisaka * | | | 387*437bfbebSnyanmisaka * +------------------------------------------------------+ v 388*437bfbebSnyanmisaka * 389*437bfbebSnyanmisaka */ 390*437bfbebSnyanmisaka RK_U32 mpp_frame_get_width(const MppFrame frame); 391*437bfbebSnyanmisaka void mpp_frame_set_width(MppFrame frame, RK_U32 width); 392*437bfbebSnyanmisaka RK_U32 mpp_frame_get_height(const MppFrame frame); 393*437bfbebSnyanmisaka void mpp_frame_set_height(MppFrame frame, RK_U32 height); 394*437bfbebSnyanmisaka RK_U32 mpp_frame_get_hor_stride(const MppFrame frame); 395*437bfbebSnyanmisaka void mpp_frame_set_hor_stride(MppFrame frame, RK_U32 hor_stride); 396*437bfbebSnyanmisaka RK_U32 mpp_frame_get_ver_stride(const MppFrame frame); 397*437bfbebSnyanmisaka void mpp_frame_set_ver_stride(MppFrame frame, RK_U32 ver_stride); 398*437bfbebSnyanmisaka void mpp_frame_set_hor_stride_pixel(MppFrame frame, RK_U32 hor_stride_pixel); 399*437bfbebSnyanmisaka RK_U32 mpp_frame_get_hor_stride_pixel(const MppFrame frame); 400*437bfbebSnyanmisaka void mpp_frame_set_fbc_hdr_stride(MppFrame frame, RK_U32 fbc_hdr_stride); 401*437bfbebSnyanmisaka RK_U32 mpp_frame_get_fbc_hdr_stride(const MppFrame frame); 402*437bfbebSnyanmisaka 403*437bfbebSnyanmisaka RK_U32 mpp_frame_get_offset_x(const MppFrame frame); 404*437bfbebSnyanmisaka void mpp_frame_set_offset_x(MppFrame frame, RK_U32 offset_x); 405*437bfbebSnyanmisaka RK_U32 mpp_frame_get_offset_y(const MppFrame frame); 406*437bfbebSnyanmisaka void mpp_frame_set_offset_y(MppFrame frame, RK_U32 offset_y); 407*437bfbebSnyanmisaka RK_U32 mpp_frame_get_mode(const MppFrame frame); 408*437bfbebSnyanmisaka void mpp_frame_set_mode(MppFrame frame, RK_U32 mode); 409*437bfbebSnyanmisaka RK_U32 mpp_frame_get_discard(const MppFrame frame); 410*437bfbebSnyanmisaka void mpp_frame_set_discard(MppFrame frame, RK_U32 discard); 411*437bfbebSnyanmisaka RK_U32 mpp_frame_get_viewid(const MppFrame frame); 412*437bfbebSnyanmisaka void mpp_frame_set_viewid(MppFrame frame, RK_U32 viewid); 413*437bfbebSnyanmisaka RK_U32 mpp_frame_get_poc(const MppFrame frame); 414*437bfbebSnyanmisaka void mpp_frame_set_poc(MppFrame frame, RK_U32 poc); 415*437bfbebSnyanmisaka RK_S64 mpp_frame_get_pts(const MppFrame frame); 416*437bfbebSnyanmisaka void mpp_frame_set_pts(MppFrame frame, RK_S64 pts); 417*437bfbebSnyanmisaka RK_S64 mpp_frame_get_dts(const MppFrame frame); 418*437bfbebSnyanmisaka void mpp_frame_set_dts(MppFrame frame, RK_S64 dts); 419*437bfbebSnyanmisaka RK_U32 mpp_frame_get_errinfo(const MppFrame frame); 420*437bfbebSnyanmisaka void mpp_frame_set_errinfo(MppFrame frame, RK_U32 errinfo); 421*437bfbebSnyanmisaka size_t mpp_frame_get_buf_size(const MppFrame frame); 422*437bfbebSnyanmisaka void mpp_frame_set_buf_size(MppFrame frame, size_t buf_size); 423*437bfbebSnyanmisaka void mpp_frame_set_thumbnail_en(MppFrame frame, RK_U32 thumbnail_en); 424*437bfbebSnyanmisaka RK_U32 mpp_frame_get_thumbnail_en(const MppFrame frame); 425*437bfbebSnyanmisaka 426*437bfbebSnyanmisaka /* 427*437bfbebSnyanmisaka * flow control parmeter 428*437bfbebSnyanmisaka */ 429*437bfbebSnyanmisaka RK_U32 mpp_frame_get_eos(const MppFrame frame); 430*437bfbebSnyanmisaka void mpp_frame_set_eos(MppFrame frame, RK_U32 eos); 431*437bfbebSnyanmisaka RK_U32 mpp_frame_get_info_change(const MppFrame frame); 432*437bfbebSnyanmisaka void mpp_frame_set_info_change(MppFrame frame, RK_U32 info_change); 433*437bfbebSnyanmisaka 434*437bfbebSnyanmisaka /* 435*437bfbebSnyanmisaka * buffer parameter 436*437bfbebSnyanmisaka */ 437*437bfbebSnyanmisaka MppBuffer mpp_frame_get_buffer(const MppFrame frame); 438*437bfbebSnyanmisaka void mpp_frame_set_buffer(MppFrame frame, MppBuffer buffer); 439*437bfbebSnyanmisaka 440*437bfbebSnyanmisaka /* 441*437bfbebSnyanmisaka * meta data parameter 442*437bfbebSnyanmisaka */ 443*437bfbebSnyanmisaka RK_S32 mpp_frame_has_meta(const MppFrame frame); 444*437bfbebSnyanmisaka MppMeta mpp_frame_get_meta(const MppFrame frame); 445*437bfbebSnyanmisaka void mpp_frame_set_meta(MppFrame frame, MppMeta meta); 446*437bfbebSnyanmisaka 447*437bfbebSnyanmisaka /* 448*437bfbebSnyanmisaka * color related parameter 449*437bfbebSnyanmisaka */ 450*437bfbebSnyanmisaka MppFrameColorRange mpp_frame_get_color_range(const MppFrame frame); 451*437bfbebSnyanmisaka void mpp_frame_set_color_range(MppFrame frame, MppFrameColorRange color_range); 452*437bfbebSnyanmisaka MppFrameColorPrimaries mpp_frame_get_color_primaries(const MppFrame frame); 453*437bfbebSnyanmisaka void mpp_frame_set_color_primaries(MppFrame frame, MppFrameColorPrimaries color_primaries); 454*437bfbebSnyanmisaka MppFrameColorTransferCharacteristic mpp_frame_get_color_trc(const MppFrame frame); 455*437bfbebSnyanmisaka void mpp_frame_set_color_trc(MppFrame frame, MppFrameColorTransferCharacteristic color_trc); 456*437bfbebSnyanmisaka MppFrameColorSpace mpp_frame_get_colorspace(const MppFrame frame); 457*437bfbebSnyanmisaka void mpp_frame_set_colorspace(MppFrame frame, MppFrameColorSpace colorspace); 458*437bfbebSnyanmisaka MppFrameChromaLocation mpp_frame_get_chroma_location(const MppFrame frame); 459*437bfbebSnyanmisaka void mpp_frame_set_chroma_location(MppFrame frame, MppFrameChromaLocation chroma_location); 460*437bfbebSnyanmisaka MppFrameFormat mpp_frame_get_fmt(MppFrame frame); 461*437bfbebSnyanmisaka void mpp_frame_set_fmt(MppFrame frame, MppFrameFormat fmt); 462*437bfbebSnyanmisaka MppFrameRational mpp_frame_get_sar(const MppFrame frame); 463*437bfbebSnyanmisaka void mpp_frame_set_sar(MppFrame frame, MppFrameRational sar); 464*437bfbebSnyanmisaka MppFrameMasteringDisplayMetadata mpp_frame_get_mastering_display(const MppFrame frame); 465*437bfbebSnyanmisaka void mpp_frame_set_mastering_display(MppFrame frame, MppFrameMasteringDisplayMetadata mastering_display); 466*437bfbebSnyanmisaka MppFrameContentLightMetadata mpp_frame_get_content_light(const MppFrame frame); 467*437bfbebSnyanmisaka void mpp_frame_set_content_light(MppFrame frame, MppFrameContentLightMetadata content_light); 468*437bfbebSnyanmisaka MppFrameHdrDynamicMeta* mpp_frame_get_hdr_dynamic_meta(const MppFrame frame); 469*437bfbebSnyanmisaka void mpp_frame_set_hdr_dynamic_meta(MppFrame frame, MppFrameHdrDynamicMeta *vivi_data); 470*437bfbebSnyanmisaka 471*437bfbebSnyanmisaka /* 472*437bfbebSnyanmisaka * HDR parameter 473*437bfbebSnyanmisaka */ 474*437bfbebSnyanmisaka 475*437bfbebSnyanmisaka #ifdef __cplusplus 476*437bfbebSnyanmisaka } 477*437bfbebSnyanmisaka #endif 478*437bfbebSnyanmisaka 479*437bfbebSnyanmisaka #endif /*__MPP_FRAME_H__*/ 480