Newer
Older

Karsten Suehring
committed
/* The copyright in this software is being made available under the BSD
* License, included below. This software may be subject to other third party
* and contributor rights, including patent rights, and no such rights are
* granted under this license.
*
* Copyright (c) 2010-2025, ITU/ISO/IEC

Karsten Suehring
committed
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
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
/** \file VLCWReader.h
* \brief Reader for high level syntax
*/
#ifndef __VLCREADER__
#define __VLCREADER__
#include "CommonLib/Rom.h"
#include "CommonLib/BitStream.h"
#include "CommonLib/Slice.h"
#include "CommonLib/SampleAdaptiveOffset.h"
#include "CommonLib/ParameterSetManager.h"

Karsten Suehring
committed
#include "CABACReader.h"
//! \ingroup DecoderLib
//! \{
// ====================================================================================================================
// Class definition
// ====================================================================================================================
class VLCReader
{
protected:
InputBitstream* m_pcBitstream;

Karsten Suehring
committed
virtual ~VLCReader() {};
void xReadCode ( uint32_t length, uint32_t& val, const char *symbolName );
void xReadSCode ( uint32_t length, int& val, const char *symbolName );
void xReadUvlc ( uint32_t& val, const char *symbolName );
void xReadSvlc ( int& val, const char *symbolName );
void xReadFlag ( uint32_t& val, const char *symbolName );
void xReadString ( std::string& val, const char *symbolName );

Karsten Suehring
committed
public:
void setBitstream ( InputBitstream* p ) { m_pcBitstream = p; }
InputBitstream* getBitstream() { return m_pcBitstream; }
protected:
void xReadRbspTrailingBits();
bool isByteAligned() { return (m_pcBitstream->getNumBitsUntilByteAligned() == 0 ); }

Karsten Suehring
committed
};
class AUDReader: public VLCReader
{
public:
AUDReader() {};
virtual ~AUDReader() {};
Zhipin Deng
committed
void parseAccessUnitDelimiter(InputBitstream* bs, uint32_t &audIrapOrGdrAuFlag, uint32_t &picType);

Karsten Suehring
committed
};
class FDReader: public VLCReader
{
public:
FDReader() {};
virtual ~FDReader() {};
void parseFillerData(InputBitstream* bs, uint32_t &fdSize);
};
class HLSyntaxReader : public VLCReader
{
public:
HLSyntaxReader();
virtual ~HLSyntaxReader();
protected:
void copyRefPicList(SPS* pcSPS, ReferencePictureList* sourceRpl, ReferencePictureList* dest_rpl);
void parseRefPicList(SPS* pcSPS, ReferencePictureList* rpl, int rplIdx);

Karsten Suehring
committed
public:
void setBitstream ( InputBitstream* p ) { m_pcBitstream = p; }

Karsten Suehring
committed
void parseVPS ( VPS* pcVPS );

Karsten Suehring
committed
void parseSPS ( SPS* pcSPS );
void parsePPS ( PPS* pcPPS );
void parseAPS ( APS* pcAPS );
void parseAlfAps ( APS* pcAPS );
void parseLmcsAps ( APS* pcAPS );
void parseScalingListAps ( APS* pcAPS );

Karsten Suehring
committed
void parseVUI ( VUI* pcVUI, SPS* pcSPS );
Tomohiro Ikai
committed
void parseConstraintInfo (ConstraintInfo *cinfo, const ProfileTierLevel* ptl );
void parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTierPresentFlag, int maxNumSubLayersMinus1);
void parseOlsHrdParameters(GeneralHrdParams* generalHrd, OlsHrdParams *olsHrd, uint32_t firstSubLayer, uint32_t tempLevelHigh);
void parseGeneralHrdParameters(GeneralHrdParams *generalHrd);
void parsePictureHeader ( PicHeader* picHeader, ParameterSetManager *parameterSetManager, bool readRbspTrailingBits );
Xiang Ma
committed
void checkAlfNaluTidAndPicTid(Slice* pcSlice, PicHeader* picHeader, ParameterSetManager *parameterSetManager);
void parseSliceHeader ( Slice* pcSlice, PicHeader* picHeader, ParameterSetManager *parameterSetManager, const int prevTid0POC, const int prevPicPOC );
Jonatan Samuelsson-Allendes
committed
void getSlicePoc ( Slice* pcSlice, PicHeader* picHeader, ParameterSetManager *parameterSetManager, const int prevTid0POC );
void parseTerminatingBit(uint32_t& bit);

Karsten Suehring
committed
void parseRemainingBytes ( bool noTrailingBytesExpected );
void parsePredWeightTable( Slice* pcSlice, const SPS *sps );
void parsePredWeightTable ( PicHeader *picHeader, const PPS *pps, const SPS *sps );
void parseScalingList ( ScalingList *scalingList, bool aps_chromaPresentFlag );
Chen-Yen Lai
committed
void decodeScalingList ( ScalingList *scalingList, uint32_t scalingListId, bool isPredictor);
void parseReshaper ( SliceReshapeInfo& sliceReshaperInfo, const SPS* pcSPS, const bool isIntra );
void alfFilter( AlfParam& alfParam, const bool isChroma, const int altIdx );
void dpb_parameters(int maxSubLayersMinus1, bool subLayerInfoFlag, SPS *pcSPS);