1 /* 2 * Copyright (c) 2017, Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included 12 * in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 //! 23 //! \file codec_def_encode_jpeg.h 24 //! \brief Defines encode JPEG types and macros shared by CodecHal, MHW, and DDI layer 25 //! \details Applies to JPEG encode only. Should not contain any DDI specific code. 26 //! 27 28 #ifndef __CODEC_DEF_ENCODE_JPEG_H__ 29 #define __CODEC_DEF_ENCODE_JPEG_H__ 30 31 #include "codec_def_common_jpeg.h" 32 #include "codec_def_common_encode.h" 33 34 #define JPEG_MAX_NUM_QUANT_TABLE_INDEX 3 // Max 3 quant tables are allowed for encode 35 #define JPEG_MAX_QUANT_TABLE 3 // MAx Number of Quantization tables that can be sent by the application 36 #define JPEG_NUM_ENCODE_HUFF_BUFF 4 // Total number of Huffman tables that app can send for JPEG encode (2AC and 2DC tables allowed per frame) 37 38 // Max supported resolution for JPEG encode is 16K X 16K 39 #define ENCODE_JPEG_MAX_PIC_WIDTH 16384 40 #define ENCODE_JPEG_MAX_PIC_HEIGHT 16384 41 42 #define JPEG_MAX_NUM_HUFF_TABLES 2 // Max 2 sets of Huffman Tables are allowed (2AC and 2 DC) 43 44 //! 45 //! \struct CodecEncodeJpegQuantTable 46 //! \brief Define JPEG Quant Table 47 //! 48 struct CodecEncodeJpegQuantTable 49 { 50 struct 51 { 52 uint32_t m_tableID; //!< Table ID 53 uint32_t m_precision; //!< Precision 54 uint16_t m_qm[JPEG_NUM_QUANTMATRIX]; //!< Quant Matrix 55 } m_quantTable[JPEG_MAX_NUM_QUANT_TABLE_INDEX]; //!< Quant table array 56 }; 57 58 //! 59 //! \struct CodecEncodeJpegHuffData 60 //! \brief Define Huffman data for JPEG encode 61 //! 62 struct CodecEncodeJpegHuffData 63 { 64 uint32_t m_tableClass; //!< table class 65 uint32_t m_tableID; //!< table ID 66 uint8_t m_bits[JPEG_NUM_HUFF_TABLE_AC_BITS]; //!< AC bits 67 uint8_t m_huffVal[JPEG_NUM_HUFF_TABLE_AC_HUFFVAL]; //!< AC Huffman value 68 }; 69 70 //! 71 //! \struct CodecEncodeJpegHuffmanDataArray 72 //! \brief Define Huffman data array for JPEG encode 73 //! 74 struct CodecEncodeJpegHuffmanDataArray 75 { 76 //!< huffmanData[0] --> Table for DC component of luma 77 //!< huffmanData[1] --> Table for AC component of luma 78 //!< huffmanData[2] --> Table for DC component of chroma 79 //!< huffmanData[3] --> Table for AC component of chroma 80 CodecEncodeJpegHuffData m_huffmanData[JPEG_NUM_ENCODE_HUFF_BUFF]; 81 }; 82 83 //! 84 //! \enum CodecEncodeJpegInputSurfaceFormat 85 //! \brief matches up with InputSurfaceFormats 86 //! (converted from MOS format in ConvertMediaFormatToInputSurfaceFormat()) 87 //! May want to unify enums instead of casting 88 //! 89 enum CodecEncodeJpegInputSurfaceFormat 90 { 91 codechalJpegNV12 = 1, //!< NV12 surface format 92 codechalJpegUYVY = 2, //!< UYVY surface format 93 codechalJpegYUY2 = 3, //!< YUY2 surface format 94 codechalJpegY8 = 4, //!< Y8 surface format 95 codechalJpegRGB = 5 //!< RGB surface format 96 }; 97 98 //! 99 //! \struct CodecEncodeJpegPictureParams 100 //! \brief Picture Parameter Set for JPEG Encode 101 //! 102 struct CodecEncodeJpegPictureParams 103 { 104 uint32_t m_profile : 2; //!< Profile. 0 -Baseline, 1 - Extended, 2 - Lossless, 3 - Hierarchical 105 uint32_t m_progressive : 1; //!< Progressive flag. 1- Progressive, 0 - Sequential 106 uint32_t m_huffman : 1; //!< Huffman flag. 1 - Huffman , 0 - Arithmetic 107 uint32_t m_interleaved : 1; //!< Interleaved flag. 1 - Interleaved, 0 - NonInterleaved 108 uint32_t m_differential : 1; //!< Differential flag. 1 - Differential, 0 - NonDifferential 109 110 uint32_t m_picWidth; //!< Picture Width 111 uint32_t m_picHeight; //!< Picture Height 112 113 uint32_t m_inputSurfaceFormat; //!< Input surface format 114 uint32_t m_sampleBitDepth; //!< Sample bit depth 115 116 uint32_t m_numComponent; //!< Component Number 117 uint8_t m_componentID[4]; //!< Component ID 118 uint8_t m_quantTableSelector[4]; //!< Quant table selector 119 120 uint32_t m_quality; //!< Quality 121 122 uint32_t m_numScan; //!< Scan number 123 uint32_t m_numQuantTable; //!< Quant table number 124 uint32_t m_numCodingTable; //!< Coding table number 125 126 uint32_t m_statusReportFeedbackNumber; //!< Status report feedback number 127 128 }; 129 130 //! 131 //! \struct CodecEncodeJpegScanHeader 132 //! \brief Scan Header structure for JPEG Encode 133 //! 134 struct CodecEncodeJpegScanHeader 135 { 136 uint32_t m_restartInterval; //!< Restart Interval 137 138 uint32_t m_numComponent; //!< Component number 139 uint8_t m_componentSelector[4]; //!< Component selector 140 uint8_t m_dcCodingTblSelector[4]; //!< DC coding table selector 141 uint8_t m_acCodingTblSelector[4]; //!< AC coding table selector 142 143 uint32_t FirstDCTCoeff; 144 uint32_t LastDCTCoeff; 145 uint32_t Ah; 146 uint32_t Al; 147 }; 148 149 // matrix required to read in the quantization matrix 150 static const uint8_t jpeg_qm_scan_8x8[64] = 151 { 152 // Zig-Zag scan pattern 153 0, 1, 8, 16, 9, 2, 3, 10, 154 17, 24, 32, 25, 18, 11, 4, 5, 155 12, 19, 26, 33, 40, 48, 41, 34, 156 27, 20, 13, 6, 7, 14, 21, 28, 157 35, 42, 49, 56, 57, 50, 43, 36, 158 29, 22, 15, 23, 30, 37, 44, 51, 159 58, 59, 52, 45, 38, 31, 39, 46, 160 53, 60, 61, 54, 47, 55, 62, 63 161 }; 162 163 #endif // __CODEC_DEF_ENCODE_JPEG_H__ 164