1 /*
2 * Copyright (c) 2019-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 //!
24 //! \file     vp_scalability_option.h
25 //! \brief    Defines the vp scalability option
26 
27 #ifndef __VP_SCALABILITY_OPTION_H__
28 #define __VP_SCALABILITY_OPTION_H__
29 
30 #include <stdint.h>
31 #include "mos_defs.h"
32 #include "media_scalability_option.h"
33 #include "media_class_trace.h"
34 
35 struct ScalabilityPars;
36 
37 namespace vp {
38 class VpScalabilityOption : public MediaScalabilityOption
39 {
40 public:
41     //!
42     //! \brief  Encode scalability mulitipipe copy constructor
43     //! \param  [in] pOption
44     //!         Pointer to input scalability option
45     //!
VpScalabilityOption()46     VpScalabilityOption() {};
47 
48     //!
49     //! \brief  Encode scalability mulitipipe copy constructor
50     //! \param  [in] pOption
51     //!         Pointer to input scalability option
52     //!
53     VpScalabilityOption(const VpScalabilityOption &pOption);
54 
55     //!
56     //! \brief  Encode scalability option destructor
57     //
~VpScalabilityOption()58     ~VpScalabilityOption() {};
59 
60     //!
61     //! \brief  Set scalability option
62     //! \param  [in] params
63     //!         Pointer to the input parameters to set scalability option
64     //! \return MOS_STATUS
65     //!         MOS_STATUS_SUCCESS if success, else fail reason
66     //!
67     virtual MOS_STATUS SetScalabilityOption(ScalabilityPars *params);
68     //!
69     //! \brief  check if scalability option matched with current option
70     //! \param  [in] params
71     //!         Pointer to the input parameters for compare
72     //! \return MOS_STATUS
73     //!         MOS_STATUS_SUCCESS if success, else fail reason
74     //!
75     virtual bool IsScalabilityOptionMatched(ScalabilityPars *params);
76 
77     //!
78     //! \brief  check if SFC flag is set
79     //! \return bool
80     //!         Ture for using SFC
81     //!
IsUsingSFC()82     bool IsUsingSFC() { return m_usingSFC; };
83 
84     //! \brief  Get LRCA count
85     //! \return uint32_t
86     //!         Return LRCA count
87     //!
88     uint32_t GetLRCACount();
89 
90     //! \brief  Get max pipe number of multipe pipe mode
91     //! \return uint8_t
92     //!         Return decode scalability mode
93     //!
GetMaxMultiPipeNum()94     uint8_t GetMaxMultiPipeNum() { return m_maxNumMultiPipe; }
95 
96     bool m_usingSFC = false;
97 
98     uint8_t m_typicalNumMultiPipe = 2;
99     uint8_t m_maxNumMultiPipe     = 2;
100 
101 MEDIA_CLASS_DEFINE_END(vp__VpScalabilityOption)
102 };
103 }
104 #endif // !__VP_SCALABILITY_OPTION_H__
105