1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ***************************************************************************** 18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 #ifndef _IH264D_DEFS_H_ 21 #define _IH264D_DEFS_H_ 22 23 /** 24 ************************************************************************ 25 * \file ih264d_defs.h 26 * 27 * \brief 28 * Type definitions used in the code 29 * 30 * \date 31 * 19/11/2002 32 * 33 * \author Sriram Sethuraman 34 * 35 ************************************************************************ 36 */ 37 #define H264_MAX_FRAME_WIDTH 4080 38 #define H264_MAX_FRAME_HEIGHT 4080 39 #define H264_MAX_FRAME_SIZE (4096 * 2048) 40 41 #define H264_MIN_FRAME_WIDTH 16 42 #define H264_MIN_FRAME_HEIGHT 16 43 44 #define FMT_CONV_NUM_ROWS 16 45 46 /** Bit manipulation macros */ 47 #define CHECKBIT(a,i) ((a) & (1 << i)) 48 #define CLEARBIT(a,i) ((a) &= ~(1 << i)) 49 50 /** Macro to convert a integer to a boolean value */ 51 #define BOOLEAN(x) (!!(x)) 52 53 /** Arithmetic operations */ 54 #define MOD(x,y) ((x)%(y)) 55 #define DIV(x,y) ((x)/(y)) 56 #define MUL(x,y) ((x)*(y)) 57 #define SIGN_POW2_DIV(x, y) (((x) < 0) ? (-((-(x)) >> (y))) : ((x) >> (y))) 58 59 #define MB_ENABLE_FILTERING 0x00 60 #define MB_DISABLE_FILTERING 0x01 61 #define MB_DISABLE_TOP_EDGE 0x02 62 #define MB_DISABLE_LEFT_EDGE 0x04 63 64 /** Maximum number of reference pics */ 65 #define MAX_REF_BUFS 32 66 #define MAX_DISP_BUFS_NEW 64 67 #define MAX_FRAMES 16 68 69 #define INVALID_FRAME_NUM 0x0fffffff 70 #define GAP_FRAME_NUM 0x1fffffff 71 72 /** macros for reference picture lists, refIdx to POC mapping */ 73 // 1 extra entry into reference picture lists for refIdx = -1. 74 // this entry is always 0. this saves conditional checks in 75 // FillBs modules. 76 #define POC_LIST_L0_TO_L1_DIFF (( 2*MAX_FRAMES) + 1) 77 #define POC_LIST_L0_TO_L1_DIFF_1 ((MAX_FRAMES) + 1) 78 79 #define FRM_LIST_L0 0 //0 80 #define FRM_LIST_L1 1 * POC_LIST_L0_TO_L1_DIFF//FRM_LIST_L0 + POC_LIST_L0_TO_L1_DIFF //0+33 //(1 * POC_LIST_L0_TO_L1_DIFF) 81 #define TOP_LIST_FLD_L0 2 * POC_LIST_L0_TO_L1_DIFF//FRM_LIST_L1 + POC_LIST_L0_TO_L1_DIFF //0+33+33 //(2 * POC_LIST_L0_TO_L1_DIFF) 82 #define TOP_LIST_FLD_L1 3 * POC_LIST_L0_TO_L1_DIFF//TOP_LIST_FLD_L0 + POC_LIST_L0_TO_L1_DIFF_1 //0+33+33+17 //(3 * POC_LIST_L0_TO_L1_DIFF) 83 #define BOT_LIST_FLD_L0 4 * POC_LIST_L0_TO_L1_DIFF//TOP_LIST_FLD_L1 + POC_LIST_L0_TO_L1_DIFF_1 //0+33+33+17+17 84 #define BOT_LIST_FLD_L1 5 * POC_LIST_L0_TO_L1_DIFF//BOT_LIST_FLD_L0 + POC_LIST_L0_TO_L1_DIFF_1 //0+33+33+17+17+17 85 #define TOTAL_LIST_ENTRIES 6 * POC_LIST_L0_TO_L1_DIFF//BOT_LIST_FLD_L1 + POC_LIST_L0_TO_L1_DIFF_1 //0+33+33+17+17+17+17 86 #define PAD_MV_BANK_ROW 64 87 #define OFFSET_MV_BANK_ROW ((PAD_MV_BANK_ROW)>>1) 88 #define PAD_PUC_CURNNZ 32 89 #define OFFSET_PUC_CURNNZ (PAD_PUC_CURNNZ) 90 #define PAD_MAP_IDX_POC (1) 91 #define OFFSET_MAP_IDX_POC (1) 92 93 #define OFFSET_MAP_IDX_POC (1) 94 95 #define NAL_REF_IDC(nal_first_byte) ((nal_first_byte >> 5) & 0x3) 96 #define NAL_FORBIDDEN_BIT(nal_first_byte) (nal_first_byte>>7) 97 #define NAL_UNIT_TYPE(nal_first_byte) (nal_first_byte & 0x1F) 98 99 #define INT_PIC_TYPE_I (0x00) 100 101 #define YIELD_CNT_THRESHOLD 8 102 103 104 #define OK 0 105 #define END 1 106 #define NOT_OK -1 107 108 /* For 420SP */ 109 #define YUV420SP_FACTOR 2 110 111 /*To prevent buffer overflow access; in case the size of nal unit is 112 * greater than the allocated buffer size*/ 113 #define EXTRA_BS_OFFSET 16*16*2 114 115 /** 116 *************************************************************************** 117 * Enum to hold various mem records being request 118 **************************************************************************** 119 */ 120 enum 121 { 122 /** 123 * Codec Object at API level 124 */ 125 MEM_REC_IV_OBJ, 126 127 /** 128 * Codec context 129 */ 130 MEM_REC_CODEC, 131 132 /** 133 * Bitstream buffer which holds emulation prevention removed bytes 134 */ 135 MEM_REC_BITSBUF, 136 137 /** 138 * Buffer to hold coeff data 139 */ 140 MEM_REC_COEFF_DATA, 141 142 /** 143 * Motion vector bank 144 */ 145 MEM_REC_MVBANK, 146 147 /** 148 * Holds mem records passed to the codec. 149 */ 150 MEM_REC_BACKUP, 151 152 /** 153 * Holds SPS 154 */ 155 MEM_REC_SPS, 156 157 /** 158 * Holds PPS 159 */ 160 MEM_REC_PPS, 161 162 /** 163 * Holds Slice Headers 164 */ 165 MEM_REC_SLICE_HDR, 166 167 /** 168 * Holds thread handles 169 */ 170 MEM_REC_THREAD_HANDLE, 171 172 /** 173 * Contains i4_status map indicating parse i4_status per MB basis 174 */ 175 MEM_REC_PARSE_MAP, 176 177 /** 178 * Contains i4_status map indicating processing i4_status per MB basis 179 */ 180 MEM_REC_PROC_MAP, 181 182 /** 183 * Contains slice number info for each MB 184 */ 185 186 MEM_REC_SLICE_NUM_MAP, 187 188 /** 189 * Holds dpb manager context 190 */ 191 MEM_REC_DPB_MGR, 192 193 /** 194 * Holds neighbors' info 195 */ 196 MEM_REC_NEIGHBOR_INFO, 197 198 /** 199 * Holds neighbors' info 200 */ 201 MEM_REC_PRED_INFO, 202 203 204 /** 205 * Holds inter pred inforamation on packed format info 206 */ 207 MEM_REC_PRED_INFO_PKD, 208 /** 209 * Holds neighbors' info 210 */ 211 MEM_REC_MB_INFO, 212 213 /** 214 * Holds deblock Mb info structure frame level) 215 */ 216 MEM_REC_DEBLK_MB_INFO, 217 218 /** 219 * Holds reference picture buffers in non-shared mode 220 */ 221 MEM_REC_REF_PIC, 222 223 /** 224 * Holds some misc intermediate_buffers 225 */ 226 MEM_REC_EXTRA_MEM, 227 228 /** 229 * Holds some misc intermediate_buffers 230 */ 231 MEM_REC_INTERNAL_SCRATCH, 232 233 /** 234 * Holds some misc intermediate_buffers 235 */ 236 MEM_REC_INTERNAL_PERSIST, 237 238 /* holds structures related to picture buffer manager*/ 239 MEM_REC_PIC_BUF_MGR, 240 241 /*holds structure related to MV buffer manager*/ 242 MEM_REC_MV_BUF_MGR, 243 244 /** 245 * Place holder to compute number of memory records. 246 */ 247 MEM_REC_CNT 248 /* Do not add anything below */ 249 }; 250 251 #ifdef DEBLOCK_THREAD 252 #define H264_MUTEX_LOCK(lock) ithread_mutex_lock(lock) 253 #define H264_MUTEX_UNLOCK(lock) ithread_mutex_unlock(lock) 254 #else //DEBLOCK_THREAD 255 #define H264_MUTEX_LOCK(lock) 256 #define H264_MUTEX_UNLOCK(lock) 257 258 #define DEBUG_THREADS_PRINTF(...) 259 #define DEBUG_PERF_PRINTF(...) 260 261 /** Profile Types*/ 262 #define BASE_PROFILE_IDC 66 263 #define MAIN_PROFILE_IDC 77 264 #define EXTENDED_PROFILE_IDC 88 265 #define HIGH_PROFILE_IDC 100 266 267 268 #define MB_SIZE 16 269 #define BLK8x8SIZE 8 270 #define BLK_SIZE 4 271 #define NUM_BLKS_PER_MB 24 272 #define NUM_LUM_BLKS_PER_MB 16 273 #define LUM_BLK 0 274 #define CHROM_BLK 1 275 #define NUM_PELS_IN_MB 64 276 277 /* Level Types */ 278 #define H264_LEVEL_1_0 10 279 #define H264_LEVEL_1_1 11 280 #define H264_LEVEL_1_2 12 281 #define H264_LEVEL_1_3 13 282 #define H264_LEVEL_2_0 20 283 #define H264_LEVEL_2_1 21 284 #define H264_LEVEL_2_2 22 285 #define H264_LEVEL_3_0 30 286 #define H264_LEVEL_3_1 31 287 #define H264_LEVEL_3_2 32 288 #define H264_LEVEL_4_0 40 289 #define H264_LEVEL_4_1 41 290 #define H264_LEVEL_4_2 42 291 #define H264_LEVEL_5_0 50 292 #define H264_LEVEL_5_1 51 293 294 #define MAX_MBS_LEVEL_51 36864 295 #define MAX_MBS_LEVEL_50 22080 296 #define MAX_MBS_LEVEL_42 8704 297 #define MAX_MBS_LEVEL_41 8192 298 #define MAX_MBS_LEVEL_40 8192 299 #define MAX_MBS_LEVEL_32 5120 300 #define MAX_MBS_LEVEL_31 3600 301 #define MAX_MBS_LEVEL_30 1620 302 #define MAX_MBS_LEVEL_22 1620 303 #define MAX_MBS_LEVEL_21 792 304 #define MAX_MBS_LEVEL_20 396 305 #define MAX_MBS_LEVEL_13 396 306 #define MAX_MBS_LEVEL_12 396 307 #define MAX_MBS_LEVEL_11 396 308 #define MAX_MBS_LEVEL_10 99 309 310 /** NAL Types */ 311 #define SLICE_NAL 1 312 #define SLICE_DATA_PARTITION_A_NAL 2 313 #define SLICE_DATA_PARTITION_B_NAL 3 314 #define SLICE_DATA_PARTITION_C_NAL 4 315 #define IDR_SLICE_NAL 5 316 #define SEI_NAL 6 317 #define SEQ_PARAM_NAL 7 318 #define PIC_PARAM_NAL 8 319 #define ACCESS_UNIT_DELIMITER_RBSP 9 320 #define END_OF_SEQ_RBSP 10 321 #define END_OF_STREAM_RBSP 11 322 #define FILLER_DATA_NAL 12 323 324 /** Entropy coding modes */ 325 #define CAVLC 0 326 #define CABAC 1 327 328 /** Picture Types */ 329 #define I_PIC 0 330 #define IP_PIC 1 331 #define IPB_PIC 2 332 #define SI_PIC 3 333 #define SIP_PIC 4 334 #define ISI_PIC 5 335 #define ISI_PSP_PIC 6 336 #define ALL_PIC 7 337 338 /* Frame or field picture type */ 339 #define FRM_PIC 0x00 340 #define TOP_FLD 0x01 341 #define BOT_FLD 0x02 342 #define COMP_FLD_PAIR 0x03 /* TOP_FLD | BOT_FLD */ 343 #define AFRM_PIC 0x04 344 #define TOP_REF 0x08 345 #define BOT_REF 0x10 346 #define PIC_MASK 0x03 347 #define NON_EXISTING 0xff 348 349 /* field picture type for display */ 350 #define DISP_TOP_FLD 0x00 351 #define DISP_BOT_FLD 0x01 352 353 /** Slice Types */ 354 #define P_SLICE 0 355 #define B_SLICE 1 356 #define I_SLICE 2 357 #define SP_SLICE 3 358 #define SI_SLICE 4 359 360 /* Definition for picture skip */ 361 #define SKIP_NONE (0x0) 362 #define I_SLC_BIT (0x1) 363 #define P_SLC_BIT (0x2) 364 #define B_SLC_BIT (0x4) 365 366 /** Macros used for Deblocking */ 367 #define D_INTER_MB 0 368 #define D_INTRA_MB 1 369 #define D_PRED_NON_16x16 2 370 #define D_B_SLICE 4 371 #define D_B_SUBMB 6 //D_B_SLICE | D_PRED_NON_16x16 | D_INTER_MB 372 #define D_FLD_MB 0x80 373 374 /** Macros for Cabac checks */ 375 /** MbType */ 376 /** |x|x|I_PCM|SKIP| 377 |S|Inter/Intra|P/B|NON-BD16x16/BD16x16,I16x16/I4x4| */ 378 #define CAB_INTRA 0x00 /* 0000 00xx */ 379 #define CAB_INTER 0x04 /* 0000 01xx */ 380 #define CAB_I4x4 0x00 /* 0000 00x0 */ 381 #define CAB_I16x16 0x01 /* 0000 00x1 */ 382 #define CAB_BD16x16 0x04 /* 0000 0100 */ 383 #define CAB_NON_BD16x16 0x05 /* 0000 0101 */ 384 #define CAB_P 0x07 /* 0000 0111 */ 385 #define CAB_SI4x4 0x08 /* 0000 10x0 */ 386 #define CAB_SI16x16 0x09 /* 0000 10x1 */ 387 #define CAB_SKIP_MASK 0x10 /* 0001 0000 */ 388 #define CAB_SKIP 0x10 /* 0001 0000 */ 389 #define CAB_P_SKIP 0x16 /* 0001 x11x */ 390 #define CAB_B_SKIP 0x14 /* 0001 x100 */ 391 #define CAB_BD16x16_MASK 0x07 /* 0000 0111 */ 392 #define CAB_INTRA_MASK 0x04 /* 0000 0100 */ 393 #define CAB_I_PCM 0x20 /* 001x xxxx */ 394 395 /**< Binarization types for CABAC */ 396 /* |x|x|x|x|MSB_FIRST_FLC|FLC|TUNARY|UNARY| */ 397 #define UNARY 1 398 #define TUNARY 2 399 #define FLC 4 400 #define MSB_FIRST_FLC 12 401 402 /** Macroblock Types */ 403 #define I_4x4_MB 0 404 #define I_16x16_MB 1 405 #define P_MB 2 406 #define B_MB 3 407 #define SI_MB 4 408 #define SP_MB 5 409 #define I_PCM_MB 6 410 411 #define SI4x4_MB 0xFF 412 413 /** Intra luma 16x16 and chroma 8x8 prediction modes */ 414 #define NUM_INTRA_PRED_MODES 4 415 #define VERT 0 416 #define HORIZ 1 417 #define DC 2 418 #define PLANE 3 419 #define NOT_VALID -1 420 #define DC_DC_DC_DC 0x02020202 /*packed 4 bytes used in Decode Intra Mb*/ 421 422 /** Intra luma 4x4 prediction modes */ 423 #define NUM_INTRA4x4_PRED_MODES 9 424 425 /** VERT, HORIZ, DC are applicable to 4x4 as well */ 426 /** D - Down; U - Up; L - Left; R - Right */ 427 #define DIAG_DL 3 428 #define DIAG_DR 4 429 #define VERT_R 5 430 #define HORIZ_D 6 431 #define VERT_L 7 432 #define HORIZ_U 8 433 434 /** P_MB prediction modes */ 435 #define NUM_INTER_MB_PRED_MODES 5 436 #define PRED_16x16 0 437 #define PRED_16x8 1 438 #define PRED_8x16 2 439 #define PRED_8x8 3 440 #define PRED_8x8R0 4 441 #define MAGIC_16x16 5 442 #define MB_SKIP 255 443 444 /* P_MB submb modes */ 445 #define P_L0_8x8 0 446 #define P_L0_8x4 1 447 #define P_L0_4x8 2 448 #define P_L0_4x4 3 449 450 /* B_MB submb modes */ 451 #define B_DIRECT_8x8 0 452 #define B_L0_8x8 1 453 #define B_L1_8x8 2 454 #define B_BI_8x8 3 455 #define B_L0_8x4 4 456 #define B_L0_4x8 5 457 #define B_L1_8x4 6 458 #define B_L1_4x8 7 459 #define B_BI_8x4 8 460 #define B_BI_4x8 9 461 #define B_L0_4x4 10 462 #define B_L1_4x4 11 463 #define B_BI_4x4 12 464 465 /** B_MB prediction modes */ 466 #define B_8x8 22 467 #define PRED_INVALID -1 468 #define B_DIRECT 0 469 #define PRED_L0 1 470 #define PRED_L1 2 471 #define BI_PRED 3 472 #define B_DIRECT_BI_PRED 23 473 #define B_DIRECT_PRED_L0 24 474 #define B_DIRECT_PRED_L1 25 475 #define B_DIRECT_SPATIAL 26 476 477 #define B_DIRECT8x8_BI_PRED 13 478 #define B_DIRECT8x8_PRED_L0 14 479 #define B_DIRECT8x8_PRED_L1 15 480 481 #define ONE_TO_ONE 0 482 #define FRM_TO_FLD 1 483 #define FLD_TO_FRM 2 484 485 /** Inter Sub MB Pred modes */ 486 #define NUM_INTER_SUBMB_PRED_MODES 4 487 #define SUBMB_8x8 0 488 #define SUBMB_8x4 1 489 #define SUBMB_4x8 2 490 #define SUBMB_4x4 3 491 492 /** Coded Block Pattern - Chroma */ 493 #define CBPC_ALLZERO 0 494 #define CBPC_ACZERO 1 495 #define CBPC_NONZERO 2 496 497 /** Index for accessing the left MB in the MV predictor array */ 498 #define LEFT 0 499 /** Index for accessing the top MB in the MV predictor array */ 500 #define TOP 1 501 /** Index for accessing the top right MB in the MV predictor array */ 502 #define TOP_R 2 503 /** Index for accessing the top Left MB in the MV predictor array */ 504 #define TOP_L 3 505 506 /** Maximum number of Sequence Parameter sets */ 507 #define MAX_NUM_SEQ_PARAMS 32 508 509 /** Maximum number of Picture Parameter sets */ 510 #define MAX_NUM_PIC_PARAMS 256 511 512 #define MASK_ERR_SEQ_SET_ID (0xFFFFFFE0) 513 #define MASK_ERR_PIC_SET_ID (0xFFFFFF00) 514 515 #define MAX_PIC_ORDER_CNT_TYPE 2 516 517 #define MAX_BITS_IN_FRAME_NUM 16 518 #define MAX_BITS_IN_POC_LSB 16 519 520 #define H264_MAX_REF_PICS 16 521 #define H264_MAX_REF_IDX 32 522 #define MAX_WEIGHT_BIPRED_IDC 2 523 #define MAX_CABAC_INIT_IDC 2 524 525 #define H264_DEFAULT_NUM_CORES 1 526 #define DEFAULT_SEPARATE_PARSE (H264_DEFAULT_NUM_CORES == 2)? 1 :0 527 528 /** Maximum number of Slice groups */ 529 #define MAX_NUM_SLICE_GROUPS 8 530 #define MAX_NUM_REF_FRAMES_OFFSET 255 531 532 /** Deblocking modes for a slice */ 533 #define SLICE_BOUNDARY_DBLK_DISABLED 2 534 #define DBLK_DISABLED 1 535 #define DBLK_ENABLED 0 536 #define MIN_DBLK_FIL_OFF -12 537 #define MAX_DBLK_FIL_OFF 12 538 539 /** Width of the predictor buffers used for MC */ 540 #define MB_SIZE 16 541 #define BLK8x8SIZE 8 542 #define BLK_SIZE 4 543 #define NUM_BLKS_PER_MB 24 544 #define NUM_LUM_BLKS_PER_MB 16 545 546 #define SUB_BLK_WIDTH 4 547 #define SUB_SUB_BLK_SIZE 4 /* 2x2 pixel i4_size */ 548 #define SUB_BLK_SIZE ((SUB_BLK_WIDTH) * (SUB_BLK_WIDTH)) 549 #define MB_LUM_SIZE 256 550 #define MB_CHROM_SIZE 64 551 552 /**< Width to pad the luminance frame buff */ 553 /**< Height to pad the luminance frame buff */ 554 /**< Width to pad the chrominance frame buff */ 555 /**< Height to pad the chrominance frame buff */ 556 557 #define PAD_LEN_Y_H 32 558 #define PAD_LEN_Y_V 20 559 #define PAD_LEN_UV_H 16 560 #define PAD_LEN_UV_V 8 561 562 #define PAD_MV_BANK_ROW 64 563 564 /**< Maimum u4_ofst by which the Mvs could point outside the frame buffers 565 horizontally in the left and vertically in the top direction */ 566 #define MAX_OFFSET_OUTSIDE_X_FRM -20 567 #define MAX_OFFSET_OUTSIDE_Y_FRM -20 568 #define MAX_OFFSET_OUTSIDE_UV_FRM -8 569 570 /** UVLC parsing macros */ 571 #define UEV 1 572 #define SEV 2 573 #define TEV 3 574 575 /** Defines for Boolean values */ 576 #ifndef TRUE 577 #define TRUE 1 578 #define FALSE 0 579 #endif 580 581 #define UNUSED_FOR_REF 0 582 #define IS_SHORT_TERM 1 583 #define IS_LONG_TERM 2 584 585 /** Defines for which field gets displayed first */ 586 #define MAX_FRAMES 16 587 #define INVALID_FRAME_NUM 0x0fffffff 588 #define DO_NOT_DISP 254 589 #define DISP_FLD_FIRST_UNDEF 0 590 #define DISP_TOP_FLD_FIRST 1 591 #define DISP_BOT_FLD_FIRST 2 592 593 /** Misc error resilience requirements*/ 594 #define MASK_LOG2_WEIGHT_DENOM 0xFFFFFFF8 595 #define MASK_PRED_WEIGHT_OFFSET 0xFFFFFF00 596 #define MAX_REDUNDANT_PIC_CNT 127 597 598 599 600 #endif //DEBLOCK_THREAD 601 602 #define NUM_COEFFS_IN_4x4BLK 16 603 604 605 #define MEMSET_16BYTES(pu4_start,value) \ 606 { \ 607 memset(pu4_start,value,16); \ 608 } 609 610 #define MEMCPY_16BYTES(dst,src) \ 611 { \ 612 memcpy(dst,src,16); \ 613 } 614 615 616 #endif /*_IH264D_DEFS_H_*/ 617