HEVC Test Model (HM)  HM-16.3
NAL.h
Go to the documentation of this file.
1 /* The copyright in this software is being made available under the BSD
2  * License, included below. This software may be subject to other third party
3  * and contributor rights, including patent rights, and no such rights are
4  * granted under this license.
5  *
6  * Copyright (c) 2010-2015, ITU/ISO/IEC
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  * * Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18  * be used to endorse or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31  * THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #pragma once
35 
36 #ifndef __NAL__
37 #define __NAL__
38 
39 #include <sstream>
40 #include "CommonDef.h"
41 
43 
47 struct NALUnit
48 {
52 
55  NalUnitType nalUnitType,
56  Int temporalId = 0,
57  Int nuhLayerId = 0)
58  :m_nalUnitType (nalUnitType)
59  ,m_temporalId (temporalId)
60  ,m_nuhLayerId (nuhLayerId)
61  {}
62 
64  NALUnit() {}
65 
68  {
69  return m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_R
70  || m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_N
71  || m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_R
72  || m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_N
73  || m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_R
74  || m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_N
75  || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP
76  || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL
77  || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
78  || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
79  || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
80  || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA
81  || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N
82  || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R
83  || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N
84  || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R;
85  }
87  {
88  return m_nalUnitType == NAL_UNIT_PREFIX_SEI
89  || m_nalUnitType == NAL_UNIT_SUFFIX_SEI;
90  }
91 
93  {
94  return ( (UInt)m_nalUnitType < 32 );
95  }
96 };
97 
98 struct OutputNALUnit;
99 
103 struct NALUnitEBSP : public NALUnit
104 {
105  std::ostringstream m_nalUnitData;
106 
112  NALUnitEBSP(OutputNALUnit& nalu);
113 };
116 
117 #endif
Bool isSlice()
Definition: NAL.h:67
Defines constants, macros and tool parameters.
NALUnit(NalUnitType nalUnitType, Int temporalId=0, Int nuhLayerId=0)
Definition: NAL.h:54
unsigned int UInt
Definition: TypeDef.h:297
NalUnitType m_nalUnitType
nal_unit_type
Definition: NAL.h:49
Bool isSei()
Definition: NAL.h:86
NALUnit()
Definition: NAL.h:64
Bool isVcl()
Definition: NAL.h:92
bool Bool
Definition: TypeDef.h:286
NALUnitEBSP(OutputNALUnit &nalu)
Definition: NALwrite.h:80
UInt m_nuhLayerId
nuh_layer_id
Definition: NAL.h:51
int Int
Definition: TypeDef.h:296
std::ostringstream m_nalUnitData
Definition: NAL.h:105
NalUnitType
Definition: CommonDef.h:218
UInt m_temporalId
temporal_id
Definition: NAL.h:50
Definition: NAL.h:47