1 /*--------------------------------------------------------------------------
2 Copyright (c) 2013, The Linux Foundation. All rights reserved.
3 
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6     * Redistributions of source code must retain the above copyright
7       notice, this list of conditions and the following disclaimer.
8     * Redistributions in binary form must reproduce the above copyright
9       notice, this list of conditions and the following disclaimer in the
10       documentation and/or other materials provided with the distribution.
11     * Neither the name of The Linux Foundation nor
12       the names of its contributors may be used to endorse or promote
13       products derived from this software without specific prior written
14       permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 --------------------------------------------------------------------------*/
28 
29 
30 #ifndef HEVC_UTILS_H
31 #define HEVC_UTILS_H
32 
33 /*========================================================================
34 
35                                  O p e n M M
36          U t i l i t i e s   a n d   H e l p e r   R o u t i n e s
37 
38 *//** @file HEVC_Utils.h
39 This module contains H264 video decoder utilities and helper routines.
40 
41 *//*====================================================================== */
42 
43 /* =======================================================================
44 
45                      INCLUDE FILES FOR MODULE
46 
47 ========================================================================== */
48 #include <stdio.h>
49 #include <utils/Log.h>
50 #include "Map.h"
51 #include "qtypes.h"
52 #include "OMX_Core.h"
53 #include "OMX_QCOMExtns.h"
54 
55 
56 class HEVC_Utils
57 {
58 public:
59     HEVC_Utils();
60     ~HEVC_Utils();
61 
62 	enum {
63 		NAL_UNIT_CODED_SLICE_TRAIL_N,	// 0
64 		NAL_UNIT_CODED_SLICE_TRAIL_R,	// 1
65 		NAL_UNIT_CODED_SLICE_TSA_N,		// 2
66 		NAL_UNIT_CODED_SLICE_TLA,		// 3
67 		NAL_UNIT_CODED_SLICE_STSA_N,    // 4
68 		NAL_UNIT_CODED_SLICE_STSA_R,	// 5
69 		NAL_UNIT_CODED_SLICE_RADL_N,	// 6
70 		NAL_UNIT_CODED_SLICE_DLP,		// 7
71 		NAL_UNIT_CODED_SLICE_RASL_N,	// 8
72 		NAL_UNIT_CODED_SLICE_TFD,		// 9
73 		NAL_UNIT_RESERVED_10,
74 		NAL_UNIT_RESERVED_11,
75 		NAL_UNIT_RESERVED_12,
76 		NAL_UNIT_RESERVED_13,
77 		NAL_UNIT_RESERVED_14,
78 		NAL_UNIT_RESERVED_15,
79 		NAL_UNIT_CODED_SLICE_BLA,		// 16
80 		NAL_UNIT_CODED_SLICE_BLANT,		// 17
81 		NAL_UNIT_CODED_SLICE_BLA_N_LP,	// 18
82 		NAL_UNIT_CODED_SLICE_IDR,		// 19
83 		NAL_UNIT_CODED_SLICE_IDR_N_LP,	// 20
84 		NAL_UNIT_CODED_SLICE_CRA,		// 21
85 		NAL_UNIT_RESERVED_22,
86 		NAL_UNIT_RESERVED_23,
87 		NAL_UNIT_RESERVED_24,
88 		NAL_UNIT_RESERVED_25,
89 		NAL_UNIT_RESERVED_26,
90 		NAL_UNIT_RESERVED_27,
91 
92 		NAL_UNIT_RESERVED_28,
93 		NAL_UNIT_RESERVED_29,
94 		NAL_UNIT_RESERVED_30,
95 		NAL_UNIT_RESERVED_31,
96 
97 		NAL_UNIT_VPS,					// 32
98 		NAL_UNIT_SPS,					// 33
99 		NAL_UNIT_PPS,					// 34
100 		NAL_UNIT_ACCESS_UNIT_DELIMITER, // 35
101 		NAL_UNIT_EOS,					// 36
102 		NAL_UNIT_EOB,					// 37
103 		NAL_UNIT_FILLER_DATA,			// 38
104 		NAL_UNIT_SEI,					// 39 Prefix SEI
105 		NAL_UNIT_SEI_SUFFIX,			// 40 Suffix SEI
106 
107 		NAL_UNIT_RESERVED_41,
108 		NAL_UNIT_RESERVED_42,
109 		NAL_UNIT_RESERVED_43,
110 		NAL_UNIT_RESERVED_44,
111 		NAL_UNIT_RESERVED_45,
112 		NAL_UNIT_RESERVED_46,
113 		NAL_UNIT_RESERVED_47,
114 		NAL_UNIT_UNSPECIFIED_48,
115 		NAL_UNIT_UNSPECIFIED_49,
116 		NAL_UNIT_UNSPECIFIED_50,
117 		NAL_UNIT_UNSPECIFIED_51,
118 		NAL_UNIT_UNSPECIFIED_52,
119 		NAL_UNIT_UNSPECIFIED_53,
120 		NAL_UNIT_UNSPECIFIED_54,
121 		NAL_UNIT_UNSPECIFIED_55,
122 		NAL_UNIT_UNSPECIFIED_56,
123 		NAL_UNIT_UNSPECIFIED_57,
124 		NAL_UNIT_UNSPECIFIED_58,
125 		NAL_UNIT_UNSPECIFIED_59,
126 		NAL_UNIT_UNSPECIFIED_60,
127 		NAL_UNIT_UNSPECIFIED_61,
128 		NAL_UNIT_UNSPECIFIED_62,
129 		NAL_UNIT_UNSPECIFIED_63,
130 		NAL_UNIT_INVALID,
131 	};
132 
133 
134     void initialize_frame_checking_environment();
135     bool isNewFrame(OMX_BUFFERHEADERTYPE *p_buf_hdr,
136                     OMX_IN OMX_U32 size_of_nal_length_field,
137                     OMX_OUT OMX_BOOL &isNewFrame);
138 
139 private:
140 
141     bool              m_forceToStichNextNAL;
142     bool              m_au_data;
143     uint32 nalu_type;
144 };
145 
146 #endif /* HEVC_UTILS_H */
147