-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathH264Deserialize.h
78 lines (72 loc) · 4.21 KB
/
H264Deserialize.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// H264Deserialize.h
//
// Library: Codec
// Package: H264
// Module: H264
//
#pragma once
#include <cstdint>
#include <memory>
#include <vector>
#include "H264Common.h"
#include "H26xBinaryReader.h"
namespace Mmp
{
namespace Codec
{
/**
* @sa ISO 14496/10(2020) - 8.1 NAL unit decoding process
*/
class H264Deserialize
{
public:
using ptr = std::shared_ptr<H264Deserialize>;
public:
H264Deserialize();
~H264Deserialize();
public:
/**
* @note The format of NAL units for both packet-oriented transport and byte stream is identical except
* that each NAL unit can be preceded by a start code prefix and extra padding bytes in the byte stream format.
*/
bool DeserializeByteStreamNalUnit(H26xBinaryReader::ptr br, H264NalSyntax::ptr nal);
bool DeserializeNalSyntax(H26xBinaryReader::ptr br, H264NalSyntax::ptr nal);
bool DeserializeHrdSyntax(H26xBinaryReader::ptr br, H264HrdSyntax::ptr hrd);
bool DeserializeVuiSyntax(H26xBinaryReader::ptr br, H264VuiSyntax::ptr vui);
bool DeserializeSeiSyntax(H26xBinaryReader::ptr br, H264SeiSyntax::ptr sei);
bool DeserializeSpsSyntax(H26xBinaryReader::ptr br, H264SpsSyntax::ptr sps);
bool DeserializeSliceHeaderSyntax(H26xBinaryReader::ptr br, H264NalSyntax::ptr nal, H264SliceHeaderSyntax::ptr slice);
bool DeserializeDecodedReferencePictureMarkingSyntax(H26xBinaryReader::ptr br, H264NalSyntax::ptr nal, H264DecodedReferencePictureMarkingSyntax::ptr drpm);
bool DeserializeSubSpsSyntax(H26xBinaryReader::ptr br, H264SpsSyntax::ptr sps, H264SubSpsSyntax::ptr subSps);
bool DeserializeSpsMvcSyntax(H26xBinaryReader::ptr br, H264SpsMvcSyntax::ptr mvc);
bool DeserializeMvcVuiSyntax(H26xBinaryReader::ptr br, H264MvcVuiSyntax::ptr mvcVui);
bool DeserializePpsSyntax(H26xBinaryReader::ptr br, H264PpsSyntax::ptr pps);
private:
bool DeserializeNalSvcSyntax(H26xBinaryReader::ptr br, H264NalSvcSyntax::ptr svc);
bool DeserializeNal3dAvcSyntax(H26xBinaryReader::ptr br, H264Nal3dAvcSyntax::ptr avc);
bool DeserializeNalMvcSyntax(H26xBinaryReader::ptr br, H264NalMvcSyntax::ptr mvc);
bool DeserializeScalingListSyntax(H26xBinaryReader::ptr br, std::vector<int32_t>& scalingList, int32_t sizeOfScalingList, int32_t& useDefaultScalingMatrixFlag);
bool DeserializeReferencePictureListModificationSyntax(H26xBinaryReader::ptr br, H264SliceHeaderSyntax::ptr slice, H264ReferencePictureListModificationSyntax::ptr rplm);
bool DeserializePredictionWeightTableSyntax(H26xBinaryReader::ptr br, H264SpsSyntax::ptr sps, H264SliceHeaderSyntax::ptr slice, H264PredictionWeightTableSyntax::ptr pwt);
private: /* SEI */
bool DeserializeSeiBufferPeriodSyntax(H26xBinaryReader::ptr br, H264SeiBufferPeriodSyntax::ptr bp);
bool DeserializeSeiPictureTimingSyntax(H26xBinaryReader::ptr br, H264VuiSyntax::ptr vui, H264SeiPictureTimingSyntax::ptr pt);
bool DeserializeSeiUserDataRegisteredSyntax(H26xBinaryReader::ptr br, uint32_t payloadSize, H264SeiUserDataRegisteredSyntax::ptr udr);
bool DeserializeSeiUserDataUnregisteredSyntax(H26xBinaryReader::ptr br, uint32_t payloadSize, H264SeiUserDataUnregisteredSyntax::ptr udn);
bool DeserializeSeiRecoveryPointSyntax(H26xBinaryReader::ptr br, H264SeiRecoveryPointSyntax::ptr pt);
bool DeserializeSeiContentLigntLevelInfoSyntax(H26xBinaryReader::ptr br, H264SeiContentLigntLevelInfoSyntax::ptr clli);
bool DeserializeSeiDisplayOrientationSyntax(H26xBinaryReader::ptr br, H264SeiDisplayOrientationSyntax::ptr dot);
bool DeserializeSeiMasteringDisplayColourVolumeSyntax(H26xBinaryReader::ptr br, H264MasteringDisplayColourVolumeSyntax::ptr mdcv);
bool DeserializeSeiFilmGrainSyntax(H26xBinaryReader::ptr br, H264SeiFilmGrainSyntax::ptr fg);
bool DeserializeSeiFramePackingArrangementSyntax(H26xBinaryReader::ptr br, H264SeiFramePackingArrangementSyntax::ptr fpa);
bool DeserializeSeiAlternativeTransferCharacteristicsSyntax(H26xBinaryReader::ptr br, H264SeiAlternativeTransferCharacteristicsSyntax::ptr atc);
bool DeserializeAmbientViewingEnvironmentSyntax(H26xBinaryReader::ptr br, H264AmbientViewingEnvironmentSyntax::ptr awe);
public:
bool enableParseSEI = true;
bool enableParseSLICE = true;
private:
H264ContextSyntax::ptr _contex;
};
} // namespace Codec
} // namespace Mmp