1 /* 2 This file is provided under a dual BSD/GPLv2 license. When using or 3 redistributing this file, you may do so under either license. 4 5 GPL LICENSE SUMMARY 6 7 Copyright(c) 2007-2009 Intel Corporation. All rights reserved. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of version 2 of the GNU General Public License as 11 published by the Free Software Foundation. 12 13 This program is distributed in the hope that it will be useful, but 14 WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21 The full GNU General Public License is included in this distribution 22 in the file called LICENSE.GPL. 23 24 Contact Information: 25 26 BSD LICENSE 27 28 Copyright(c) 2007-2009 Intel Corporation. All rights reserved. 29 All rights reserved. 30 31 Redistribution and use in source and binary forms, with or without 32 modification, are permitted provided that the following conditions 33 are met: 34 35 * Redistributions of source code must retain the above copyright 36 notice, this list of conditions and the following disclaimer. 37 * Redistributions in binary form must reproduce the above copyright 38 notice, this list of conditions and the following disclaimer in 39 the documentation and/or other materials provided with the 40 distribution. 41 * Neither the name of Intel Corporation nor the names of its 42 contributors may be used to endorse or promote products derived 43 from this software without specific prior written permission. 44 45 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 46 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 47 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 48 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 49 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 50 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 51 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 52 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 53 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 54 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 55 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 56 57 */ 58 #ifndef VIDDEC_FW_ITEM_TYPES_H 59 #define VIDDEC_FW_ITEM_TYPES_H 60 61 62 /* The following macros are defined to pack data into 32 bit words. 63 mask: A 32 bit value of N 1 bits starting from lsb where N represents the length of data we are packing. 64 start: Bit start position of data we want. 65 ex: If we want to pack Height(16bits), width(16bits) where width is from (1:16) and height is from (17:32), these are 66 the start and mask values for width and height. 67 width: start = 0 mask=0xFFFF 68 Height:start= 16 mask=0xFFFF 69 70 extract: will extract data from x_32 of unsigned integer type from bit start offset(0 to 31) of length based on mask and returns in 71 unsigned integer type. 72 insert: Will insert N bits from val_32 ,where N is length based on mask, into x_32 from bit offset based on start. val_32 is expected to 73 be a unsigned int of N bits starting with lsb. 74 */ 75 76 #define viddec_fw_bitfields_extract(x_32, start, mask) (((x_32) >> (start)) & (mask) ) 77 #define viddec_fw_bitfields_insert(x_32, val_32, start, mask) ((x_32) = (((x_32) & ~( (mask) << (start))) | (((val_32) & (mask)) << (start)))) 78 79 /* Workload items type. Each item here represents data that Parser detected ex:slice data which 80 is used either by host or decoder.*/ 81 enum workload_item_type 82 { 83 VIDDEC_WORKLOAD_INVALID=0x0, /* Unknown type */ 84 VIDDEC_WORKLOAD_PIXEL_ES=0x100, /* Slice data tag */ 85 VIDDEC_WORKLOAD_TAG=0x200, /* Frame association tag */ 86 VIDDEC_WORKLOAD_USERDATA=0x300, /* user data tag */ 87 VIDDEC_WORKLOAD_DECODER_INFO=0x400, /* decoder specific data tag which decoder module understands*/ 88 VIDDEC_WORKLOAD_IBUF_DONE=0x500, /* Es buffer completely used tag */ 89 VIDDEC_WORKLOAD_IBUF_CONTINUED=0x600, /* Es buffer partially used tag */ 90 VIDDEC_WORKLOAD_TAG_BUFFER_LOOSE_START=0x700, /* ??? */ 91 VIDDEC_WORKLOAD_REFERENCE_FRAME_REORDER=0x800, /* Reorder frames in DPB tag */ 92 VIDDEC_WORKLOAD_DISPLAY_FRAME=0x900, /* Display order in DPB tag, for H264 NOT required??? */ 93 94 VIDDEC_WORKLOAD_SEQUENCE_INFO=0xa00, /* MPEG2 Seq Hdr, H264 SPS, VC1 SeqLayer */ 95 VIDDEC_WORKLOAD_DISPLAY_INFO=0xb00, /* MPEG2 Seq Disp Ext, H264 VUI */ 96 VIDDEC_WORKLOAD_GOP_INFO=0xc00, /* MPEG2 GOP, VC1 Entrypoint */ 97 VIDDEC_WORKLOAD_SEQ_USER_DATA=0xd00, /* MPEG2, VC1 Sequence Level User data */ 98 VIDDEC_WORKLOAD_GOP_USER_DATA=0xe00, /* MPEG2, VC1 Gop Level User data */ 99 VIDDEC_WORKLOAD_FRM_USER_DATA=0xf00, /* MPEG2 Picture User data, VC1 Frame User data */ 100 VIDDEC_WORKLOAD_FLD_USER_DATA=0x1000, /* MPEG2, VC1 Field User data */ 101 VIDDEC_WORKLOAD_SLC_USER_DATA=0x1100, /* VC1 Slice User data */ 102 VIDDEC_WORKLOAD_VISUAL_OBJ_USER_DATA=0x1200, /* MPEG4 Visual Object User data */ 103 VIDDEC_WORKLOAD_VIDEO_OBJ_USER_DATA=0x1300, /* MPEG4 Video Object Layer User data */ 104 105 VIDDEC_WORKLOAD_MPEG2_SEQ_EXT=0x1150, /* MPEG2 Only - Sequence Extension */ 106 VIDDEC_WORKLOAD_VC1_SEQ_HDR_STRUCT_A_C=0x1200, /* VC1 Only */ 107 108 VIDDEC_WORKLOAD_H264_CROPPING=0x1400, /* H264 only */ 109 VIDDEC_WORKLOAD_H264_PAN_SCAN=0x1500, /* H264 only */ 110 VIDDEC_WORKLOAD_H264_VUI_TIMING_INFO=0x2100, /* H264 only */ 111 VIDDEC_WORKLOAD_SEI_PIC_TIMING=0x1600, /* H264 only */ 112 VIDDEC_WORKLOAD_SEI_PAN_SCAN_RECT=0x1700, /* H264 only */ 113 VIDDEC_WORKLOAD_SEI_USER_DATA_REGISTERED=0x1800, /* H264 only */ 114 VIDDEC_WORKLOAD_SEI_USER_DATA_UNREGISTERED=0x1900, /* H264 only */ 115 VIDDEC_WORKLOAD_SEI_RECOVERY_POINT=0x1a00, /* H264 only */ 116 VIDDEC_WORKLOAD_IBUF_EOS=0x1b00, /* EOS tag on last workload used for current stream */ 117 VIDDEC_WORKLOAD_IBUF_DISCONTINUITY=0x1c00, /* Discontinuity tag on first workload after discontinuity */ 118 119 VIDDEC_WORKLOAD_MPEG4_VISUAL_SEQ_OBJ=0x1d00, /* MPEG4 Only - Visual Sequence */ 120 VIDDEC_WORKLOAD_MPEG4_VIDEO_OBJ=0x1e00, /* MPEG4 Only - Video Object Layer */ 121 VIDDEC_WORKLOAD_MPEG4_GRP_VIDEO_OBJ=0x1f00, /* MPEG4 Only - Group of Video Object Planes */ 122 VIDDEC_WORKLOAD_MPEG4_VIDEO_PLANE_SHORT=0x2000, /* MPEG4 Only - Video Plane with Short Header */ 123 124 VIDDEC_WORKLOAD_REF_FRAME_SOURCE_0 = 0x10000, /* required reference frames tag, last eight bits tell the id of frame in dpb */ 125 VIDDEC_WORKLOAD_REF_FRAME_RELEASE_0 = 0x20000, /* release frames tag, last eight bits tell the id of frame in dpb */ 126 VIDDEC_WORKLOAD_REF_FRAME_DISPLAY_0 = 0x30000, /* Display order in DPB tag, for H264 */ 127 VIDDEC_WORKLOAD_REF_FRAME_DROPOUT_0 = 0x40000, /* Release frames but not display, for H264 */ 128 VIDDEC_WORKLOAD_EOS_RELEASE_FRAME_0 = 0x50000, /* Release list while EOS, last eight bits tell the id of frame in dpb */ 129 VIDDEC_WORKLOAD_EOS_DISPLAY_FRAME_0 = 0x60000, /* Diaplay list while EOS, last eight bits tell the id of frame in dpb */ 130 131 VIDDEC_WORKLOAD_DPB_ACTIVE_FRAME_0 = 0x70000, /* required for H264 as it needs whole DPB for each frame */ 132 VIDDEC_WORKLOAD_H264_REFR_LIST_0 = 0x80000, /* ref list 0 for H264 */ 133 VIDDEC_WORKLOAD_H264_REFR_LIST_1 = 0x90000, /* ref list 1 for H264 */ 134 VIDDEC_WORKLOAD_EOS_BEGIN_BOUNDARY = 0xa0000, /* eos items begin after this */ 135 VIDDEC_WORKLOAD_DECODER_SPECIFIC = 0x100000, /* pvt info for decoder tags */ 136 VIDDEC_WORKLOAD_MAX, 137 }; 138 139 /* 16-byte workload */ 140 typedef struct viddec_workload_item 141 { 142 enum workload_item_type vwi_type; 143 union 144 { 145 struct 146 { 147 unsigned int es_phys_addr; 148 unsigned int es_phys_len; 149 unsigned int es_flags; 150 }es; 151 struct 152 { 153 unsigned int tag_phys_addr; 154 unsigned int tag_phys_len; 155 unsigned int tag_value; 156 }tag; 157 struct 158 { 159 unsigned int data_offset; 160 unsigned int data_payload[2]; 161 }data; 162 struct 163 { 164 signed int reference_id; /* Assigned by parser */ 165 unsigned int luma_phys_addr; /* assigned by host, for DM */ 166 unsigned int chroma_phys_addr; /* assigned by host, for DM */ 167 }ref_frame; 168 struct /* when vwi_type == VIDDEC_WORKLOAD_REFERENCE_FRAME_REORDER */ 169 { 170 signed int ref_table_offset; /* Index of first "reordered" */ 171 /* index from Current[] for Next[offset+0], Ref[offset+1], Ref[offset+2], Ref[offset+3] */ 172 unsigned int ref_reorder_00010203; 173 /* index from Current[] for Next[offset+4], Ref[offset+5], Ref[offset+6], Ref[offset+7] */ 174 unsigned int ref_reorder_04050607; 175 } ref_reorder; 176 struct 177 { 178 /* we pack a maximum of 11 bytes of user data and 1 byte for size */ 179 /* TODO: we can pack 12 bytes and use bottom 8 bits of type to indicate size */ 180 #define viddec_fw_get_user_data_size(x) ((x)->user_data.size) 181 #define viddec_fw_get_user_data(x) (unsigned char *)&((x)->user_data.data_payload[0]) 182 unsigned char size; 183 unsigned char data_payload[11]; 184 /* 185 ITEM TYPES WHICH use this: 186 VIDDEC_WORKLOAD_SEI_USER_DATA_UNREGISTERED, VIDDEC_WORKLOAD_SEI_USER_DATA_REGISTERED, 187 VIDDEC_WORKLOAD_SEQ_USER_DATA, VIDDEC_WORKLOAD_GOP_USER_DATA, 188 VIDDEC_WORKLOAD_FRM_USER_DATA, VIDDEC_WORKLOAD_FLD_USER_DATA, VIDDEC_WORKLOAD_SLC_USER_DATA, 189 */ 190 }user_data; 191 struct 192 { 193 // Sequence Header Item I (From LSB): 194 // - horizontal_size_value - 12 bits 195 // - vertical_size_value - 12 bits 196 // - aspect_ratio_information - 4 bits 197 // - frame_rate_code - 4 bits 198 #define viddec_fw_mp2_sh_get_horizontal_size_value(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_1, 0, 0xFFF) 199 #define viddec_fw_mp2_sh_get_vertical_size_value(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_1, 12, 0xFFF) 200 #define viddec_fw_mp2_sh_get_aspect_ratio_information(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_1, 24, 0xF) 201 #define viddec_fw_mp2_sh_get_frame_rate_code(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_1, 28, 0xF) 202 #define viddec_fw_mp2_sh_set_horizontal_size_value(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_1, val, 0, 0xFFF) 203 #define viddec_fw_mp2_sh_set_vertical_size_value(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_1, val, 12, 0xFFF) 204 #define viddec_fw_mp2_sh_set_aspect_ratio_information(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_1, val, 24, 0xF) 205 #define viddec_fw_mp2_sh_set_frame_rate_code(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_1, val, 28, 0xF) 206 unsigned int seq_hdr_item_1; 207 208 // Sequence Header Item II (From LSB): 209 // - bit_rate_value - 18 bits 210 // - vbv_buffer_size_value - 10 bits 211 // - remaining pad bits 212 #define viddec_fw_mp2_sh_get_bit_rate_value(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_2, 0, 0x3FFFF) 213 #define viddec_fw_mp2_sh_get_vbv_buffer_size_value(x) viddec_fw_bitfields_extract( (x)->seq_hdr_item_2, 18, 0x3FF) 214 #define viddec_fw_mp2_sh_set_bit_rate_value(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_2, val, 0, 0x3FFFF) 215 #define viddec_fw_mp2_sh_set_vbv_buffer_size_value(x, val) viddec_fw_bitfields_insert ( (x)->seq_hdr_item_2, val, 18, 0x3FF) 216 unsigned int seq_hdr_item_2; 217 218 unsigned int pad; 219 } mp2_sh; // mp2 item of type VIDDEC_WORKLOAD_SEQUENCE_INFO 220 struct 221 { 222 // Sequence Extension Item I (From LSB): 223 // - profile_and_level_indication - 8 bits 224 // - progressive_sequence - 1 bit 225 // - chroma_format - 2 bits 226 // - horizontal_size_extension - 2 bits 227 // - vertical_size_extension - 2 bits 228 // - bit_rate_extension - 12 bits 229 // - remaining pad bits 230 #define viddec_fw_mp2_se_get_profile_and_level_indication(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 0, 0xFF) 231 #define viddec_fw_mp2_se_get_progressive_sequence(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 8, 0x1) 232 #define viddec_fw_mp2_se_get_chroma_format(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 9, 0x3) 233 #define viddec_fw_mp2_se_get_horizontal_size_extension(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 11, 0x3) 234 #define viddec_fw_mp2_se_get_vertical_size_extension(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 13, 0x3) 235 #define viddec_fw_mp2_se_get_bit_rate_extension(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_1, 15, 0xFFF) 236 #define viddec_fw_mp2_se_set_profile_and_level_indication(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 0, 0xFF) 237 #define viddec_fw_mp2_se_set_progressive_sequence(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 8, 0x1) 238 #define viddec_fw_mp2_se_set_chroma_format(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 9, 0x3) 239 #define viddec_fw_mp2_se_set_horizontal_size_extension(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 11, 0x3) 240 #define viddec_fw_mp2_se_set_vertical_size_extension(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 13, 0x3) 241 #define viddec_fw_mp2_se_set_bit_rate_extension(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_1, val, 15, 0xFFF) 242 unsigned int seq_ext_item_1; 243 244 // Sequence Extension Item II (From LSB): 245 // - vbv_buffer_size_extension - 8 bits 246 // - frame_rate_extension_n - 2 bits 247 // - frame_rate_extension_d - 5 bits 248 // - remaining pad bits 249 #define viddec_fw_mp2_se_get_vbv_buffer_size_extension(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_2, 0, 0xFF) 250 #define viddec_fw_mp2_se_get_frame_rate_extension_n(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_2, 8, 0x3) 251 #define viddec_fw_mp2_se_get_frame_rate_extension_d(x) viddec_fw_bitfields_extract( (x)->seq_ext_item_2, 10, 0x1F) 252 #define viddec_fw_mp2_se_set_vbv_buffer_size_extension(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_2, val, 0, 0xFF) 253 #define viddec_fw_mp2_se_set_frame_rate_extension_n(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_2, val, 8, 0x3) 254 #define viddec_fw_mp2_se_set_frame_rate_extension_d(x, val) viddec_fw_bitfields_insert ( (x)->seq_ext_item_2, val, 10, 0x1F) 255 unsigned int seq_ext_item_2; 256 257 unsigned int pad; 258 } mp2_se; // mp2 item of type VIDDEC_WORKLOAD_MPEG2_SEQ_EXT 259 struct 260 { 261 // Sequence Display Extension Item I (From LSB): 262 // - display_horizontal_size - 14 bits 263 // - display_vertical_size - 14 bits 264 // - video_format - 3 bits 265 // - color_description - 1 bit 266 #define viddec_fw_mp2_sde_get_display_horizontal_size(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_1, 0, 0x3FFF) 267 #define viddec_fw_mp2_sde_get_display_vertical_size(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_1, 14, 0x3FFF) 268 #define viddec_fw_mp2_sde_get_video_format(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_1, 28, 0x7) 269 #define viddec_fw_mp2_sde_get_color_description(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_1, 31, 0x1) 270 #define viddec_fw_mp2_sde_set_display_horizontal_size(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_1, val, 0, 0x3FFF) 271 #define viddec_fw_mp2_sde_set_display_vertical_size(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_1, val, 14, 0x3FFF) 272 #define viddec_fw_mp2_sde_set_video_format(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_1, val, 28, 0x7) 273 #define viddec_fw_mp2_sde_set_color_description(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_1, val, 31, 0x1) 274 unsigned int seq_disp_ext_item_1; 275 276 // Sequence Display Extension II (From LSB): 277 // - color_primaries - 8 bits 278 // - transfer_characteristics - 8 bits 279 // - remaining pad bits 280 #define viddec_fw_mp2_sde_get_color_primaries(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_2, 0, 0xFF) 281 #define viddec_fw_mp2_sde_get_transfer_characteristics(x) viddec_fw_bitfields_extract( (x)->seq_disp_ext_item_2, 8, 0xFF) 282 #define viddec_fw_mp2_sde_set_color_primaries(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_2, val, 0, 0xFF) 283 #define viddec_fw_mp2_sde_set_transfer_characteristics(x, val) viddec_fw_bitfields_insert ( (x)->seq_disp_ext_item_2, val, 8, 0xFF) 284 unsigned int seq_disp_ext_item_2; 285 286 unsigned int pad; 287 } mp2_sde; // mp2 item of type VIDDEC_WORKLOAD_DISPLAY_INFO 288 struct 289 { 290 // Group of Pictures Header Item I (From LSB): 291 // - closed_gop - 1 bit 292 // - broken_link - 1 bit 293 // - remaining pad bits 294 #define viddec_fw_mp2_gop_get_closed_gop(x) viddec_fw_bitfields_extract( (x)->gop_hdr_item_1, 0, 0x1) 295 #define viddec_fw_mp2_gop_get_broken_link(x) viddec_fw_bitfields_extract( (x)->gop_hdr_item_1, 1, 0x1) 296 #define viddec_fw_mp2_gop_set_closed_gop(x, val) viddec_fw_bitfields_insert ( (x)->gop_hdr_item_1, val, 0, 0x1) 297 #define viddec_fw_mp2_gop_set_broken_link(x, val) viddec_fw_bitfields_insert ( (x)->gop_hdr_item_1, val, 1, 0x1) 298 unsigned int gop_hdr_item_1; 299 300 unsigned int pad1; 301 unsigned int pad2; 302 } mp2_gop; // mp2 item of type VIDDEC_WORKLOAD_GOP_INFO 303 struct 304 { 305 #define viddec_fw_vc1_get_profile(x) viddec_fw_bitfields_extract((x)->size, 30, 0x3) 306 #define viddec_fw_vc1_set_profile(x, val) viddec_fw_bitfields_insert((x)->size, val, 30, 0x3) 307 308 #define viddec_fw_vc1_get_level(x) viddec_fw_bitfields_extract((x)->size, 27, 0x7) 309 #define viddec_fw_vc1_set_level(x, val) viddec_fw_bitfields_insert((x)->size, val, 27, 0x7) 310 311 #define viddec_fw_vc1_get_colordiff_format(x) viddec_fw_bitfields_extract((x)->size, 25, 0x3) 312 #define viddec_fw_vc1_set_colordiff_format(x, val) viddec_fw_bitfields_insert((x)->size, val, 25, 0x3) 313 314 #define viddec_fw_vc1_get_pulldown(x) viddec_fw_bitfields_extract((x)->size, 24, 0x1) 315 #define viddec_fw_vc1_set_pulldown(x, val) viddec_fw_bitfields_insert((x)->size, val, 24, 0x1) 316 317 #define viddec_fw_vc1_get_max_coded_width(x) viddec_fw_bitfields_extract((x)->size, 12, 0xFFF) 318 #define viddec_fw_vc1_set_max_coded_width(x, val) viddec_fw_bitfields_insert((x)->size, val, 12, 0xFFF) 319 320 #define viddec_fw_vc1_get_max_coded_height(x) viddec_fw_bitfields_extract((x)->size, 0, 0xFFF) 321 #define viddec_fw_vc1_set_max_coded_height(x, val) viddec_fw_bitfields_insert((x)->size, val, 0, 0xFFF) 322 323 #define viddec_fw_vc1_get_bitrtq_postproc(x) viddec_fw_bitfields_extract((x)->flags, 8, 0x1F) 324 #define viddec_fw_vc1_set_bitrtq_postproc(x, val) viddec_fw_bitfields_insert((x)->flags, val, 8, 0x1F) 325 326 #define viddec_fw_vc1_get_frmrtq_postproc(x) viddec_fw_bitfields_extract((x)->flags, 5, 0x7) 327 #define viddec_fw_vc1_set_frmrtq_postproc(x, val) viddec_fw_bitfields_insert((x)->flags, val, 5, 0x7) 328 329 #define viddec_fw_vc1_get_interlace(x) viddec_fw_bitfields_extract((x)->flags, 4, 0x1) 330 #define viddec_fw_vc1_set_interlace(x, val) viddec_fw_bitfields_insert((x)->flags, val, 4, 0x1) 331 332 #define viddec_fw_vc1_get_tfcntrflag(x) viddec_fw_bitfields_extract((x)->flags, 3, 0x1) 333 #define viddec_fw_vc1_set_tfcntrflag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 3, 0x1) 334 335 #define viddec_fw_vc1_get_finterpflag(x) viddec_fw_bitfields_extract((x)->flags, 2, 0x1) 336 #define viddec_fw_vc1_set_finterpflag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 2, 0x1) 337 338 #define viddec_fw_vc1_get_psf(x) viddec_fw_bitfields_extract((x)->flags, 1, 0x1) 339 #define viddec_fw_vc1_set_psf(x, val) viddec_fw_bitfields_insert((x)->flags, val, 1, 0x1) 340 341 #define viddec_fw_vc1_get_display_ext(x) viddec_fw_bitfields_extract((x)->flags, 0, 0x1) 342 #define viddec_fw_vc1_set_display_ext(x, val) viddec_fw_bitfields_insert((x)->flags, val, 0, 0x1) 343 344 uint32_t size; // profile:2, level:3, colordiff_format:2, pulldown:1, max_coded_width:12, max_coded_height:12 345 uint32_t flags; // bitrtq_postproc:5, frmrtq_postproc:3, interlace:1, tfcntrflag:1, finterpflag:1, psf:1, display_ext:1 346 uint32_t pad; 347 } vc1_sl; // vc1 item of type VIDDEC_WORKLOAD_SEQUENCE_INFO 348 struct 349 { 350 // This item is populated when display_ext flag is set in the sequence layer 351 // therefore, no need to provide this flag 352 #define viddec_fw_vc1_get_disp_horiz_size(x) viddec_fw_bitfields_extract((x)->size, 18, 0x3FFF) 353 #define viddec_fw_vc1_set_disp_horiz_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 18, 0x3FFF) 354 355 #define viddec_fw_vc1_get_disp_vert_size(x) viddec_fw_bitfields_extract((x)->size, 4, 0x3FFF) 356 #define viddec_fw_vc1_set_disp_vert_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 4, 0x3FFF) 357 358 #define viddec_fw_vc1_get_disp_aspect_ratio_flag(x) viddec_fw_bitfields_extract((x)->size, 3, 0x1) 359 #define viddec_fw_vc1_set_disp_aspect_ratio_flag(x, val) viddec_fw_bitfields_insert((x)->size, val, 3, 0x1) 360 361 #define viddec_fw_vc1_get_disp_color_format_flag(x) viddec_fw_bitfields_extract((x)->size, 2, 0x1) 362 #define viddec_fw_vc1_set_disp_color_format_flag(x, val) viddec_fw_bitfields_insert((x)->size, val, 2, 0x1) 363 364 #define viddec_fw_vc1_get_disp_framerate_flag(x) viddec_fw_bitfields_extract((x)->size, 1, 0x1) 365 #define viddec_fw_vc1_set_disp_framerate_flag(x, val) viddec_fw_bitfields_insert((x)->size, val, 1, 0x1) 366 367 #define viddec_fw_vc1_get_disp_framerateind(x) viddec_fw_bitfields_extract((x)->size, 0, 0x1) 368 #define viddec_fw_vc1_set_disp_framerateind(x, val) viddec_fw_bitfields_insert((x)->size, val, 0, 0x1) 369 370 #define viddec_fw_vc1_get_disp_aspect_ratio(x) viddec_fw_bitfields_extract((x)->framerate, 28, 0xF) 371 #define viddec_fw_vc1_set_disp_aspect_ratio(x, val) viddec_fw_bitfields_insert((x)->framerate, val, 28, 0xF) 372 373 #define viddec_fw_vc1_get_disp_frameratenr(x) viddec_fw_bitfields_extract((x)->framerate, 20, 0xFF) 374 #define viddec_fw_vc1_set_disp_frameratenr(x, val) viddec_fw_bitfields_insert((x)->framerate, val, 20, 0xFF) 375 376 #define viddec_fw_vc1_get_disp_frameratedr(x) viddec_fw_bitfields_extract((x)->framerate, 16, 0xF) 377 #define viddec_fw_vc1_set_disp_frameratedr(x, val) viddec_fw_bitfields_insert((x)->framerate, val, 16, 0xF) 378 379 #define viddec_fw_vc1_get_disp_framerateexp(x) viddec_fw_bitfields_extract((x)->framerate, 0, 0xFFFF) 380 #define viddec_fw_vc1_set_disp_framerateexp(x, val) viddec_fw_bitfields_insert((x)->framerate, val, 0, 0xFFFF) 381 382 #define viddec_fw_vc1_get_disp_aspect_ratio_horiz_size(x) viddec_fw_bitfields_extract((x)->aspectsize, 24, 0xFF) 383 #define viddec_fw_vc1_set_disp_aspect_ratio_horiz_size(x, val) viddec_fw_bitfields_insert((x)->aspectsize, val, 24, 0xFF) 384 385 #define viddec_fw_vc1_get_disp_aspect_ratio_vert_size(x) viddec_fw_bitfields_extract((x)->aspectsize, 16, 0xFF) 386 #define viddec_fw_vc1_set_disp_aspect_ratio_vert_size(x, val) viddec_fw_bitfields_insert((x)->aspectsize, val, 16, 0xFF) 387 388 #define viddec_fw_vc1_get_disp_color_prim(x) viddec_fw_bitfields_extract((x)->aspectsize, 8, 0xFF) 389 #define viddec_fw_vc1_set_disp_color_prim(x, val) viddec_fw_bitfields_insert((x)->aspectsize, val, 8, 0xFF) 390 391 #define viddec_fw_vc1_get_disp_transfer_char(x) viddec_fw_bitfields_extract((x)->aspectsize, 0, 0xFF) 392 #define viddec_fw_vc1_set_disp_transfer_char(x, val) viddec_fw_bitfields_insert((x)->aspectsize, val, 0, 0xFF) 393 394 uint32_t size; // disp_horiz_size:14, disp_vert_size:14, aspect_ratio_flag:1, color_format_flag:1, framerate_flag:1, framerateind:1 395 uint32_t framerate; // aspect_ratio:4, frameratenr:8, frameratedr:4, framerateexp:16 396 uint32_t aspectsize; // aspect_ratio_horiz_size:8, aspect_ratio_vert_size:8, color_prim:8, transfer_char:8 397 } vc1_sl_de; // vc1 item of type VIDDEC_WORKLOAD_DISPLAY_INFO 398 struct 399 { 400 #define viddec_fw_vc1_get_rcv_horiz_size(x) viddec_fw_bitfields_extract((x)->size, 16, 0xFFFF) 401 #define viddec_fw_vc1_set_rcv_horiz_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 16, 0xFFFF) 402 403 #define viddec_fw_vc1_get_rcv_vert_size(x) viddec_fw_bitfields_extract((x)->size, 0, 0xFFFF) 404 #define viddec_fw_vc1_set_rcv_vert_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 0, 0xFFFF) 405 406 #define viddec_fw_vc1_get_rcv_bitrtq_postproc(x) viddec_fw_bitfields_extract((x)->flags, 16, 0x1F) 407 #define viddec_fw_vc1_set_rcv_bitrtq_postproc(x, val) viddec_fw_bitfields_insert((x)->flags, val, 16, 0x1F) 408 409 #define viddec_fw_vc1_get_rcv_frmrtq_postproc(x) viddec_fw_bitfields_extract((x)->flags, 13, 0x7) 410 #define viddec_fw_vc1_set_rcv_frmrtq_postproc(x, val) viddec_fw_bitfields_insert((x)->flags, val, 13, 0x7) 411 412 #define viddec_fw_vc1_get_rcv_profile(x) viddec_fw_bitfields_extract((x)->flags, 9, 0xF) 413 #define viddec_fw_vc1_set_rcv_profile(x, val) viddec_fw_bitfields_insert((x)->flags, val, 9, 0xF) 414 415 #define viddec_fw_vc1_get_rcv_level(x) viddec_fw_bitfields_extract((x)->flags, 6, 0x7) 416 #define viddec_fw_vc1_set_rcv_level(x, val) viddec_fw_bitfields_insert((x)->flags, val, 6, 0x7) 417 418 #define viddec_fw_vc1_get_rcv_cbr(x) viddec_fw_bitfields_extract((x)->flags, 5, 0x1) 419 #define viddec_fw_vc1_set_rcv_cbr(x, val) viddec_fw_bitfields_insert((x)->flags, val, 5, 0x1) 420 421 #define viddec_fw_vc1_get_rcv_rangered(x) viddec_fw_bitfields_extract((x)->flags, 4, 0x1) 422 #define viddec_fw_vc1_set_rcv_rangered(x, val) viddec_fw_bitfields_insert((x)->flags, val, 4, 0x1) 423 424 #define viddec_fw_vc1_get_rcv_maxbframes(x) viddec_fw_bitfields_extract((x)->flags, 1, 0x7) 425 #define viddec_fw_vc1_set_rcv_maxbframes(x, val) viddec_fw_bitfields_insert((x)->flags, val, 1, 0x7) 426 427 #define viddec_fw_vc1_get_rcv_finterpflag(x) viddec_fw_bitfields_extract((x)->flags, 0, 0x1) 428 #define viddec_fw_vc1_set_rcv_finterpflag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 0, 0x1) 429 430 uint32_t size; // horiz_size:16, vert_size:16 431 uint32_t flags; // bitrtq_postproc:5, frmrtq_postproc:3, profile:4, level:3, cbr:1, rangered:1, maxbframes:3, finterpflag:1 432 uint32_t pad; 433 } vc1_sh_struct_a_c; // vc1 item of type VIDDEC_WORKLOAD_VC1_SEQ_HDR_STRUCT_A_C 434 struct 435 { 436 #define viddec_fw_vc1_get_ep_size_flag(x) viddec_fw_bitfields_extract((x)->size, 24, 0x1) 437 #define viddec_fw_vc1_set_ep_size_flag(x, val) viddec_fw_bitfields_insert((x)->size, val, 24, 0x1) 438 439 #define viddec_fw_vc1_get_ep_horiz_size(x) viddec_fw_bitfields_extract((x)->size, 12, 0xFFF) 440 #define viddec_fw_vc1_set_ep_horiz_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 12, 0xFFF) 441 442 #define viddec_fw_vc1_get_ep_vert_size(x) viddec_fw_bitfields_extract((x)->size, 0, 0xFFF) 443 #define viddec_fw_vc1_set_ep_vert_size(x, val) viddec_fw_bitfields_insert((x)->size, val, 0, 0xFFF) 444 445 #define viddec_fw_vc1_get_ep_broken_link(x) viddec_fw_bitfields_extract((x)->flags, 10, 0x1) 446 #define viddec_fw_vc1_set_ep_broken_link(x, val) viddec_fw_bitfields_insert((x)->flags, val, 10, 0x1) 447 448 #define viddec_fw_vc1_get_ep_closed_entry(x) viddec_fw_bitfields_extract((x)->flags, 9, 0x1) 449 #define viddec_fw_vc1_set_ep_closed_entry(x, val) viddec_fw_bitfields_insert((x)->flags, val, 9, 0x1) 450 451 #define viddec_fw_vc1_get_ep_panscan_flag(x) viddec_fw_bitfields_extract((x)->flags, 8, 0x1) 452 #define viddec_fw_vc1_set_ep_panscan_flag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 8, 0x1) 453 454 #define viddec_fw_vc1_get_ep_range_mapy_flag(x) viddec_fw_bitfields_extract((x)->flags, 7, 0x1) 455 #define viddec_fw_vc1_set_ep_range_mapy_flag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 7, 0x1) 456 457 #define viddec_fw_vc1_get_ep_range_mapy(x) viddec_fw_bitfields_extract((x)->flags, 4, 0x7) 458 #define viddec_fw_vc1_set_ep_range_mapy(x, val) viddec_fw_bitfields_insert((x)->flags, val, 4, 0x7) 459 460 #define viddec_fw_vc1_get_ep_range_mapuv_flag(x) viddec_fw_bitfields_extract((x)->flags, 3, 0x1) 461 #define viddec_fw_vc1_set_ep_range_mapuv_flag(x, val) viddec_fw_bitfields_insert((x)->flags, val, 3, 0x1) 462 463 #define viddec_fw_vc1_get_ep_range_mapuv(x) viddec_fw_bitfields_extract((x)->flags, 0, 0x7) 464 #define viddec_fw_vc1_set_ep_range_mapuv(x, val) viddec_fw_bitfields_insert((x)->flags, val, 0, 0x7) 465 466 uint32_t size; // coded_size_flag:1, coded_width:12, coded_height:12 467 uint32_t flags; // broken_link:1, closed_entry:1, panscan_flag:1, range_mapy_flag:1, range_mapy:3, range_mapuv_flag:1, range_mapuv:3 468 uint32_t pad; 469 } vc1_ep; // vc1 item of type VIDDEC_WORKLOAD_GOP_INFO 470 struct 471 { 472 /* 473 0-7 bits for profile_idc. 474 8-15 bits for level_idc. 475 16-17 bits for chroma_format_idc. 476 18-22 bits for num_ref_frames. 477 23 for gaps_in_frame_num_value_allowed_flag. 478 24 for frame_mbs_only_flag. 479 25 for frame_cropping_flag. 480 26 for vui_parameters_present_flag. 481 */ 482 #define viddec_fw_h264_sps_get_profile_idc(x) viddec_fw_bitfields_extract( (x)->sps_messages, 0, 0xFF) 483 #define viddec_fw_h264_sps_set_profile_idc(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 0, 0xFF) 484 #define viddec_fw_h264_sps_get_level_idc(x) viddec_fw_bitfields_extract( (x)->sps_messages, 8, 0xFF) 485 #define viddec_fw_h264_sps_set_level_idc(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 8, 0xFF) 486 #define viddec_fw_h264_sps_get_chroma_format_idc(x) viddec_fw_bitfields_extract( (x)->sps_messages, 16, 0x3) 487 #define viddec_fw_h264_sps_set_chroma_format_idc(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 16, 0x3) 488 #define viddec_fw_h264_sps_get_num_ref_frames(x) viddec_fw_bitfields_extract( (x)->sps_messages, 18, 0x1F) 489 #define viddec_fw_h264_sps_set_num_ref_frames(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 18, 0x1F) 490 #define viddec_fw_h264_sps_get_gaps_in_frame_num_value_allowed_flag(x) viddec_fw_bitfields_extract( (x)->sps_messages, 23, 0x1) 491 #define viddec_fw_h264_sps_set_gaps_in_frame_num_value_allowed_flag(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 23, 0x1) 492 #define viddec_fw_h264_sps_get_frame_mbs_only_flag(x) viddec_fw_bitfields_extract( (x)->sps_messages, 24, 0x1) 493 #define viddec_fw_h264_sps_set_frame_mbs_only_flag(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 24, 0x1) 494 #define viddec_fw_h264_sps_get_frame_cropping_flag(x) viddec_fw_bitfields_extract( (x)->sps_messages, 25, 0x1) 495 #define viddec_fw_h264_sps_set_frame_cropping_flag(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 25, 0x1) 496 #define viddec_fw_h264_sps_get_vui_parameters_present_flag(x) viddec_fw_bitfields_extract( (x)->sps_messages, 26, 0x1) 497 #define viddec_fw_h264_sps_set_vui_parameters_present_flag(x, val) viddec_fw_bitfields_insert( (x)->sps_messages, val, 26, 0x1) 498 unsigned int sps_messages; 499 unsigned int pic_width_in_mbs_minus1; 500 unsigned int pic_height_in_map_units_minus1; 501 } h264_sps; // h264 item of type VIDDEC_WORKLOAD_SEQUENCE_INFO 502 503 struct 504 { 505 #define viddec_fw_h264_cropping_get_left(x) viddec_fw_bitfields_extract( (x)->left_right, 16, 0xFFFF) 506 #define viddec_fw_h264_cropping_get_right(x) viddec_fw_bitfields_extract( (x)->left_right, 0, 0xFFFF) 507 #define viddec_fw_h264_cropping_set_left(x, val) viddec_fw_bitfields_insert( (x)->left_right, val, 16, 0xFFFF) 508 #define viddec_fw_h264_cropping_set_right(x, val) viddec_fw_bitfields_insert( (x)->left_right, val, 0, 0xFFFF) 509 unsigned int left_right; /* Left in upper 16 bits and right in Lower 16 bits */ 510 #define viddec_fw_h264_cropping_get_top(x) viddec_fw_bitfields_extract( (x)->top_bottom, 16, 0xFFFF) 511 #define viddec_fw_h264_cropping_get_bottom(x) viddec_fw_bitfields_extract( (x)->top_bottom, 0, 0xFFFF) 512 #define viddec_fw_h264_cropping_set_top(x, val) viddec_fw_bitfields_insert( (x)->top_bottom, val, 16, 0xFFFF) 513 #define viddec_fw_h264_cropping_set_bottom(x, val) viddec_fw_bitfields_insert( (x)->top_bottom, val, 0, 0xFFFF) 514 unsigned int top_bottom; /* top in upper 16 bits and bottom in lower 16 bits */ 515 unsigned int pad; 516 } h264_cropping; // h264 item of type VIDDEC_WORKLOAD_H264_CROPPING 517 518 struct 519 { 520 /* 0 bit for aspect_ratio_info_present_flag 521 1 st bit for video_signal_type_present_flag 522 2 nd bit for colour_description_present_flag 523 3 rd bit for timing_info_present_flag 524 4 th bit for nal_hrd_parameters_present_flag 525 5 th bit for vcl_hrd_parameters_present_flag 526 6 th bit for fixed_frame_rate_flag 527 7 th bit for pic_struct_present_flag 528 8 th bit for low_delay_hrd_flag 529 9,10,11 bits for video_format 530 */ 531 #define viddec_fw_h264_vui_get_aspect_ratio_info_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 0, 0x1) 532 #define viddec_fw_h264_vui_set_aspect_ratio_info_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 0, 0x1) 533 #define viddec_fw_h264_vui_get_video_signal_type_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 1, 0x1) 534 #define viddec_fw_h264_vui_set_video_signal_type_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 1, 0x1) 535 #define viddec_fw_h264_vui_get_colour_description_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 2, 0x1) 536 #define viddec_fw_h264_vui_set_colour_description_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 2, 0x1) 537 #define viddec_fw_h264_vui_get_timing_info_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 3, 0x1) 538 #define viddec_fw_h264_vui_set_timing_info_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 3, 0x1) 539 #define viddec_fw_h264_vui_get_nal_hrd_parameters_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 4, 0x1) 540 #define viddec_fw_h264_vui_set_nal_hrd_parameters_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 4, 0x1) 541 #define viddec_fw_h264_vui_get_vcl_hrd_parameters_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 5, 0x1) 542 #define viddec_fw_h264_vui_set_vcl_hrd_parameters_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 5, 0x1) 543 #define viddec_fw_h264_vui_get_fixed_frame_rate_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 6, 0x1) 544 #define viddec_fw_h264_vui_set_fixed_frame_rate_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 6, 0x1) 545 #define viddec_fw_h264_vui_get_pic_struct_present_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 7, 0x1) 546 #define viddec_fw_h264_vui_set_pic_struct_present_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 7, 0x1) 547 #define viddec_fw_h264_vui_get_low_delay_hrd_flag(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 8, 0x1) 548 #define viddec_fw_h264_vui_set_low_delay_hrd_flag(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 8, 0x1) 549 #define viddec_fw_h264_vui_get_video_format(x) viddec_fw_bitfields_extract( (x)->vui_flags_and_format, 9, 0x7) 550 #define viddec_fw_h264_vui_set_video_format(x, val) viddec_fw_bitfields_insert( (x)->vui_flags_and_format, val, 9, 0x7) 551 unsigned int vui_flags_and_format; 552 553 #define viddec_fw_h264_vui_get_aspect_ratio_idc(x) viddec_fw_bitfields_extract( (x)->aspc_color_transfer, 0, 0xFF) 554 #define viddec_fw_h264_vui_set_aspect_ratio_idc(x, val) viddec_fw_bitfields_insert( (x)->aspc_color_transfer, val, 0, 0xFF) 555 #define viddec_fw_h264_vui_get_colour_primaries(x) viddec_fw_bitfields_extract( (x)->aspc_color_transfer, 8, 0xFF) 556 #define viddec_fw_h264_vui_set_colour_primaries(x, val) viddec_fw_bitfields_insert( (x)->aspc_color_transfer, val, 8, 0xFF) 557 #define viddec_fw_h264_vui_get_transfer_characteristics(x) viddec_fw_bitfields_extract( (x)->aspc_color_transfer, 16, 0xFF) 558 #define viddec_fw_h264_vui_set_transfer_characteristics(x, val) viddec_fw_bitfields_insert( (x)->aspc_color_transfer, val, 16, 0xFF) 559 /* lower 8 bits for aspect_ratio, next 8bits for color primaries and next 8 bits for transfer characteristics */ 560 unsigned int aspc_color_transfer; 561 562 #define viddec_fw_h264_vui_get_sar_width(x) viddec_fw_bitfields_extract( (x)->sar_width_height, 16, 0xFFFF) 563 #define viddec_fw_h264_vui_get_sar_height(x) viddec_fw_bitfields_extract( (x)->sar_width_height, 0, 0xFFFF) 564 #define viddec_fw_h264_vui_set_sar_width(x, val) viddec_fw_bitfields_insert( (x)->sar_width_height, val, 16, 0xFFFF) 565 #define viddec_fw_h264_vui_set_sar_height(x, val) viddec_fw_bitfields_insert( (x)->sar_width_height, val, 0, 0xFFFF) 566 unsigned int sar_width_height; /* Lower 16 for height upper 16 for width */ 567 } h264_vui; // h264 item of type VIDDEC_WORKLOAD_DISPLAY_INFO 568 struct 569 { 570 #define viddec_fw_h264_vui_get_num_units_in_tick_flag(x) viddec_fw_bitfields_extract( (x)->num_units_in_tick, 0, 0xFFFFFFFF) 571 #define viddec_fw_h264_vui_set_num_units_in_tick_flag(x, val) viddec_fw_bitfields_insert( (x)->num_units_in_tick, val, 0, 0xFFFFFFFF) 572 #define viddec_fw_h264_vui_get_time_scale_flag(x) viddec_fw_bitfields_extract( (x)->time_scale, 0, 0xFFFFFFFF) 573 #define viddec_fw_h264_vui_set_time_scale_flag(x, val) viddec_fw_bitfields_insert( (x)->time_scale, val, 0, 0xFFFFFFFF) 574 unsigned int num_units_in_tick; 575 unsigned int time_scale; 576 unsigned int pad1; 577 } h264_vui_time_info; // VIDDEC_WORKLOAD_H264_VUI_TIMING_INFO 578 struct 579 { 580 unsigned int pic_struct; /* 4 bit length */ 581 unsigned int pad1; 582 unsigned int pad2; 583 } h264_sei_pic_timing; // h264 item of type VIDDEC_WORKLOAD_SEI_PIC_TIMING 584 struct 585 { 586 unsigned int pan_scan_rect_id; 587 588 #define viddec_fw_h264_sei_pan_scan_get_cancel_flag(x) viddec_fw_bitfields_extract( (x)->pan_scan_cancel_and_cnt, 0, 0x1) 589 #define viddec_fw_h264_sei_pan_scan_get_cnt_minus1(x) viddec_fw_bitfields_extract( (x)->pan_scan_cancel_and_cnt, 1, 0x3) 590 #define viddec_fw_h264_sei_pan_scan_set_cancel_flag(x, val) viddec_fw_bitfields_insert( (x)->pan_scan_cancel_and_cnt, val, 0, 0x1) 591 #define viddec_fw_h264_sei_pan_scan_set_cnt_minus1(x, val) viddec_fw_bitfields_insert( (x)->pan_scan_cancel_and_cnt, val, 1, 0x3) 592 unsigned int pan_scan_cancel_and_cnt; /* 0 bit for cancel flag and 2 bits for cnt_minus1 */ 593 unsigned int pan_scan_rect_repetition_period; 594 } h264_sei_pan_scan; // h264 item of type VIDDEC_WORKLOAD_H264_PAN_SCAN 595 596 struct 597 { 598 599 #define viddec_fw_h264_pan_scan_get_left(x) viddec_fw_bitfields_extract( (x)->left_right, 16, 0xFFFF) 600 #define viddec_fw_h264_pan_scan_get_right(x) viddec_fw_bitfields_extract( (x)->left_right, 0, 0xFFFF) 601 #define viddec_fw_h264_pan_scan_set_left(x, val) viddec_fw_bitfields_insert( (x)->left_right, val, 16, 0xFFFF) 602 #define viddec_fw_h264_pan_scan_set_right(x, val) viddec_fw_bitfields_insert( (x)->left_right, val, 0, 0xFFFF) 603 unsigned int left_right; /* Left in upper 16 bits and right in Lower 16 bits */ 604 605 #define viddec_fw_h264_pan_scan_get_top(x) viddec_fw_bitfields_extract( (x)->top_bottom, 16, 0xFFFF) 606 #define viddec_fw_h264_pan_scan_get_bottom(x) viddec_fw_bitfields_extract( (x)->top_bottom, 0, 0xFFFF) 607 #define viddec_fw_h264_pan_scan_set_top(x, val) viddec_fw_bitfields_insert( (x)->top_bottom, val, 16, 0xFFFF) 608 #define viddec_fw_h264_pan_scan_set_bottom(x, val) viddec_fw_bitfields_insert( (x)->top_bottom, val, 0, 0xFFFF) 609 unsigned int top_bottom; /* top in upper 16 bits and bottom in lower 16 bits */ 610 611 unsigned int pad; 612 } h264_pan_scan_rect; // h264 item of type VIDDEC_WORKLOAD_SEI_PAN_SCAN_RECT 613 struct 614 { 615 unsigned int recovery_frame_cnt; 616 #define viddec_fw_h264_h264_sei_recovery_get_exact_match_flag(x) viddec_fw_bitfields_extract( (x)->broken_and_exctmatch_flags, 0, 0x1) 617 #define viddec_fw_h264_h264_sei_recovery_get_broken_link_flag(x) viddec_fw_bitfields_extract( (x)->broken_and_exctmatch_flags, 1, 0x1) 618 #define viddec_fw_h264_h264_sei_recovery_set_exact_match_flag(x, val) viddec_fw_bitfields_insert( (x)->broken_and_exctmatch_flags, val, 0, 0x1) 619 #define viddec_fw_h264_h264_sei_recovery_set_broken_link_flag(x, val) viddec_fw_bitfields_insert( (x)->broken_and_exctmatch_flags, val, 1, 0x1) 620 unsigned int broken_and_exctmatch_flags; /* 0 bit for exact match, 1 bit for brokenlink */ 621 622 unsigned int changing_slice_group_idc; /* 2bit value for slice_group idc */ 623 624 } h264_sei_recovery_point; // h264 item of type VIDDEC_WORKLOAD_SEI_RECOVERY_POINT 625 626 struct 627 { 628 // Visual Sequence (From LSB): 629 // - profile_and_level_indication - 8 bits 630 #define viddec_fw_mp4_vs_get_profile_and_level_indication(x) viddec_fw_bitfields_extract( (x)->vs_item, 0, 0xFF) 631 #define viddec_fw_mp4_vs_set_profile_and_level_indication(x, val) viddec_fw_bitfields_insert ( (x)->vs_item, val, 0, 0xFF) 632 unsigned int vs_item; 633 634 // Visual Object - video_signal_type 635 // - video_signal_type - 1b 636 // - video_format - 3b 637 // - video_range - 1b 638 // - colour_description - 1b 639 #define viddec_fw_mp4_vo_get_colour_description(x) viddec_fw_bitfields_extract( (x)->video_signal_type, 5, 0x1) 640 #define viddec_fw_mp4_vo_set_colour_description(x, val) viddec_fw_bitfields_insert ( (x)->video_signal_type, val, 5, 0x1) 641 #define viddec_fw_mp4_vo_get_video_range(x) viddec_fw_bitfields_extract( (x)->video_signal_type, 4, 0x1) 642 #define viddec_fw_mp4_vo_set_video_range(x, val) viddec_fw_bitfields_insert ( (x)->video_signal_type, val, 4, 0x1) 643 #define viddec_fw_mp4_vo_get_video_format(x) viddec_fw_bitfields_extract( (x)->video_signal_type, 1, 0x7) 644 #define viddec_fw_mp4_vo_set_video_format(x, val) viddec_fw_bitfields_insert ( (x)->video_signal_type, val, 1, 0x7) 645 #define viddec_fw_mp4_vo_get_video_signal_type(x) viddec_fw_bitfields_extract( (x)->video_signal_type, 0, 0x1) 646 #define viddec_fw_mp4_vo_set_video_signal_type(x, val) viddec_fw_bitfields_insert ( (x)->video_signal_type, val, 0, 0x1) 647 unsigned int video_signal_type; 648 649 // Visual Object - video_signal_type 650 // - color_primaries - 8 bits 651 // - transfer_characteristics - 8 bits 652 #define viddec_fw_mp4_vo_get_transfer_char(x) viddec_fw_bitfields_extract( (x)->color_desc, 8, 0xFF) 653 #define viddec_fw_mp4_vo_set_transfer_char(x, val) viddec_fw_bitfields_insert ( (x)->color_desc, val, 8, 0xFF) 654 #define viddec_fw_mp4_vo_get_color_primaries(x) viddec_fw_bitfields_extract( (x)->color_desc, 0, 0xFF) 655 #define viddec_fw_mp4_vo_set_color_primaries(x, val) viddec_fw_bitfields_insert ( (x)->color_desc, val, 0, 0xFF) 656 unsigned int color_desc; 657 } mp4_vs_vo; // mp4 item of type VIDDEC_WORKLOAD_MPEG4_VISUAL_SEQ_OBJ 658 659 struct 660 { 661 // Video Object Layer(From LSB): 662 // - aspect_ratio_info - 4b 663 // - par_width - 8b 664 // - par_height - 8b 665 // - vol_control_param - 1b 666 // - chroma_format - 2b 667 // - interlaced - 1b 668 // - fixed_vop_rate - 1b 669 #define viddec_fw_mp4_vol_get_fixed_vop_rate(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 24, 0x1) 670 #define viddec_fw_mp4_vol_set_fixed_vop_rate(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 24, 0x1) 671 #define viddec_fw_mp4_vol_get_interlaced(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 23, 0x1) 672 #define viddec_fw_mp4_vol_set_interlaced(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 23, 0x1) 673 #define viddec_fw_mp4_vol_get_chroma_format(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 21, 0x3) 674 #define viddec_fw_mp4_vol_set_chroma_format(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 21, 0x3) 675 #define viddec_fw_mp4_vol_get_control_param(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 20, 0x1) 676 #define viddec_fw_mp4_vol_set_control_param(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 20, 0x1) 677 #define viddec_fw_mp4_vol_get_par_height(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 12, 0xFF) 678 #define viddec_fw_mp4_vol_set_par_height(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 12, 0xFF) 679 #define viddec_fw_mp4_vol_get_par_width(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 4, 0xFF) 680 #define viddec_fw_mp4_vol_set_par_width(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 4, 0xFF) 681 #define viddec_fw_mp4_vol_get_aspect_ratio_info(x) viddec_fw_bitfields_extract( (x)->vol_aspect_ratio, 0, 0xF) 682 #define viddec_fw_mp4_vol_set_aspect_ratio_info(x, val) viddec_fw_bitfields_insert ( (x)->vol_aspect_ratio, val, 0, 0xF) 683 unsigned int vol_aspect_ratio; 684 685 // Video Object Layer(From LSB): 686 // - vbv_parameters - 1b 687 // - bit_rate - 30b 688 #define viddec_fw_mp4_vol_get_bit_rate(x) viddec_fw_bitfields_extract( (x)->vol_bit_rate, 1, 0x3FFFFFFF) 689 #define viddec_fw_mp4_vol_set_bit_rate(x, val) viddec_fw_bitfields_insert ( (x)->vol_bit_rate, val, 1, 0x3FFFFFFF) 690 #define viddec_fw_mp4_vol_get_vbv_param(x) viddec_fw_bitfields_extract( (x)->vol_bit_rate, 0, 0x1) 691 #define viddec_fw_mp4_vol_set_vbv_param(x, val) viddec_fw_bitfields_insert ( (x)->vol_bit_rate, val, 0, 0x1) 692 unsigned int vol_bit_rate; 693 694 // Video Object Layer(From LSB): 695 // - fixed_vop_time_increment - 16b 696 // - vop_time_increment_resolution - 16b 697 #define viddec_fw_mp4_vol_get_vop_time_increment_resolution(x) viddec_fw_bitfields_extract((x)->vol_frame_rate, 16, 0xFFFF) 698 #define viddec_fw_mp4_vol_set_vop_time_increment_resolution(x, val) viddec_fw_bitfields_insert((x)->vol_frame_rate, val, 16, 0xFFFF) 699 #define viddec_fw_mp4_vol_get_fixed_vop_time_increment(x) viddec_fw_bitfields_extract((x)->vol_frame_rate, 1, 0xFFFF) 700 #define viddec_fw_mp4_vol_set_fixed_vop_time_increment(x, val) viddec_fw_bitfields_insert((x)->vol_frame_rate, val, 1, 0xFFFF) 701 unsigned int vol_frame_rate; 702 } mp4_vol; // mp4 item of type VIDDEC_WORKLOAD_MPEG4_VIDEO_OBJ 703 704 struct 705 { 706 // Group of Video Object Planes(From LSB): 707 // - time_code - 18b 708 // - closed_gov - 1b 709 // - broken_link - 1b 710 #define viddec_fw_mp4_gvop_get_broken_link(x) viddec_fw_bitfields_extract((x)->gvop_info, 19, 0x1) 711 #define viddec_fw_mp4_gvop_set_broken_link(x, val) viddec_fw_bitfields_insert((x)->gvop_info, val, 19, 0x1) 712 #define viddec_fw_mp4_gvop_get_closed_gov(x) viddec_fw_bitfields_extract((x)->gvop_info, 18, 0x1) 713 #define viddec_fw_mp4_gvop_set_closed_gov(x, val) viddec_fw_bitfields_insert((x)->gvop_info, val, 18, 0x1) 714 #define viddec_fw_mp4_gvop_get_time_code(x) viddec_fw_bitfields_extract((x)->gvop_info, 0, 0x3FFFF) 715 #define viddec_fw_mp4_gvop_set_time_code(x, val) viddec_fw_bitfields_insert((x)->gvop_info, val, 0, 0x3FFFF) 716 unsigned int gvop_info; 717 718 unsigned int pad1; 719 unsigned int pad2; 720 } mp4_gvop; // mp4 item of type VIDDEC_WORKLOAD_MPEG4_GRP_VIDEO_OBJ 721 722 struct 723 { 724 // Group of Video Object Planes(From LSB): 725 // - source_format - 3b 726 #define viddec_fw_mp4_vpsh_get_source_format(x) viddec_fw_bitfields_extract((x)->info, 0, 0x7) 727 #define viddec_fw_mp4_vpsh_set_source_format(x, val) viddec_fw_bitfields_insert((x)->info, val, 0, 0x7) 728 unsigned int info; 729 730 unsigned int pad1; 731 unsigned int pad2; 732 } mp4_vpsh; // mp4 item of type VIDDEC_WORKLOAD_MPEG4_VIDEO_PLANE_SHORT 733 734 unsigned int vwi_payload[3]; 735 }; 736 }viddec_workload_item_t; 737 738 #endif /* VIDDEC_ITEM_TYPES_H */ 739