• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  /**
21  *******************************************************************************
22  * @file
23  *  ih264_defs.h
24  *
25  * @brief
26  *  Definitions used in the codec
27  *
28  * @author
29  *  Ittiam
30  *
31  *
32  * @remarks
33  *  None
34  *
35  *******************************************************************************
36  */
37  
38  #ifndef IH264_DEFS_H_
39  #define IH264_DEFS_H_
40  
41  /*****************************************************************************/
42  /* Enums                                                                     */
43  /*****************************************************************************/
44  
45  
46  /*****************************************************************************/
47  /* Profile and Levels                                                        */
48  /*****************************************************************************/
49  
50  /**
51  ******************************************************************************
52   *  @enum  PROFILE_IDC
53   *  @brief Defines the set of possible profiles
54  ******************************************************************************
55  */
56  enum
57  {
58      IH264_PROFILE_BASELINE = 66,
59      IH264_PROFILE_MAIN = 77,
60      IH264_PROFILE_EXTENDED = 88,
61      IH264_PROFILE_HIGH = 100,
62      IH264_PROFILE_HIGH10 = 110,
63      IH264_PROFILE_HIGH422 = 122,
64      IH264_PROFILE_HIGH444 = 144,
65  };
66  
67  /**
68  ******************************************************************************
69   *  @enum  LEVEL_IDC
70   *  @brief Defines the set of possible levels
71  ******************************************************************************
72  */
73  typedef enum
74  {
75      IH264_LEVEL_10         = 10,
76      IH264_LEVEL_1B         = 9,
77      IH264_LEVEL_11         = 11,
78      IH264_LEVEL_12         = 12,
79      IH264_LEVEL_13         = 13,
80      IH264_LEVEL_20         = 20,
81      IH264_LEVEL_21         = 21,
82      IH264_LEVEL_22         = 22,
83      IH264_LEVEL_30         = 30,
84      IH264_LEVEL_31         = 31,
85      IH264_LEVEL_32         = 32,
86      IH264_LEVEL_40         = 40,
87      IH264_LEVEL_41         = 41,
88      IH264_LEVEL_42         = 42,
89      IH264_LEVEL_50         = 50,
90      IH264_LEVEL_51         = 51,
91  }IH264_LEVEL_T;
92  
93  
94  /**
95  ******************************************************************************
96   *  @enum  PIC TYPES
97   *  @brief Defines the set of possible picture type - not signaled in bitstream
98  ******************************************************************************
99  */
100  typedef enum
101  {
102      PIC_NA = 0x7FFFFFFF,
103      PIC_IDR = 0,
104      PIC_I = 1,
105      PIC_P = 2,
106      PIC_B = 3,
107      PIC_P_NONREF = 4,
108      PIC_B_NONREF = 5,
109      PIC_MAX,
110  }PIC_TYPE_T;
111  
112  /**
113  ******************************************************************************
114   *  @enum  FRAME-FIELD types
115   *  @brief Defines the set of possible field types.
116  ******************************************************************************
117  */
118  enum
119  {
120      TOP_FIELD,
121      BOTTOM_FIELD,
122      FRAME,
123  };
124  
125  /**
126  ******************************************************************************
127   *  @enum  SLICE TYPES
128   *  @brief Defines the set of possible SLICE TYPES
129  ******************************************************************************
130  */
131  enum
132  {
133      PSLICE = 0,
134      BSLICE = 1,
135      ISLICE = 2,
136      SPSLICE = 3,
137      SISLICE = 4,
138      MAXSLICE_TYPE,
139  };
140  
141  /**
142  ******************************************************************************
143   *  @enum  NAL_UNIT_TYPE
144   *  @brief Defines the set of possible nal unit types
145  ******************************************************************************
146  */
147  enum
148  {
149      NAL_UNSPEC_0        = 0,
150      NAL_SLICE_NON_IDR   = 1,
151      NAL_SLICE_DPA       = 2,
152      NAL_SLICE_DPB       = 3,
153      NAL_SLICE_DPC       = 4,
154      NAL_SLICE_IDR       = 5,
155      NAL_SEI             = 6,
156      NAL_SPS             = 7,
157      NAL_PPS             = 8,
158      NAL_AUD             = 9,
159      NAL_EOSEQ           = 10,
160      NAL_EOSTR           = 11,
161      NAL_FILLER          = 12,
162      NAL_SPSE            = 13,
163      NAL_RES_18          = 14,
164      NAL_AUX_PIC         = 19,
165      NAL_RES_23          = 20,
166      NAL_UNSPEC_31       = 24,
167  };
168  
169  /**
170  ******************************************************************************
171   *  @enum  CHROMA_FORMAT_IDC
172   *  @brief Defines the set of possible chroma formats
173   *  Note Chorma format Do not change enum values
174  ******************************************************************************
175  */
176  enum
177  {
178      CHROMA_FMT_IDC_MONOCHROME   = 0,
179      CHROMA_FMT_IDC_YUV420       = 1,
180      CHROMA_FMT_IDC_YUV422       = 2,
181      CHROMA_FMT_IDC_YUV444       = 3,
182      CHROMA_FMT_IDC_YUV444_PLANES = 4,
183  };
184  
185  
186  /**
187  ******************************************************************************
188   *  @enum  MBMODES_I16x16
189   *  @brief Defines the set of possible intra 16x16 mb modes
190  ******************************************************************************
191  */
192  typedef enum
193  {
194      VERT_I16x16     = 0,
195      HORZ_I16x16     = 1,
196      DC_I16x16       = 2,
197      PLANE_I16x16    = 3,
198      MAX_I16x16      = 4,
199  }MBMODES_I16x16;
200  
201  /**
202  ******************************************************************************
203   *  @enum  MBMODES_I4x4
204   *  @brief Defines the set of possible intra 4x4 mb modes
205  ******************************************************************************
206  */
207  typedef enum
208  {
209      VERT_I4x4     = 0,
210      HORZ_I4x4     = 1,
211      DC_I4x4       = 2,
212      DIAG_DL_I4x4  = 3,
213      DIAG_DR_I4x4  = 4,
214      VERT_R_I4x4   = 5,
215      HORZ_D_I4x4   = 6,
216      VERT_L_I4x4   = 7,
217      HORZ_U_I4x4   = 8,
218      MAX_I4x4      = 9,
219  }MBMODES_I4x4;
220  
221  /**
222  ******************************************************************************
223   *  @enum  MBMODES_I8x8
224   *  @brief Defines the set of possible intra 8x8 mb modes
225  ******************************************************************************
226  */
227  typedef enum
228  {
229      VERT_I8x8     = 0,
230      HORZ_I8x8     = 1,
231      DC_I8x8       = 2,
232      DIAG_DL_I8x8  = 3,
233      DIAG_DR_I8x8  = 4,
234      VERT_R_I8x8   = 5,
235      HORZ_D_I8x8   = 6,
236      VERT_L_I8x8   = 7,
237      HORZ_U_I8x8   = 8,
238      MAX_I8x8      = 9,
239  }MBMODES_I8x8;
240  
241  /**
242  ******************************************************************************
243   *  @enum  MBMODES_CHROMA_I8x8 (Chroma)
244   *  @brief Defines the set of possible intra 8x8 mb modes for chroma
245  ******************************************************************************
246  */
247  typedef enum
248  {
249      DC_CH_I8x8     = 0,
250      HORZ_CH_I8x8   = 1,
251      VERT_CH_I8x8   = 2,
252      PLANE_CH_I8x8  = 3,
253      MAX_CH_I8x8    = 4,
254  }MBMODES_CHROMA_I8x8;
255  
256  /**
257  ******************************************************************************
258   *  @enum  MBTYPES
259   *  @brief Defines the set of possible macro block types
260  ******************************************************************************
261  */
262  typedef enum
263  {
264      I16x16      = 0,
265      I4x4        = 1,
266      I8x8        = 2,
267      P16x16      = 3,
268      P16x8       = 4,
269      P8x16       = 5,
270      P8x8        = 6,
271      PSKIP       = 7,
272      IPCM        = 8,
273      B16x16      = 9,
274      BSKIP       = 10,
275      BDIRECT     = 11,
276      MAX_MBTYPES,
277  }MBTYPES_T;
278  
279  /* Prediction list */
280  /* Do not change enum values */
281  enum
282  {
283      PRED_L0 = 0,
284      PRED_L1 = 1,
285      PRED_BI = 2
286  };
287  
288  
289  /**
290  ******************************************************************************
291   *  @enum  ENTROPY_BLK_TYPE
292   *  @brief Defines the nature of blocks employed in entropy coding
293  ******************************************************************************
294  */
295  typedef enum
296  {
297      ENTROPY_BLK_INVALID = -1,
298      CAVLC_LUMA_4x4_DC = 0,
299      CAVLC_LUMA_4x4_AC = 1,
300      CAVLC_LUMA_4x4 = 2,
301      CAVLC_CHROMA_4x4_DC = 3,
302      CAVLC_CHROMA_4x4_AC = 4,
303  } ENTROPY_BLK_TYPE;
304  
305  /**
306  ******************************************************************************
307   *  @enum  ENTROPY_MODE
308   *  @brief Entropy coding modes
309  ******************************************************************************
310  */
311  typedef enum
312  {
313      CAVLC = 0,
314      CABAC = 1,
315  } ENTROPY_MODE;
316  
317  /**
318  ******************************************************************************
319   *  @enum  COMPONENT_TYPE
320   *  @brief components Y, U & V
321  ******************************************************************************
322  */
323  typedef enum
324  {
325      Y,
326      U,
327      V,
328  } COMPONENT_TYPE;
329  
330  
331  /**
332  ******************************************************************************
333   *  @enum  MBPART_PREDMODE_T
334   *  @brief MbPartps_pred_mode_ctxt Table 7-11 to 7-14
335  ******************************************************************************
336  */
337  typedef enum
338  {
339      MBPART_NA,
340      MBPART_I4x4,
341      MBPART_I8x8,
342      MBPART_I16x16,
343      MBPART_L0,
344      MBPART_L1,
345      MBPART_BI,
346      MBPART_DIRECT,
347      MBPART_IPCM,
348  }MBPART_PREDMODE_T;
349  
350  
351  typedef enum
352  {
353      I_NxN,
354      I_16x16_0_0_0,
355      I_16x16_1_0_0,
356      I_16x16_2_0_0,
357      I_16x16_3_0_0,
358      I_16x16_0_1_0,
359      I_16x16_1_1_0,
360      I_16x16_2_1_0,
361      I_16x16_3_1_0,
362      I_16x16_0_2_0,
363      I_16x16_1_2_0,
364      I_16x16_2_2_0,
365      I_16x16_3_2_0,
366      I_16x16_0_0_1,
367      I_16x16_1_0_1,
368      I_16x16_2_0_1,
369      I_16x16_3_0_1,
370      I_16x16_0_1_1,
371      I_16x16_1_1_1,
372      I_16x16_2_1_1,
373      I_16x16_3_1_1,
374      I_16x16_0_2_1,
375      I_16x16_1_2_1,
376      I_16x16_2_2_1,
377      I_16x16_3_2_1,
378      I_PCM,
379  }MBTYPE_ISLICE_T;
380  
381  typedef enum
382  {
383      P_L0_16x16,
384      P_L0_L0_16x8,
385      P_L0_L0_8x16,
386      P_8x8,
387      P_8x8REF0,
388      P_SKIP
389  }MBTYPE_PSLICE_T;
390  
391  typedef enum
392  {
393      B_DIRECT_16x16,
394      B_L0_16x16,
395      B_L1_16x16,
396      B_BI_16x16,
397      B_L0_L0_16x8,
398      B_L0_L0_8x16,
399      B_L1_L1_16x8,
400      B_L1_L1_8x16,
401      B_L0_L1_16x8,
402      B_L0_L1_8x16,
403      B_L1_L0_16x8,
404      B_L1_L0_8x16,
405      B_L0_BI_16x8,
406      B_L0_BI_8x16,
407      B_L1_BI_16x8,
408      B_L1_BI_8x16,
409      B_BI_L0_16x8,
410      B_BI_L0_8x16,
411      B_BI_L1_16x8,
412      B_BI_L1_8x16,
413      B_BI_BI_16x8,
414      B_BI_BI_8x16,
415      B_8x8,
416      B_SKIP,
417  }MBTYPE_BSLICE_T;
418  
419  
420  typedef enum
421  {
422      P_L0_8x8,
423      P_L0_8x4,
424      P_L0_4x8,
425      P_L0_4x4,
426  }SUBMBTYPE_PSLICE_T;
427  
428  typedef enum
429  {
430      B_DIRECT_8x8,
431      B_L0_8x8,
432      B_L1_8x8,
433      B_BI_8x8,
434      B_L0_8x4,
435      B_L0_4x8,
436      B_L1_8x4,
437      B_L1_4x8,
438      B_BI_8x4,
439      B_BI_4x8,
440      B_L0_4x4,
441      B_L1_4x4,
442      B_BI_4x4,
443  }SUBMBTYPE_BSLICE_T;
444  
445  /**
446   * DC Mode pattern for 4 4x4 sub blocks in an MB row
447   */
448  #define DC_I16X16_MB_ROW (DC_I16x16 << 24) | (DC_I16x16 << 16) | \
449                           (DC_I16x16 << 8)  | DC_I16x16
450  
451  
452  
453  /*****************************************************************************/
454  /* Constant Macros                                                           */
455  /*****************************************************************************/
456  
457  /*****************************************************************************/
458  /* Reference frame defs                                                      */
459  /*****************************************************************************/
460  /* Maximum DPB size */
461  #define MAX_DPB_SIZE 16
462  
463  /* Maximum mmco commands in slice header */
464  #define MAX_MMCO_COMMANDS 32
465  
466  /* Maximum reference reorder idc */
467  #define MAX_MODICATION_IDC 32
468  
469  /*****************************************************************************/
470  /* SPS restrictions                                                          */
471  /*****************************************************************************/
472  
473  /* Number of SPS allowed */
474  /* An extra buffer is allocated to write the parsed data
475   * It is copied to the appropriate location later */
476  #define MAX_SPS_CNT         (32 + 1)
477  
478  /* Maximum long term reference pics */
479  #define MAX_LTREF_PICS_SPS 16
480  
481  /* Maximum short term reference pics */
482  #define MAX_STREF_PICS_SPS 64
483  
484  
485  /*****************************************************************************/
486  /* PPS restrictions                                                          */
487  /*****************************************************************************/
488  
489  /* Number of PPS allowed  */
490  /* An extra buffer is allocated to write the parsed data
491   * It is copied to the appropriate location later */
492  #define MAX_PPS_CNT         (256 + 1)
493  
494  /*****************************************************************************/
495  /* Macro definitions for sizes of MB, PU, TU, CU                            */
496  /*****************************************************************************/
497  #define MB_SIZE             16
498  #define BLK8x8SIZE          8
499  #define BLK_SIZE            4
500  
501  
502  /* TU Size Range */
503  #define MAX_TU_SIZE         8
504  #define MIN_TU_SIZE         4
505  
506  /* Max Transform Size */
507  #define MAX_TRANS_SIZE      (MAX_TU_SIZE*MAX_TU_SIZE)
508  
509  /* PU Size Range */
510  #define MAX_PU_SIZE         16
511  #define MIN_PU_SIZE         4
512  
513  /* Number of max TU in a MB row */
514  #define MAX_TU_IN_MB_ROW   ((MB_SIZE / MIN_TU_SIZE))
515  
516  /* Number of max PU in a CTb row */
517  #define MAX_PU_IN_MB_ROW   ((MB_SIZE / MIN_PU_SIZE))
518  
519  
520  /* Number of max PU in a MB */
521  /*****************************************************************************/
522  /* Note though for 64 x 64 MB, Max PU in MB is 128, in order to store      */
523  /*  intra pred info, 256 entries are needed                                  */
524  /*****************************************************************************/
525  #define MAX_PU_IN_MB       ((MB_SIZE / MIN_PU_SIZE) * \
526                               (MB_SIZE / MIN_PU_SIZE))
527  
528  /* Number of max TU in a MB */
529  #define MAX_TU_IN_MB       ((MB_SIZE / MIN_TU_SIZE) * \
530                               (MB_SIZE / MIN_TU_SIZE))
531  
532  
533  
534  /**
535   * Maximum transform depths
536   */
537  #define MAX_TRAFO_DEPTH 5
538  
539  #define MAX_DC_4x4_SUBBLK_LUMA 1
540  #define MAX_AC_4x4_SUBBLK_LUMA 16
541  #define MAX_DC_4x4_SUBBLK_CHROMA 2
542  #define MAX_AC_4x4_SUBBLK_CHROMA 8
543  
544  #define MAX_4x4_SUBBLKS (MAX_DC_4x4_SUBBLK_LUMA + MAX_DC_4x4_SUBBLK_CHROMA +\
545                           MAX_AC_4x4_SUBBLK_LUMA + MAX_AC_4x4_SUBBLK_CHROMA)
546  
547  /* Max number of deblocking edges */
548  #define MAX_VERT_DEBLK_EDGES ((MB_SIZE/8) * (MB_SIZE/4))
549  #define MAX_HORZ_DEBLK_EDGES ((MB_SIZE/4) * (MB_SIZE/8))
550  
551  /* Qp can not change below 8x8 level */
552  #define MAX_DEBLK_QP_CNT     ((MB_SIZE/8) * (MB_SIZE/8))
553  
554  /*****************************************************************************/
555  /* Parsing related macros                                                    */
556  /*****************************************************************************/
557  #define SUBBLK_COEFF_CNT    16
558  
559  /* Quant and Trans defs */
560  
561  /*****************************************************************************/
562  /* Sizes for Transform functions                                             */
563  /*****************************************************************************/
564  #define TRANS_SIZE_4   4
565  #define TRANS_SIZE_8   8
566  #define TRANS_SIZE_16 16
567  #define TRANS_SIZE_32 32
568  
569  
570  #define IT_SHIFT_STAGE_1 7
571  #define IT_SHIFT_STAGE_2 12
572  
573  /**
574   * @breif  Maximum transform dynamic range (excluding sign bit)
575   */
576  #define MAX_TR_DYNAMIC_RANGE  15
577  
578  /**
579   * @brief  Q(QP%6) * IQ(QP%6) = 2^20
580   */
581  #define QUANT_IQUANT_SHIFT    20
582  
583  /**
584   * @breif Q factor for Qp%6 multiplication
585   */
586  #define QUANT_SHIFT           14
587  
588  /**
589   * @breif Q shift factor for flat rescale matrix weights
590   */
591  #define FLAT_RESCALE_MAT_Q_SHIFT    11
592  
593  /**
594   * @breif  Scaling matrix is represented in Q15 format
595   */
596  #define SCALING_Q_SHIFT       15
597  
598  /**
599   * @brief  rounding factor for quantization represented in Q9 format
600   */
601  #define QUANT_ROUND_FACTOR_Q   9
602  
603  /**
604   * @brief  Minimum qp supported in H264 spec
605   */
606  #define MIN_H264_QP 0
607  
608  /**
609   * @brief  Maximum qp supported in H264 spec
610   */
611  #define MAX_H264_QP 51
612  
613  /**
614   * @breif  Total number of transform sizes
615   * used for sizeID while getting scale matrix
616   */
617  #define NUM_UNIQUE_TRANS_SIZE 4
618  
619  /**
620   * @breif  Maximum number of bits in frameNumber signaling
621   */
622  #define MAX_BITS_IN_FRAME_NUM     16
623  
624  /**
625   * @breif  Maximum number of bits in POC LSB signaling
626   */
627  #define MAX_BITS_IN_POC_LSB     16
628  
629  
630  /**
631   * @breif  Maximum PIC Order Count type
632   */
633  #define MAX_PIC_ORDER_COUNT_TYPE    2
634  
635  
636  /**
637   * @breif  Maximum Weighted bipred idc
638   */
639  #define MAX_WEIGHT_BIPRED_IDC 2
640  
641  /*****************************************************************************/
642  /* Number of scaling matrices for each transform size                        */
643  /*****************************************************************************/
644  #define SCALE_MAT_CNT_TRANS_SIZE_4    6
645  #define SCALE_MAT_CNT_TRANS_SIZE_8    6
646  #define SCALE_MAT_CNT_TRANS_SIZE_16   6
647  #define SCALE_MAT_CNT_TRANS_SIZE_32   2
648  
649  /* Maximum number of scale matrices for a given transform size */
650  #define SCALE_MAT_CNT_MAX_PER_TRANS_SIZE 6
651  
652  /* Total number of scale matrices */
653  #define TOTAL_SCALE_MAT_COUNT   (SCALE_MAT_CNT_TRANS_SIZE_4     + \
654                                   SCALE_MAT_CNT_TRANS_SIZE_8     + \
655                                   SCALE_MAT_CNT_TRANS_SIZE_16    + \
656                                   SCALE_MAT_CNT_TRANS_SIZE_32)
657  
658  
659  /*****************************************************************************/
660  /* Intra pred Macros                                                         */
661  /*****************************************************************************/
662  /** Planar Intra prediction mode */
663  #define INTRA_PLANAR             0
664  
665  /** DC Intra prediction mode */
666  #define INTRA_DC                 1
667  
668  /** Gives angular mode for intra prediction */
669  #define INTRA_ANGULAR(x) (x)
670  
671  /** Following is used to signal no intra prediction in case of pcm blocks
672   */
673  #define INTRA_PRED_NONE  63
674  
675  
676  /** Following is used to signal no intra prediction is needed for first three
677   * 4x4 luma blocks in case of 4x4 TU sizes
678   * Also used in pcm cases
679   */
680  #define INTRA_PRED_CHROMA_IDX_NONE  7
681  
682  
683  /**
684  ******************************************************************************
685   *  @brief  neighbor availability masks
686  ******************************************************************************
687   */
688  #define LEFT_MB_AVAILABLE_MASK      0x01
689  #define TOP_LEFT_MB_AVAILABLE_MASK  0x02
690  #define TOP_MB_AVAILABLE_MASK       0x04
691  #define TOP_RIGHT_MB_AVAILABLE_MASK 0x08
692  
693  #endif /* IH264_DEFS_H_ */
694