Tag Parser  9.1.2
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
avcinfo.h
Go to the documentation of this file.
1 #ifndef TAG_PARSER_AVCINFO_H
2 #define TAG_PARSER_AVCINFO_H
3 
4 #include "../aspectratio.h"
5 #include "../margin.h"
6 #include "../size.h"
7 
8 namespace CppUtilities {
9 class BinaryReader;
10 class BitReader;
11 } // namespace CppUtilities
12 
13 namespace TagParser {
14 
18 using ugolomb = std::uint32_t;
19 
23 using sgolomb = std::int32_t;
24 
26  constexpr TimingInfo();
27  std::uint32_t unitsInTick;
28  std::uint32_t timeScale;
29  std::uint8_t isPresent;
30  std::uint8_t fixedFrameRate;
31  constexpr std::int64_t defaultDuration() const;
32 };
33 
35  : unitsInTick(0)
36  , timeScale(0)
37  , isPresent(0)
38  , fixedFrameRate(0)
39 {
40 }
41 
42 constexpr std::int64_t TimingInfo::defaultDuration() const
43 {
44  return 1000000000ll * unitsInTick / timeScale;
45 }
46 
48  constexpr HrdParameters();
50  std::uint8_t bitRateScale;
51  std::uint8_t cpbSizeScale;
53  std::uint8_t cpbRemovalDelayLength;
54  std::uint8_t cpbOutputDelayLength;
55  std::uint8_t timeOffsetLength;
56 
57  void parse(CppUtilities::BitReader &reader);
58 };
59 
61  : cpbCount(0)
62  , bitRateScale(0)
63  , cpbSizeScale(0)
64  , initialCpbRemovalDelayLength(0)
65  , cpbRemovalDelayLength(0)
66  , cpbOutputDelayLength(0)
67  , timeOffsetLength(0)
68 {
69 }
70 
72  constexpr SpsInfo();
74  std::uint8_t profileIndication;
75  std::uint8_t profileConstraints;
76  std::uint8_t levelIndication;
85  std::uint8_t frameMbsOnly;
86  std::uint8_t vuiPresent;
91  std::uint8_t hrdParametersPresent;
94  std::uint8_t pictureStructPresent;
95  std::uint16_t size;
96 
97  void parse(CppUtilities::BinaryReader &reader, std::uint32_t maxSize);
98 };
99 
100 constexpr SpsInfo::SpsInfo()
101  : id(0)
102  , profileIndication(0)
103  , profileConstraints(0)
104  , levelIndication(0)
105  , chromaFormatIndication(0)
106  , pictureOrderCountType(0)
107  , log2MaxFrameNum(0)
108  , log2MaxPictureOrderCountLsb(0)
109  , offsetForNonRefPic(0)
110  , offsetForTopToBottomField(0)
111  , numRefFramesInPicOrderCntCycle(0)
112  , deltaPicOrderAlwaysZeroFlag(0)
113  , frameMbsOnly(0)
114  , vuiPresent(0)
115  , hrdParametersPresent(0)
116  , pictureStructPresent(0)
117  , size(0)
118 {
119 }
120 
122  constexpr PpsInfo();
125  std::uint8_t picOrderPresent;
126  std::uint16_t size;
127 
128  void parse(CppUtilities::BinaryReader &reader, std::uint32_t maxSize);
129 };
130 
131 constexpr PpsInfo::PpsInfo()
132  : id(0)
133  , spsId(0)
134  , picOrderPresent(false)
135  , size(0)
136 {
137 }
138 
140  constexpr SliceInfo();
141  std::uint8_t naluType;
142  std::uint8_t naluRefIdc;
143  std::uint8_t type;
144  std::uint8_t ppsId;
145  std::uint32_t frameNum;
148  std::uint32_t idrPicId;
149  std::uint32_t picOrderCntLsb;
150  std::uint32_t deltaPicOrderCntBottom;
151  std::uint32_t deltaPicOrderCnt[2];
152  std::uint32_t firstMbInSlice;
153  std::uint32_t sps;
154  std::uint32_t pps;
155 };
156 
158  : naluType(0)
159  , naluRefIdc(0)
160  , type(0)
161  , ppsId(0)
162  , frameNum(0)
163  , fieldPicFlag(false)
164  , bottomFieldFlag(false)
165  , idrPicId(0)
166  , picOrderCntLsb(0)
167  , deltaPicOrderCntBottom(0)
168  , deltaPicOrderCnt{ 0, 0 }
169  , firstMbInSlice(0)
170  , sps(0)
171  , pps(0)
172 {
173 }
174 
176  constexpr AvcFrame();
177  std::uint64_t start;
178  std::uint64_t end;
179  std::uint64_t ref1;
180  std::uint64_t ref2;
182  std::uint32_t presentationOrder;
183  std::uint32_t decodeOrder;
184  bool keyframe;
186 };
187 
189  : start(0)
190  , end(0)
191  , ref1(0)
192  , ref2(0)
193  , presentationOrder(0)
194  , decodeOrder(0)
195  , keyframe(false)
196  , hasProvidedTimecode(false)
197 {
198 }
199 
200 } // namespace TagParser
201 
202 #endif // TAG_PARSER_AVCINFO_H
TagParser::SpsInfo::numRefFramesInPicOrderCntCycle
ugolomb numRefFramesInPicOrderCntCycle
Definition: avcinfo.h:83
TagParser::SliceInfo::ppsId
std::uint8_t ppsId
Definition: avcinfo.h:144
TagParser::SliceInfo::firstMbInSlice
std::uint32_t firstMbInSlice
Definition: avcinfo.h:152
TagParser::SpsInfo::offsetForNonRefPic
sgolomb offsetForNonRefPic
Definition: avcinfo.h:81
TagParser::HrdParameters
The HrdParameters struct holds "Hypothetical Reference Decoder" parameters.
Definition: avcinfo.h:47
TagParser::SpsInfo::timingInfo
TimingInfo timingInfo
Definition: avcinfo.h:88
TagParser::TimingInfo::isPresent
std::uint8_t isPresent
Definition: avcinfo.h:29
TagParser::PpsInfo::spsId
ugolomb spsId
Definition: avcinfo.h:124
TagParser::SliceInfo
The SliceInfo struct holds the slice information of an AVC frame.
Definition: avcinfo.h:139
TagParser::SpsInfo::frameMbsOnly
std::uint8_t frameMbsOnly
Definition: avcinfo.h:85
TagParser::HrdParameters::cpbRemovalDelayLength
std::uint8_t cpbRemovalDelayLength
Definition: avcinfo.h:53
TagParser::HrdParameters::cpbOutputDelayLength
std::uint8_t cpbOutputDelayLength
Definition: avcinfo.h:54
TagParser::SliceInfo::type
std::uint8_t type
Definition: avcinfo.h:143
TagParser::SpsInfo::vuiPresent
std::uint8_t vuiPresent
Definition: avcinfo.h:86
TagParser::AvcFrame::decodeOrder
std::uint32_t decodeOrder
Definition: avcinfo.h:183
TagParser::SpsInfo::pictureStructPresent
std::uint8_t pictureStructPresent
Definition: avcinfo.h:94
TagParser::Margin
The Margin class defines the four margins of a rectangle.
Definition: margin.h:16
TagParser::SpsInfo::SpsInfo
constexpr SpsInfo()
Definition: avcinfo.h:100
TagParser::SpsInfo::cropping
Margin cropping
Definition: avcinfo.h:89
TagParser::TimingInfo::timeScale
std::uint32_t timeScale
Definition: avcinfo.h:28
TagParser::SpsInfo::pictureSize
Size pictureSize
Definition: avcinfo.h:90
TagParser::AvcFrame::ref2
std::uint64_t ref2
Definition: avcinfo.h:180
TagParser::AvcFrame::end
std::uint64_t end
Definition: avcinfo.h:178
TagParser::SpsInfo::pictureOrderCountType
ugolomb pictureOrderCountType
Definition: avcinfo.h:78
TagParser::TimingInfo::TimingInfo
constexpr TimingInfo()
Definition: avcinfo.h:34
TagParser::SpsInfo::pixelAspectRatio
AspectRatio pixelAspectRatio
Definition: avcinfo.h:87
TagParser::SpsInfo::profileIndication
std::uint8_t profileIndication
Definition: avcinfo.h:74
TagParser::TimingInfo
The TimingInfo struct holds timing information (part of SPS info).
Definition: avcinfo.h:25
TagParser::HrdParameters::initialCpbRemovalDelayLength
std::uint8_t initialCpbRemovalDelayLength
Definition: avcinfo.h:52
TagParser
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10
TagParser::SpsInfo::log2MaxPictureOrderCountLsb
ugolomb log2MaxPictureOrderCountLsb
Definition: avcinfo.h:80
TagParser::AvcFrame::hasProvidedTimecode
bool hasProvidedTimecode
Definition: avcinfo.h:185
TagParser::ugolomb
std::uint32_t ugolomb
Type used to store unsigned integer values using golomb coding.
Definition: avcinfo.h:18
TagParser::SpsInfo::chromaFormatIndication
ugolomb chromaFormatIndication
Definition: avcinfo.h:77
TagParser::SliceInfo::bottomFieldFlag
bool bottomFieldFlag
Definition: avcinfo.h:147
TagParser::SliceInfo::frameNum
std::uint32_t frameNum
Definition: avcinfo.h:145
TagParser::SpsInfo::levelIndication
std::uint8_t levelIndication
Definition: avcinfo.h:76
TagParser::PpsInfo::size
std::uint16_t size
Definition: avcinfo.h:126
TagParser::SliceInfo::naluType
std::uint8_t naluType
Definition: avcinfo.h:141
TagParser::SpsInfo::log2MaxFrameNum
ugolomb log2MaxFrameNum
Definition: avcinfo.h:79
TagParser::PpsInfo::id
ugolomb id
Definition: avcinfo.h:123
TagParser::SliceInfo::naluRefIdc
std::uint8_t naluRefIdc
Definition: avcinfo.h:142
TagParser::AvcFrame
The AvcFrame struct holds an AVC frame.
Definition: avcinfo.h:175
TagParser::SliceInfo::picOrderCntLsb
std::uint32_t picOrderCntLsb
Definition: avcinfo.h:149
TagParser::SpsInfo::offsetForTopToBottomField
sgolomb offsetForTopToBottomField
Definition: avcinfo.h:82
CppUtilities
Definition: abstractcontainer.h:15
TagParser::sgolomb
std::int32_t sgolomb
Type used to store signed integer values using golomb coding.
Definition: avcinfo.h:23
TagParser::Size
The Size class defines the size of a two-dimensional object using integer point precision.
Definition: size.h:16
TagParser::SpsInfo
The SpsInfo struct holds the sequence parameter set.
Definition: avcinfo.h:71
TagParser::SliceInfo::pps
std::uint32_t pps
Definition: avcinfo.h:154
TagParser::AvcFrame::sliceInfo
SliceInfo sliceInfo
Definition: avcinfo.h:181
TagParser::SpsInfo::id
ugolomb id
Definition: avcinfo.h:73
TagParser::HrdParameters::timeOffsetLength
std::uint8_t timeOffsetLength
Definition: avcinfo.h:55
TagParser::SpsInfo::profileConstraints
std::uint8_t profileConstraints
Definition: avcinfo.h:75
TagParser::TimingInfo::unitsInTick
std::uint32_t unitsInTick
Definition: avcinfo.h:27
TagParser::AvcFrame::start
std::uint64_t start
Definition: avcinfo.h:177
TagParser::SpsInfo::vclHrdParameters
HrdParameters vclHrdParameters
Definition: avcinfo.h:93
TagParser::HrdParameters::cpbCount
ugolomb cpbCount
Definition: avcinfo.h:49
TagParser::HrdParameters::cpbSizeScale
std::uint8_t cpbSizeScale
Definition: avcinfo.h:51
TagParser::AspectRatio
The AspectRatio struct defines an aspect ratio.
Definition: aspectratio.h:13
TagParser::SliceInfo::deltaPicOrderCntBottom
std::uint32_t deltaPicOrderCntBottom
Definition: avcinfo.h:150
TagParser::SliceInfo::SliceInfo
constexpr SliceInfo()
Definition: avcinfo.h:157
TagParser::TimingInfo::fixedFrameRate
std::uint8_t fixedFrameRate
Definition: avcinfo.h:30
TagParser::SliceInfo::fieldPicFlag
bool fieldPicFlag
Definition: avcinfo.h:146
TagParser::SliceInfo::idrPicId
std::uint32_t idrPicId
Definition: avcinfo.h:148
TAG_PARSER_EXPORT
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
TagParser::AvcFrame::ref1
std::uint64_t ref1
Definition: avcinfo.h:179
TagParser::HrdParameters::HrdParameters
constexpr HrdParameters()
Definition: avcinfo.h:60
TagParser::HrdParameters::bitRateScale
std::uint8_t bitRateScale
Definition: avcinfo.h:50
TagParser::TimingInfo::defaultDuration
constexpr std::int64_t defaultDuration() const
Definition: avcinfo.h:42
TagParser::SpsInfo::deltaPicOrderAlwaysZeroFlag
std::uint8_t deltaPicOrderAlwaysZeroFlag
Definition: avcinfo.h:84
TagParser::PpsInfo::PpsInfo
constexpr PpsInfo()
Definition: avcinfo.h:131
TagParser::PpsInfo
The PpsInfo struct holds the picture parameter set.
Definition: avcinfo.h:121
TagParser::SpsInfo::size
std::uint16_t size
Definition: avcinfo.h:95
TagParser::AvcFrame::AvcFrame
constexpr AvcFrame()
Definition: avcinfo.h:188
TagParser::SpsInfo::hrdParametersPresent
std::uint8_t hrdParametersPresent
Definition: avcinfo.h:91
TagParser::AvcFrame::presentationOrder
std::uint32_t presentationOrder
Definition: avcinfo.h:182
TagParser::AvcFrame::keyframe
bool keyframe
Definition: avcinfo.h:184
TagParser::SliceInfo::sps
std::uint32_t sps
Definition: avcinfo.h:153
TagParser::SpsInfo::nalHrdParameters
HrdParameters nalHrdParameters
Definition: avcinfo.h:92
TagParser::PpsInfo::picOrderPresent
std::uint8_t picOrderPresent
Definition: avcinfo.h:125