source: 3DVCSoftware/branches/HTM-13.1-dev0/source/Lib/TLibCommon/NAL.h @ 1314

Last change on this file since 1314 was 1175, checked in by tech, 10 years ago

Added direct dependency type for qtl.
Updated cfg files.
updated copy right headers.

File size: 4.3 KB
Line 
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#include <vector>
37#include <sstream>
38#include "CommonDef.h"
39
40class TComOutputBitstream;
41
42/**
43 * Represents a single NALunit header and the associated RBSPayload
44 */
45struct NALUnit
46{
47  NalUnitType m_nalUnitType; ///< nal_unit_type
48  UInt        m_temporalId;  ///< temporal_id
49#if H_MV
50  Int         m_layerId;     ///< layer id
51#else
52  UInt        m_reservedZero6Bits; ///< reserved_zero_6bits
53#endif
54
55  /** construct an NALunit structure with given header values. */
56  NALUnit(
57    NalUnitType nalUnitType,
58    Int         temporalId = 0,
59#if H_MV
60    Int         layerId = 0)
61#else
62    Int         reservedZero6Bits = 0)
63#endif
64    :m_nalUnitType (nalUnitType)
65    ,m_temporalId  (temporalId)
66#if H_MV
67    ,m_layerId     (layerId)
68#else
69    ,m_reservedZero6Bits(reservedZero6Bits)
70#endif
71  {}
72
73  /** default constructor - no initialization; must be perfomed by user */
74  NALUnit() {}
75
76  /** returns true if the NALunit is a slice NALunit */
77  Bool isSlice()
78  {
79    return m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_R
80        || m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_N
81        || m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_R
82        || m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_N
83        || m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_R
84        || m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_N
85        || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP
86        || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL
87        || m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
88        || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
89        || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
90        || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA
91        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N
92        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R
93        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N
94        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R;
95  }
96  Bool isSei()
97  {
98    return m_nalUnitType == NAL_UNIT_PREFIX_SEI
99        || m_nalUnitType == NAL_UNIT_SUFFIX_SEI;
100  }
101
102  Bool isVcl()
103  {
104    return ( (UInt)m_nalUnitType < 32 );
105  }
106};
107
108struct OutputNALUnit;
109
110/**
111 * A single NALunit, with complete payload in EBSP format.
112 */
113struct NALUnitEBSP : public NALUnit
114{
115  std::ostringstream m_nalUnitData;
116
117  /**
118   * convert the OutputNALUnit #nalu# into EBSP format by writing out
119   * the NALUnit header, then the rbsp_bytes including any
120   * emulation_prevention_three_byte symbols.
121   */
122  NALUnitEBSP(OutputNALUnit& nalu);
123};
124//! \}
125//! \}
Note: See TracBrowser for help on using the repository browser.