MythTV master
H2645Parser.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2/*******************************************************************
3 * H2645Parser
4 *
5 * Distributed as part of MythTV (www.mythtv.org)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 *
21 ********************************************************************/
22
23#ifndef H2645PARSER_H
24#define H2645PARSER_H
25
26#include <cstdint>
27
28#include <QString>
29
30#include "libmythbase/compat.h" // for uint on Darwin, MinGW
31#include "libmythbase/mythconfig.h"
32
34#include "libmythtv/scantype.h"
35
36class BitReader;
37
39 public:
40 static constexpr uint16_t kMaxSliceHeaderSize { 256 };
41
42 enum field_type : std::uint8_t {
43 FRAME = 'F',
44 FIELD_TOP = 'T',
45 FIELD_BOTTOM = 'B'
46 };
47
48 H2645Parser(void);
50 virtual ~H2645Parser(void) {delete [] m_rbspBuffer;}
51
52 virtual uint32_t addBytes(const uint8_t *bytes,
53 uint32_t byte_count,
54 uint64_t stream_offset) = 0;
55 virtual void Reset(void);
56
57 virtual QString NAL_type_str(int8_t type) = 0;
58
59 bool stateChanged(void) const { return m_stateChanged; }
60
61 bool onFrameStart(void) const { return m_onFrame; }
62 bool onKeyFrameStart(void) const { return m_onKeyFrame; }
63
64 uint pictureWidth(void) const { return m_picWidth; }
65 uint pictureHeight(void) const { return m_picHeight; }
66 virtual uint pictureWidthCropped(void) const = 0;
67 virtual uint pictureHeightCropped(void) const = 0;
68
71 uint aspectRatio(void) const;
72 virtual MythAVRational getFrameRate() const = 0;
73 virtual field_type getFieldType(void) const = 0;
74
75 uint64_t frameAUstreamOffset(void) const {return m_frameStartOffset;}
76 uint64_t keyframeAUstreamOffset(void) const {return m_keyframeStartOffset;}
77 uint64_t SPSstreamOffset(void) const {return m_spsOffset;}
78
79 uint32_t GetTimeScale(void) const { return m_timeScale; }
80 uint32_t GetUnitsInTick(void) const { return m_unitsInTick; }
81 SCAN_t GetScanType(void) const { return m_scanType; }
82
83 enum NAL_unit_type : std::int8_t {
84 UNKNOWN = -1
85 };
86
87 enum SLICE_type : std::uint8_t {
98 SLICE_UNDEF = 10
99 };
100
101 protected:
102 static constexpr uint8_t kExtendedSar { 255 };
103
104 void resetRBSP(void);
105 bool fillRBSP(const uint8_t *byteP, uint32_t byte_count,
106 bool found_start_code);
107
108 void vui_parameters(BitReader& br, bool hevc);
109
110 uint64_t m_framecnt {0};
111 uint64_t m_keyframecnt {0};
112 uint64_t m_totalframecnt {0};
113 uint64_t m_totalkeyframecnt {0};
114 uint64_t m_auOffset {0};
115 uint64_t m_frameStartOffset {0};
117 uint64_t m_pktOffset {0};
118 uint64_t m_spsOffset {0};
119
120 uint32_t m_consecutiveZeros {0};
121 uint32_t m_rbspBufferSize {188 * 2};
122 uint32_t m_rbspIndex {0};
123 uint32_t m_syncAccumulator {0xffffffff};
124 uint32_t m_timeScale {0};
125 uint32_t m_unitsInTick {0};
126
128
137
138 uint8_t *m_rbspBuffer {nullptr};
139 uint8_t m_aspectRatioIdc {0};
140
142
143 bool m_auPending {false};
144 bool m_fixedRate {false};
146 bool m_isKeyframe {false};
147 bool m_onAU {false};
148 bool m_onFrame {false};
149 bool m_onKeyFrame {false};
150 bool m_seenSPS {false};
152 bool m_stateChanged {false};
153};
154
155#endif /* H2645PARSER_H */
uint64_t m_frameStartOffset
Definition: H2645Parser.h:115
SCAN_t GetScanType(void) const
Definition: H2645Parser.h:81
bool m_separateColourPlaneFlag
Definition: H2645Parser.h:151
uint32_t m_timeScale
Definition: H2645Parser.h:124
static constexpr uint16_t kMaxSliceHeaderSize
Definition: H2645Parser.h:40
uint32_t m_rbspIndex
Definition: H2645Parser.h:122
uint32_t m_consecutiveZeros
Definition: H2645Parser.h:120
uint pictureHeight(void) const
Definition: H2645Parser.h:65
uint64_t m_spsOffset
Definition: H2645Parser.h:118
virtual uint pictureWidthCropped(void) const =0
bool m_fixedRate
Definition: H2645Parser.h:144
uint aspectRatio(void) const
Computes aspect ratio from picture size and sample aspect ratio.
bool stateChanged(void) const
Definition: H2645Parser.h:59
uint64_t m_framecnt
Definition: H2645Parser.h:110
virtual MythAVRational getFrameRate() const =0
uint m_frameCropBottomOffset
Definition: H2645Parser.h:129
virtual uint pictureHeightCropped(void) const =0
uint8_t * m_rbspBuffer
Definition: H2645Parser.h:138
virtual field_type getFieldType(void) const =0
uint64_t m_totalframecnt
Definition: H2645Parser.h:112
uint64_t SPSstreamOffset(void) const
Definition: H2645Parser.h:77
H2645Parser(const H2645Parser &rhs)
uint m_sarWidth
Definition: H2645Parser.h:136
uint64_t m_totalkeyframecnt
Definition: H2645Parser.h:113
uint m_picHeight
Definition: H2645Parser.h:133
uint64_t m_pktOffset
Definition: H2645Parser.h:117
uint m_frameCropLeftOffset
Definition: H2645Parser.h:130
virtual QString NAL_type_str(int8_t type)=0
uint64_t m_auOffset
Definition: H2645Parser.h:114
uint m_frameCropTopOffset
Definition: H2645Parser.h:132
virtual void Reset(void)
Definition: H2645Parser.cpp:92
bool onFrameStart(void) const
Definition: H2645Parser.h:61
uint pictureWidth(void) const
Definition: H2645Parser.h:64
uint32_t m_syncAccumulator
Definition: H2645Parser.h:123
uint32_t GetUnitsInTick(void) const
Definition: H2645Parser.h:80
uint64_t frameAUstreamOffset(void) const
Definition: H2645Parser.h:75
virtual uint32_t addBytes(const uint8_t *bytes, uint32_t byte_count, uint64_t stream_offset)=0
bool m_stateChanged
Definition: H2645Parser.h:152
bool m_auPending
Definition: H2645Parser.h:143
bool m_isKeyframe
Definition: H2645Parser.h:146
uint64_t m_keyframeStartOffset
Definition: H2645Parser.h:116
bool onKeyFrameStart(void) const
Definition: H2645Parser.h:62
bool m_onKeyFrame
Definition: H2645Parser.h:149
uint32_t GetTimeScale(void) const
Definition: H2645Parser.h:79
uint64_t m_keyframecnt
Definition: H2645Parser.h:111
uint64_t keyframeAUstreamOffset(void) const
Definition: H2645Parser.h:76
void vui_parameters(BitReader &br, bool hevc)
bool fillRBSP(const uint8_t *byteP, uint32_t byte_count, bool found_start_code)
bool m_onFrame
Definition: H2645Parser.h:148
uint32_t m_unitsInTick
Definition: H2645Parser.h:125
SCAN_t m_scanType
Definition: H2645Parser.h:127
virtual ~H2645Parser(void)
Definition: H2645Parser.h:50
int8_t m_chromaFormatIdc
Definition: H2645Parser.h:141
void resetRBSP(void)
uint m_frameCropRightOffset
Definition: H2645Parser.h:131
uint m_picWidth
Definition: H2645Parser.h:134
bool m_haveUnfinishedNAL
Definition: H2645Parser.h:145
uint32_t m_rbspBufferSize
Definition: H2645Parser.h:121
uint m_sarHeight
Definition: H2645Parser.h:135
bool m_seenSPS
Definition: H2645Parser.h:150
uint8_t m_aspectRatioIdc
Definition: H2645Parser.h:139
H2645Parser(void)
Definition: H2645Parser.cpp:85
static constexpr uint8_t kExtendedSar
Definition: H2645Parser.h:102
C++ wrapper for FFmpeg libavutil AVRational.
unsigned int uint
Definition: freesurround.h:24
unsigned short uint16_t
Definition: iso6937tables.h:3
SCAN_t
Definition: scantype.h:6
@ UNKNOWN_SCAN