vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
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
46private:
53
54public:
55 cH264Parser(AVPacket *, int, int, int);
58 void AddFrameNumber(int);
59 void AddInvalidReference(int, int);
60 void AddValidReference(int);
61 void PrintNalUnits(void);
62 void PrintStreamData(void);
63
64 std::string GetNalUnitString(void) { return m_naluString; };
65 int GetWidth(void) { return m_width; };
66 int GetHeight(void) { return m_height; };
67 bool IsMbaff(void) { return m_mbaff; };
68 bool HasSPS(void) { return m_hasSPS; };
69 bool HasPPS(void) { return m_hasPPS; };
70 bool IsPSlice() const { return m_sliceType == 0; }
71 bool IsBSlice() const { return m_sliceType == 1; }
72 bool IsISlice() const { return m_sliceType == 2; }
73 bool IsIDR() const { return m_isIDR; }
74 bool IsReference() const { return m_isReference; }
75 int GetFrameNum() const { return m_frameNum; }
76 const std::vector<RefPicMod>& GetRefMods() const { return m_refMods; }
84 bool HasParseError(void) const { return m_parseError; };
85
86private:
88 const unsigned char *m_pStart;
89 std::vector<uint8_t> m_rbsp;
90 unsigned short m_nLength;
92
93 int m_nalutype = 0;
94 int m_width = 0;
95 int m_height = 0;
96 bool m_hasSPS = false;
97 bool m_hasPPS = false;
98 bool m_isIDR = false;
99 bool m_isReference = false;
100 bool m_mbaff = false;
101 bool m_parseError = false;
102
103 std::string m_naluString;
104
105 int m_sliceType = -1; // normalized: 0=P, 2=I
106 int m_frameNum = -1;
107 int m_nalRefIdc = 0;
108 std::set<int> m_invalidReferences;
109 std::set<int> m_validReferences;
110 std::vector<RefPicMod> m_refMods;
114
115 int m_log2MaxFrameNumMinus4 = -4; // saved from SPS
116 int m_ppsNumRefIdxL0DefaultActiveMinus1 = -1; // saved from PPS
117 int m_ppsNumRefIdxL1DefaultActiveMinus1 = -1; // saved from PPS
120
121 unsigned int ReadBit(void);
122 unsigned int ReadBits(int);
123 unsigned int ReadExponentialGolombCode(void);
124 unsigned int ReadSE(void);
125 int GetSPSOffset(void);
126 int GetPPSOffset(void);
127 int GetSliceOffset(void);
128 void ConvertEBSPtoRBSP(const uint8_t *, int);
129};
130
131#endif
H.264 Parser.
Definition h264parser.h:45
bool m_hasPPS
Definition h264parser.h:97
bool HasInvalidReferences(void)
Definition h264parser.h:82
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.
std::string m_naluString
Definition h264parser.h:103
bool m_isReference
Definition h264parser.h:99
bool m_hasInvalidBackwardReferences
Definition h264parser.h:112
bool HasSPS(void)
Definition h264parser.h:68
int GetNumRefIdxL0Active(void)
Definition h264parser.h:80
unsigned int ReadBit(void)
Read the next bit of a stream.
int GetFrameNum() const
Definition h264parser.h:75
unsigned int ReadBits(int)
Read n number of bits of a stream.
int GetLog2MaxFrameNumMinus4() const
Definition h264parser.h:77
int m_ppsNumRefIdxL1DefaultActiveMinus1
Definition h264parser.h:117
int GetPpsNumRefIdxL1DefaultActiveMinus1(void)
Definition h264parser.h:79
void PrintNalUnits(void)
Print the previously created log output string.
int m_ppsNumRefIdxL0DefaultActiveMinus1
Definition h264parser.h:116
int GetSliceOffset(void)
Get the slice offset.
bool HasPPS(void)
Definition h264parser.h:69
int GetWidth(void)
Definition h264parser.h:65
unsigned short m_nLength
Definition h264parser.h:90
void ConvertEBSPtoRBSP(const uint8_t *, int)
std::string GetNalUnitString(void)
Definition h264parser.h:64
bool m_hasInvalidReferences
Definition h264parser.h:111
int GetNumRefIdxL1Active(void)
Definition h264parser.h:81
int GetPpsNumRefIdxL0DefaultActiveMinus1(void)
Definition h264parser.h:78
bool IsReference() const
Definition h264parser.h:74
int m_log2MaxFrameNumMinus4
Definition h264parser.h:115
const unsigned char * m_pStart
Definition h264parser.h:88
bool HasParseError(void) const
Definition h264parser.h:84
void AddFrameNumber(int)
Add the frame number to the log output string.
bool IsPSlice() const
Definition h264parser.h:70
int GetPPSOffset(void)
Get the PPS offset.
std::vector< uint8_t > m_rbsp
Definition h264parser.h:89
int GetHeight(void)
Definition h264parser.h:66
void AddValidReference(int)
Adds a valid reference.
bool HasInvalidBackwardReferences(void)
Definition h264parser.h:83
int m_numRefIdxL0Active
Definition h264parser.h:118
const std::vector< RefPicMod > & GetRefMods() const
Definition h264parser.h:76
void PrintStreamData(void)
Print raw stream data of the first 35 bytes.
bool m_hasSPS
Definition h264parser.h:96
std::vector< RefPicMod > m_refMods
Definition h264parser.h:110
bool m_parseError
Definition h264parser.h:101
std::set< int > m_invalidReferences
Definition h264parser.h:108
int m_nCurrentBit
Definition h264parser.h:91
bool m_hasValidReferences
Definition h264parser.h:113
void BuildValidReferenceString(void)
Add a whitespace-separated list of all valid references to the log output string.
bool IsMbaff(void)
Definition h264parser.h:67
bool IsBSlice() const
Definition h264parser.h:71
AVPacket * m_pAvpkt
Definition h264parser.h:87
void AddInvalidReference(int, int)
Adds an invalid reference.
unsigned int ReadExponentialGolombCode(void)
Read an unsigned exponential-golomb coded integer.
std::set< int > m_validReferences
Definition h264parser.h:109
bool IsISlice() const
Definition h264parser.h:72
bool IsIDR() const
Definition h264parser.h:73
int m_numRefIdxL1Active
Definition h264parser.h:119
int GetSPSOffset(void)
Get the SPS offset.
NalUnitTypes
H.264 Nal unit types.
Definition h264parser.h:28
@ 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