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