vdr-plugin-softhddevice-drm-gles 1.6.2
h264parser.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
12#ifndef __H264PARSER_H
13#define __H264PARSER_H
14
15#include <set>
16#include <string>
17#include <vector>
18
19extern "C" {
20#include <libavcodec/avcodec.h>
21}
22
28typedef enum {
30 NALU_TYPE_PART_A = (1 << 1),
31 NALU_TYPE_PART_B = (1 << 2),
32 NALU_TYPE_PART_C = (1 << 3),
33 NALU_TYPE_IDR = (1 << 4),
34 NALU_TYPE_SEI = (1 << 5),
35 NALU_TYPE_SPS = (1 << 6),
36 NALU_TYPE_PPS = (1 << 7),
37 NALU_TYPE_AUD = (1 << 8)
39
44private:
51
52public:
53 cH264Parser(AVPacket *, int, int, int);
56 void AddFrameNumber(int);
57 void AddInvalidReference(int, int);
58 void AddValidReference(int);
59 void PrintNalUnits(void);
60 void PrintStreamData(void);
61
62 std::string GetNalUnitString(void) { return m_naluString; };
63 int GetWidth(void) { return m_width; };
64 int GetHeight(void) { return m_height; };
65 bool IsMbaff(void) { return m_mbaff; };
66 bool HasSPS(void) { return m_hasSPS; };
67 bool HasPPS(void) { return m_hasPPS; };
68 bool IsPSlice() const { return m_sliceType == 0; }
69 bool IsBSlice() const { return m_sliceType == 1; }
70 bool IsISlice() const { return m_sliceType == 2; }
71 bool IsIDR() const { return m_isIDR; }
72 bool IsReference() const { return m_isReference; }
73 int GetFrameNum() const { return m_frameNum; }
74 const std::vector<RefPicMod>& GetRefMods() const { return m_refMods; }
82 bool HasParseError(void) const { return m_parseError; };
83
84private:
86 const unsigned char *m_pStart;
87 std::vector<uint8_t> m_rbsp;
88 unsigned short m_nLength;
90
91 int m_nalutype = 0;
92 int m_width = 0;
93 int m_height = 0;
94 bool m_hasSPS = false;
95 bool m_hasPPS = false;
96 bool m_isIDR = false;
97 bool m_isReference = false;
98 bool m_mbaff = false;
99 bool m_parseError = false;
100
101 std::string m_naluString;
102
103 int m_sliceType = -1; // normalized: 0=P, 2=I
104 int m_frameNum = -1;
105 int m_nalRefIdc = 0;
106 std::set<int> m_invalidReferences;
107 std::set<int> m_validReferences;
108 std::vector<RefPicMod> m_refMods;
112
113 int m_log2MaxFrameNumMinus4 = -4; // saved from SPS
114 int m_ppsNumRefIdxL0DefaultActiveMinus1 = -1; // saved from PPS
115 int m_ppsNumRefIdxL1DefaultActiveMinus1 = -1; // saved from PPS
118
119 unsigned int ReadBit(void);
120 unsigned int ReadBits(int);
121 unsigned int ReadExponentialGolombCode(void);
122 unsigned int ReadSE(void);
123 int GetSPSOffset(void);
124 int GetPPSOffset(void);
125 int GetSliceOffset(void);
126 void ConvertEBSPtoRBSP(const uint8_t *, int);
127};
128
131#endif
H.264 Parser.
Definition h264parser.h:43
bool m_hasPPS
Definition h264parser.h:95
bool HasInvalidReferences(void)
Definition h264parser.h:80
std::string m_naluString
Definition h264parser.h:101
bool m_isReference
Definition h264parser.h:97
bool m_hasInvalidBackwardReferences
Definition h264parser.h:110
bool HasSPS(void)
Definition h264parser.h:66
int GetNumRefIdxL0Active(void)
Definition h264parser.h:78
int GetFrameNum() const
Definition h264parser.h:73
int GetLog2MaxFrameNumMinus4() const
Definition h264parser.h:75
int m_ppsNumRefIdxL1DefaultActiveMinus1
Definition h264parser.h:115
int GetPpsNumRefIdxL1DefaultActiveMinus1(void)
Definition h264parser.h:77
int m_ppsNumRefIdxL0DefaultActiveMinus1
Definition h264parser.h:114
bool HasPPS(void)
Definition h264parser.h:67
int GetWidth(void)
Definition h264parser.h:63
unsigned short m_nLength
Definition h264parser.h:88
std::string GetNalUnitString(void)
Definition h264parser.h:62
bool m_hasInvalidReferences
Definition h264parser.h:109
int GetNumRefIdxL1Active(void)
Definition h264parser.h:79
int GetPpsNumRefIdxL0DefaultActiveMinus1(void)
Definition h264parser.h:76
bool IsReference() const
Definition h264parser.h:72
int m_log2MaxFrameNumMinus4
Definition h264parser.h:113
const unsigned char * m_pStart
Definition h264parser.h:86
bool HasParseError(void) const
Definition h264parser.h:82
bool IsPSlice() const
Definition h264parser.h:68
std::vector< uint8_t > m_rbsp
Definition h264parser.h:87
int GetHeight(void)
Definition h264parser.h:64
bool HasInvalidBackwardReferences(void)
Definition h264parser.h:81
int m_numRefIdxL0Active
Definition h264parser.h:116
const std::vector< RefPicMod > & GetRefMods() const
Definition h264parser.h:74
bool m_hasSPS
Definition h264parser.h:94
std::vector< RefPicMod > m_refMods
Definition h264parser.h:108
bool m_parseError
Definition h264parser.h:99
std::set< int > m_invalidReferences
Definition h264parser.h:106
int m_nCurrentBit
Definition h264parser.h:89
bool m_hasValidReferences
Definition h264parser.h:111
bool IsMbaff(void)
Definition h264parser.h:65
bool IsBSlice() const
Definition h264parser.h:69
AVPacket * m_pAvpkt
Definition h264parser.h:85
std::set< int > m_validReferences
Definition h264parser.h:107
bool IsISlice() const
Definition h264parser.h:70
bool IsIDR() const
Definition h264parser.h:71
int m_numRefIdxL1Active
Definition h264parser.h:117
void BuildInvalidReferenceString(int)
Add a whitespace-separated list of all invalid references to the log output string.
unsigned int ReadSE(void)
Read a signed exponential-golomb coded integer.
unsigned int ReadBit(void)
Read the next bit of a stream.
unsigned int ReadBits(int)
Read n number of bits of a stream.
void PrintNalUnits(void)
Print the previously created log output string.
int GetSliceOffset(void)
Get the slice offset.
void ConvertEBSPtoRBSP(const uint8_t *, int)
NalUnitTypes
Definition h264parser.h:28
void AddFrameNumber(int)
Add the frame number to the log output string.
int GetPPSOffset(void)
Get the PPS offset.
void AddValidReference(int)
Adds a valid reference.
void PrintStreamData(void)
Print raw stream data of the first 35 bytes.
void BuildValidReferenceString(void)
Add a whitespace-separated list of all valid references to the log output string.
void AddInvalidReference(int, int)
Adds an invalid reference.
unsigned int ReadExponentialGolombCode(void)
Read an unsigned exponential-golomb coded integer.
int GetSPSOffset(void)
Get the SPS offset.
@ NALU_TYPE_NON_IDR
Definition h264parser.h:29
@ NALU_TYPE_AUD
Definition h264parser.h:37
@ NALU_TYPE_PART_B
Definition h264parser.h:31
@ NALU_TYPE_SEI
Definition h264parser.h:34
@ NALU_TYPE_PART_C
Definition h264parser.h:32
@ NALU_TYPE_PPS
Definition h264parser.h:36
@ NALU_TYPE_SPS
Definition h264parser.h:35
@ NALU_TYPE_PART_A
Definition h264parser.h:30
@ NALU_TYPE_IDR
Definition h264parser.h:33