Home | History | Annotate | Download | only in hwdefs
      1 /*
      2  * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
      3  * Copyright (c) Imagination Technologies Limited, UK
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sub license, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     20  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  */
     25 
     26 #ifndef _COREFLAGS_H_
     27 #define _COREFLAGS_H_
     28 
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 
     35 #define SERIALIZED_PIPES 1
     36 
     37 
     38 #if defined(ENCFMT_H264MVC) || !defined(TOPAZ_MTX_HW)
     39 #	define ENCFMT_H264
     40 #	define _ENABLE_MVC_        /* Defined for enabling MVC specific code */
     41 #	define _MVC_RC_  1         /* Defined for enabling MVC rate control code, later on it will be replaced by _ENABLE_MVC_ */
     42 #endif
     43 
     44 #if defined(RCMODE_ALL) && !defined(ENCFMT_H264)
     45 	#		error "H264 is not defined when RCMODE is ALL."
     46 #endif
     47 
     48 #if defined(RCMODE_ALL) && (defined(ENCFMT_JPEG) || defined(ENCFMT_JPEG) || defined(ENCFMT_JPEG) || defined(ENCFMT_MPG4) || defined(ENCFMT_MPG2) || defined(ENCFMT_H263) || defined(ENCFMT_H264MVC))
     49 	#		error "RCMODE_ALL is only allowed for H264."
     50 #endif
     51 
     52 #if defined(RCMODE_ALL) || !defined(TOPAZ_MTX_HW)
     53 #	define RCMODE_CBR
     54 #	define RCMODE_VBR
     55 #	define RCMODE_VCM
     56 #	define __COREFLAGS_RC_ALLOWED__ 1
     57 #endif
     58 
     59 #define TOPAZHP_MAX_NUM_STREAMS 2
     60 
     61 /*
     62 	Hierarhical B picture support is disabled:
     63 		* for H264 VCM mode, as VCM mode is not expected to use B pictures at all
     64 */
     65 #if  !defined(TOPAZ_MTX_HW) || \
     66 		(defined(ENCFMT_H264) && !(defined(RCMODE_VCM))) \
     67 		|| defined(RCMODE_ALL)
     68 #	define INCLUDE_HIER_SUPPORT	1
     69 #else
     70 #	define INCLUDE_HIER_SUPPORT	0
     71 #endif
     72 
     73 // Add this back in for SEI inclusion
     74 #if !defined(RCMODE_NONE)
     75 #	if  (!defined(TOPAZ_MTX_HW) || ((defined(RCMODE_VBR) || defined(RCMODE_CBR) || defined(RCMODE_VCM) || defined(RCMODE_LLRC)) && defined(ENCFMT_H264)))
     76 #		define SEI_INSERTION 1
     77 #	endif
     78 #endif
     79 
     80 #if	(!defined(TOPAZ_MTX_HW) || defined(ENCFMT_H264))
     81 #	define WEIGHTED_PREDICTION 1
     82 #	define MULTI_REF_P
     83 #	define LONG_TERM_REFS
     84 #	define CUSTOM_QUANTIZATION
     85 #endif
     86 
     87 // Firmware bias table control is not compatible with parallel encoding
     88 //#define FIRMWARE_BIAS
     89 
     90 /* This define controls whether the hard VCM bitrate limit is applied to I frames */
     91 //#define TOPAZHP_IMPOSE_VCM_BITRATE_LIMIT_ON_INTRA
     92 
     93 #if INCLUDE_HIER_SUPPORT
     94 #if ( !defined(TOPAZ_MTX_HW) || !defined(ENCFMT_H264MVC) )
     95 #	define MAX_REF_B_LEVELS_FW	(MAX_REF_B_LEVELS)
     96 #else
     97 #	define MAX_REF_B_LEVELS_FW	2
     98 #endif
     99 #else
    100 #	define MAX_REF_B_LEVELS_FW	0
    101 #endif
    102 
    103 #ifdef MULTI_REF_P
    104 #	define MAX_REF_I_OR_P_LEVELS_FW	(MAX_REF_I_OR_P_LEVELS)
    105 #else
    106 #	define MAX_REF_I_OR_P_LEVELS_FW	2
    107 #endif
    108 
    109 #define MAX_REF_LEVELS_FW	(MAX_REF_B_LEVELS_FW + MAX_REF_I_OR_P_LEVELS_FW)
    110 #define MAX_PIC_NODES_FW	(MAX_REF_LEVELS_FW + 1)
    111 
    112 
    113 #if defined(TOPAZ_MTX_HW)
    114 #	if defined(ENABLE_FORCED_INLINE)
    115 /*
    116 	__attribute__((always_inline)) should be only used when all C code is compiled by
    117 	GCC to a blob object with `-combine` swithch.
    118 */
    119 #		define MTX_INLINE  inline __attribute__((always_inline))
    120 #else
    121 #		define MTX_INLINE  inline
    122 #endif
    123 #else
    124 #	define MTX_INLINE
    125 #endif
    126 
    127 /*
    128 	Check that only one `RCMODE_` symbol is defined.
    129 
    130 	If `RCMODE_NONE` is set, block any possebility for RC sources to be included.
    131 */
    132 
    133 
    134 #if defined(RCMODE_NONE)
    135 #	define __COREFLAGS_RC_ALLOWED__	0
    136 #else
    137 #	define __COREFLAGS_RC_ALLOWED__ 1
    138 #endif
    139 
    140 /*
    141 	Determine possible rate control modes.
    142 */
    143 #if !defined(TOPAZ_MTX_HW)
    144 #	define	CBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    145 #	define  VCM_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    146 #	define  VBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    147 #	define  ERC_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    148 #else
    149 #	if defined(RCMODE_CBR)
    150 #		define	CBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    151 #	else
    152 #		define	CBR_RC_MODE_POSSIBLE	FALSE
    153 #	endif
    154 #	if defined(ENCFMT_H264) && (defined(RCMODE_VCM) || defined(RCMODE_LLRC))
    155 		/* VCM is possible only for H264 */
    156 #		define  VCM_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    157 #	else
    158 #		define	VCM_RC_MODE_POSSIBLE	FALSE
    159 #	endif
    160 #	if defined(RCMODE_VBR)
    161 #		define  VBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    162 #	else
    163 #		define	VBR_RC_MODE_POSSIBLE	FALSE
    164 #	endif
    165 #	if defined(RCMODE_ERC)
    166 #		define  ERC_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
    167 #	else
    168 #		define	ERC_RC_MODE_POSSIBLE	FALSE
    169 #	endif
    170 #endif
    171 
    172 
    173 #define RATE_CONTROL_AVAILABLE (\
    174 		CBR_RC_MODE_POSSIBLE || VCM_RC_MODE_POSSIBLE || \
    175 		VBR_RC_MODE_POSSIBLE || ERC_RC_MODE_POSSIBLE\
    176 	)
    177 #define RC_MODE_POSSIBLE(MODE) (MODE ## _RC_MODE_POSSIBLE)
    178 
    179 #define RC_MODES_POSSIBLE2(M1, M2) \
    180 	(RC_MODE_POSSIBLE(M1) || RC_MODE_POSSIBLE(M2))
    181 
    182 #define RC_MODES_POSSIBLE3(M1, M2, M3) \
    183 	(RC_MODES_POSSIBLE2(M1, M2) || RC_MODE_POSSIBLE(M3))
    184 
    185 /*
    186 	Declare `CUR_ENCODE_RC_MODE` as proper function only in FAKE_MTX.
    187 	Alternatively, declare it as constant.
    188 */
    189 #if defined(FAKE_MTX) || defined(RCMODE_ALL)
    190 #	define	CUR_ENCODE_RC_MODE (GLOBALS(g_sEncContext).eRCMode)
    191 #elif defined(RCMODE_NONE)
    192 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_NONE)
    193 #elif defined(RCMODE_CBR)
    194 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_CBR)
    195 #elif defined(RCMODE_VBR)
    196 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_VBR)
    197 #elif defined(RCMODE_ERC)
    198 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_ERC)
    199 #elif defined(RCMODE_LLRC)
    200 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_LLRC)
    201 #elif defined(RCMODE_VCM)
    202 #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_VCM)
    203 #endif
    204 
    205 
    206 #define USE_VCM_HW_SUPPORT 1
    207 
    208 #define INPUT_SCALER_SUPPORTED 0	/* controls the firmwares ability to support the optional hardware input scaler */
    209 
    210 #define SECURE_MODE_POSSIBLE 1		/* controls the firmwares ability to support secure mode firmware upload */
    211 
    212 #endif  // #ifndef _COREFLAGS_H_
    213