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
33#include "libmythtv/scantype.h"
34
35class BitReader;
36
38 public:
39 static constexpr uint16_t kMaxSliceHeaderSize { 256 };
40
41 enum field_type : std::uint8_t {
42 FRAME = 'F',
43 FIELD_TOP = 'T',
44 FIELD_BOTTOM = 'B'
45 };
46
47 H2645Parser(void);
49 virtual ~H2645Parser(void) {delete [] m_rbspBuffer;}
50
51 virtual uint32_t addBytes(const uint8_t *bytes,
52 uint32_t byte_count,
53 uint64_t stream_offset) = 0;
54 virtual void Reset(void);
55
56 virtual QString NAL_type_str(int8_t type) = 0;
57
58 bool stateChanged(void) const { return m_stateChanged; }
59
60 bool onFrameStart(void) const { return m_onFrame; }
61 bool onKeyFrameStart(void) const { return m_onKeyFrame; }
62
63 uint pictureWidth(void) const { return m_picWidth; }
64 uint pictureHeight(void) const { return m_picHeight; }
65 virtual uint pictureWidthCropped(void) const = 0;
66 virtual uint pictureHeightCropped(void) const = 0;
67
70 uint aspectRatio(void) const;
71 virtual MythAVRational getFrameRate() const = 0;
72 virtual field_type getFieldType(void) const = 0;
73
74 uint64_t frameAUstreamOffset(void) const {return m_frameStartOffset;}
75 uint64_t keyframeAUstreamOffset(void) const {return m_keyframeStartOffset;}
76 uint64_t SPSstreamOffset(void) const {return m_spsOffset;}
77
78 uint32_t GetTimeScale(void) const { return m_timeScale; }
79 uint32_t GetUnitsInTick(void) const { return m_unitsInTick; }
80 SCAN_t GetScanType(void) const { return m_scanType; }
81
82 enum NAL_unit_type : std::int8_t {
83 UNKNOWN = -1
84 };
85
86 enum SLICE_type : std::uint8_t {
97 SLICE_UNDEF = 10
98 };
99
100 protected:
101 static constexpr uint8_t kExtendedSar { 255 };
102
103 void resetRBSP(void);
104 bool fillRBSP(const uint8_t *byteP, uint32_t byte_count,
105 bool found_start_code);
106
107 void vui_parameters(BitReader& br, bool hevc);
108
109 uint64_t m_framecnt {0};
110 uint64_t m_keyframecnt {0};
111 uint64_t m_totalframecnt {0};
112 uint64_t m_totalkeyframecnt {0};
113 uint64_t m_auOffset {0};
114 uint64_t m_frameStartOffset {0};
116 uint64_t m_pktOffset {0};
117 uint64_t m_spsOffset {0};
118
119 uint32_t m_consecutiveZeros {0};
120 uint32_t m_rbspBufferSize {188 * 2};
121 uint32_t m_rbspIndex {0};
122 uint32_t m_syncAccumulator {0xffffffff};
123 uint32_t m_timeScale {0};
124 uint32_t m_unitsInTick {0};
125
127
136
137 uint8_t *m_rbspBuffer {nullptr};
138 uint8_t m_aspectRatioIdc {0};
139
141
142 bool m_auPending {false};
143 bool m_fixedRate {false};
145 bool m_isKeyframe {false};
146 bool m_onAU {false};
147 bool m_onFrame {false};
148 bool m_onKeyFrame {false};
149 bool m_seenSPS {false};
151 bool m_stateChanged {false};
152};
153
154#endif /* H2645PARSER_H */
uint64_t m_frameStartOffset
Definition: H2645Parser.h:114
SCAN_t GetScanType(void) const
Definition: H2645Parser.h:80
bool m_separateColourPlaneFlag
Definition: H2645Parser.h:150
uint32_t m_timeScale
Definition: H2645Parser.h:123
static constexpr uint16_t kMaxSliceHeaderSize
Definition: H2645Parser.h:39
uint32_t m_rbspIndex
Definition: H2645Parser.h:121
uint32_t m_consecutiveZeros
Definition: H2645Parser.h:119
uint pictureHeight(void) const
Definition: H2645Parser.h:64
uint64_t m_spsOffset
Definition: H2645Parser.h:117
virtual uint pictureWidthCropped(void) const =0
bool m_fixedRate
Definition: H2645Parser.h:143
uint aspectRatio(void) const
Computes aspect ratio from picture size and sample aspect ratio.
bool stateChanged(void) const
Definition: H2645Parser.h:58
uint64_t m_framecnt
Definition: H2645Parser.h:109
virtual MythAVRational getFrameRate() const =0
uint m_frameCropBottomOffset
Definition: H2645Parser.h:128
virtual uint pictureHeightCropped(void) const =0
uint8_t * m_rbspBuffer
Definition: H2645Parser.h:137
virtual field_type getFieldType(void) const =0
uint64_t m_totalframecnt
Definition: H2645Parser.h:111
uint64_t SPSstreamOffset(void) const
Definition: H2645Parser.h:76
H2645Parser(const H2645Parser &rhs)
uint m_sarWidth
Definition: H2645Parser.h:135
uint64_t m_totalkeyframecnt
Definition: H2645Parser.h:112
uint m_picHeight
Definition: H2645Parser.h:132
uint64_t m_pktOffset
Definition: H2645Parser.h:116
uint m_frameCropLeftOffset
Definition: H2645Parser.h:129
virtual QString NAL_type_str(int8_t type)=0
uint64_t m_auOffset
Definition: H2645Parser.h:113
uint m_frameCropTopOffset
Definition: H2645Parser.h:131
virtual void Reset(void)
Definition: H2645Parser.cpp:91
bool onFrameStart(void) const
Definition: H2645Parser.h:60
uint pictureWidth(void) const
Definition: H2645Parser.h:63
uint32_t m_syncAccumulator
Definition: H2645Parser.h:122
uint32_t GetUnitsInTick(void) const
Definition: H2645Parser.h:79
uint64_t frameAUstreamOffset(void) const
Definition: H2645Parser.h:74
virtual uint32_t addBytes(const uint8_t *bytes, uint32_t byte_count, uint64_t stream_offset)=0
bool m_stateChanged
Definition: H2645Parser.h:151
bool m_auPending
Definition: H2645Parser.h:142
bool m_isKeyframe
Definition: H2645Parser.h:145
uint64_t m_keyframeStartOffset
Definition: H2645Parser.h:115
bool onKeyFrameStart(void) const
Definition: H2645Parser.h:61
bool m_onKeyFrame
Definition: H2645Parser.h:148
uint32_t GetTimeScale(void) const
Definition: H2645Parser.h:78
uint64_t m_keyframecnt
Definition: H2645Parser.h:110
uint64_t keyframeAUstreamOffset(void) const
Definition: H2645Parser.h:75
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:147
uint32_t m_unitsInTick
Definition: H2645Parser.h:124
SCAN_t m_scanType
Definition: H2645Parser.h:126
virtual ~H2645Parser(void)
Definition: H2645Parser.h:49
int8_t m_chromaFormatIdc
Definition: H2645Parser.h:140
void resetRBSP(void)
uint m_frameCropRightOffset
Definition: H2645Parser.h:130
uint m_picWidth
Definition: H2645Parser.h:133
bool m_haveUnfinishedNAL
Definition: H2645Parser.h:144
uint32_t m_rbspBufferSize
Definition: H2645Parser.h:120
uint m_sarHeight
Definition: H2645Parser.h:134
bool m_seenSPS
Definition: H2645Parser.h:149
uint8_t m_aspectRatioIdc
Definition: H2645Parser.h:138
H2645Parser(void)
Definition: H2645Parser.cpp:84
static constexpr uint8_t kExtendedSar
Definition: H2645Parser.h:101
C++ wrapper for FFmpeg libavutil AVRational.
unsigned int uint
Definition: compat.h:60
unsigned short uint16_t
Definition: iso6937tables.h:3
SCAN_t
Definition: scantype.h:6
@ UNKNOWN_SCAN