1 /* 2 * Copyright (c) 2020, 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 encode_avc_header_packer.h 24 //! \brief Defines header packing logic for avc encode 25 //! 26 #ifndef __ENCODE_AVC_HEADER_PACKER_H__ 27 #define __ENCODE_AVC_HEADER_PACKER_H__ 28 29 #include "codec_def_encode_avc.h" 30 31 namespace encode 32 { 33 34 class AvcEncodeHeaderPacker 35 { 36 public: 37 38 //! 39 //! \brief AvcEncodeHeaderPacker constructor 40 //! AvcEncodeHeaderPacker()41 AvcEncodeHeaderPacker() {} 42 43 //! 44 //! \brief AvcEncodeHeaderPacker deconstructor 45 //! ~AvcEncodeHeaderPacker()46 virtual ~AvcEncodeHeaderPacker() {} 47 48 //! 49 //! \brief Use to pack picture header related params 50 //! \param [in] params 51 //! picture header pack params 52 //! \return MOS_STATUS 53 //! MOS_STATUS_SUCCESS if success, else fail reason 54 //! 55 static MOS_STATUS PackPictureHeader(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 56 57 static MOS_STATUS PackSliceHeader(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params); 58 59 protected: 60 61 //! 62 //! \brief Pack AUD parameters 63 //! 64 //! \param [in] params 65 //! Pointer to codechal encode Avc pack picture header parameter 66 //! 67 //! \return MOS_STATUS 68 //! Return MOS_STATUS_SUCCESS if call success, else fail reason 69 //! 70 static MOS_STATUS PackAUDParams(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 71 72 //! 73 //! \brief Pack HRD data 74 //! 75 //! \param [in] params 76 //! Pointer to codechal encode Avc pack picture header parameter 77 //! 78 //! \return MOS_STATUS 79 //! Return MOS_STATUS_SUCCESS if call success, else fail reason 80 //! 81 static MOS_STATUS PackHrdParams(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 82 83 //! 84 //! \brief Pack VUI data 85 //! 86 //! \param [in] params 87 //! Pointer to codechal encode Avc pack picture header parameter 88 //! 89 //! \return MOS_STATUS 90 //! Return MOS_STATUS_SUCCESS if call success, else fail reason 91 //! 92 static MOS_STATUS PackVuiParams(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 93 94 //! 95 //! \brief Pack sequence parameters 96 //! 97 //! \param [in] params 98 //! Pointer to codechal encode Avc pack picture header parameter 99 //! 100 //! \return MOS_STATUS 101 //! Return MOS_STATUS_SUCCESS if call success, else fail reason 102 //! 103 static MOS_STATUS PackSeqParams(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 104 105 //! 106 //! \brief Pack picture parameters 107 //! 108 //! \param [in] params 109 //! Pointer to codechal encode Avc pack picture header parameter 110 //! 111 //! \return MOS_STATUS 112 //! Return MOS_STATUS_SUCCESS if call success, else fail reason 113 //! 114 static MOS_STATUS PackPicParams(PCODECHAL_ENCODE_AVC_PACK_PIC_HEADER_PARAMS params); 115 116 static MOS_STATUS RefPicListReordering(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params); 117 118 static MOS_STATUS PredWeightTable(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params); 119 120 static MOS_STATUS MMCO(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params); 121 122 static void SetInitialRefPicList(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params); 123 124 static MOS_STATUS SetRefPicListParam(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params, uint8_t list); 125 126 static void GetPicNum(PCODECHAL_ENCODE_AVC_PACK_SLC_HEADER_PARAMS params, uint8_t list); 127 128 MEDIA_CLASS_DEFINE_END(encode__AvcEncodeHeaderPacker) 129 }; 130 131 } // namespace encode 132 133 #endif // !__ENCODE_AVC_HEADER_PACKER_H__ 134