hevc

package
v0.33.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 25, 2023 License: MIT Imports: 8 Imported by: 1

Documentation

Overview

Package hevc - parsing of HEVC(H.265) NAL unit headers, slice headers, VPS, SPS, and PPS.

Index

Constants

View Source
const (
	NALU_TRAIL_N = NaluType(0)
	NALU_TRAIL_R = NaluType(1)
	NALU_TSA_N   = NaluType(2)
	NALU_TSA_R   = NaluType(3)
	NALU_STSA_N  = NaluType(4)
	NALU_STSA_R  = NaluType(5)
	NALU_RADL_N  = NaluType(6)
	NALU_RADL_R  = NaluType(7)
	NALU_RASL_N  = NaluType(8)
	NALU_RASL_R  = NaluType(9)
	// BLA_W_LP and the following types are Random Access
	NALU_BLA_W_LP   = NaluType(16)
	NALU_BLA_W_RADL = NaluType(17)
	NALU_BLA_N_LP   = NaluType(18)
	NALU_IDR_W_RADL = NaluType(19)
	NALU_IDR_N_LP   = NaluType(20)
	NALU_CRA        = NaluType(21)
	// NALU_VPS - VideoParameterSet NAL Unit
	NALU_VPS = NaluType(32)
	// NALU_SPS - SequenceParameterSet NAL Unit
	NALU_SPS = NaluType(33)
	// NALU_PPS - PictureParameterSet NAL Unit
	NALU_PPS = NaluType(34)
	// NALU_AUD - AccessUnitDelimiter NAL Unit
	NALU_AUD = NaluType(35)
	//NALU_EOS - End of Sequence NAL Unit
	NALU_EOS = NaluType(36)
	//NALU_EOB - End of Bitstream NAL Unit
	NALU_EOB = NaluType(37)
	//NALU_FD - Filler data NAL Unit
	NALU_FD = NaluType(38)
	//NALU_SEI_PREFIX - Prefix SEI NAL Unit
	NALU_SEI_PREFIX = NaluType(39)
	//NALU_SEI_SUFFIX - Suffix SEI NAL Unit
	NALU_SEI_SUFFIX = NaluType(40)
)

HEVC NALU types

Variables

View Source
var (
	ErrLengthSize = errors.New("can only handle 4byte NALU length size")
)

HEVC errors

Functions

func CodecString

func CodecString(sampleEntry string, sps *SPS) string

CodecString - sub-parameter for MIME type "codecs" parameter like hev1.1.6.L93.B0 where hev1 is sampleEntry. Defined in ISO/IEC 14496-15 2017 Annex E.

func ContainsNaluType

func ContainsNaluType(sample []byte, specificNaluType NaluType) bool

ContainsNaluType - is specific NaluType present in sample

func ExtractNalusOfTypeFromByteStream

func ExtractNalusOfTypeFromByteStream(nType NaluType, data []byte, stopAtVideo bool) [][]byte

ExtractNalusOfTypeFromByteStream returns all HEVC nalus of wanted type from bytestream. If stopAtVideo, the stream is not scanned beyond the first video NAL unit.

func GetParameterSets

func GetParameterSets(sample []byte) (vps, sps, pps [][]byte)

GetParameterSets - get (multiple) VPS, SPS, and PPS from a sample

func GetParameterSetsFromByteStream

func GetParameterSetsFromByteStream(data []byte) (vpss [][]byte, spss [][]byte, ppss [][]byte)

GetParameterSetsFromByteStream gets SPS and PPS nalus from bytestream

func HasParameterSets

func HasParameterSets(b []byte) bool

HasParameterSets - Check if HEVC VPS, SPS and PPS are present

func IsIDRSample

func IsIDRSample(sample []byte) bool

IsIDRSample - is IDR picture (NALU 19-20)

func IsRAPSample

func IsRAPSample(sample []byte) bool

IsRAPSample - is Random Access picture (NALU 16-23)

Types

type BitstreamRestrictions

type BitstreamRestrictions struct {
	TilesFixedStructureFlag     bool
	MVOverPicBoundariesFlag     bool
	RestrictedRefsPicsListsFlag bool
	MinSpatialSegmentationIDC   uint
	MaxBytesPerPicDenom         uint
	MaxBitsPerMinCuDenom        uint
	Log2MaxMvLengthHorizontal   uint
	Log2MaxMvLengthVertical     uint
}

BitstreamRestrictrictions - optional information

type ConformanceWindow

type ConformanceWindow struct {
	LeftOffset   uint32
	RightOffset  uint32
	TopOffset    uint32
	BottomOffset uint32
}

ConformanceWindow according to ISO/IEC 23008-2

type DecConfRec

type DecConfRec struct {
	ConfigurationVersion             byte
	GeneralProfileSpace              byte
	GeneralTierFlag                  bool
	GeneralProfileIDC                byte
	GeneralProfileCompatibilityFlags uint32
	GeneralConstraintIndicatorFlags  uint64
	GeneralLevelIDC                  byte
	MinSpatialSegmentationIDC        uint16
	ParallellismType                 byte
	ChromaFormatIDC                  byte
	BitDepthLumaMinus8               byte
	BitDepthChromaMinus8             byte
	AvgFrameRate                     uint16
	ConstantFrameRate                byte
	NumTemporalLayers                byte
	TemporalIDNested                 byte
	LengthSizeMinusOne               byte
	NaluArrays                       []NaluArray
}

DecConfRec - HEVCDecoderConfigurationRecord Specified in ISO/IEC 14496-15 4't ed 2017 Sec. 8.3.3

func CreateHEVCDecConfRec

func CreateHEVCDecConfRec(vpsNalus, spsNalus, ppsNalus [][]byte,
	vpsComplete, spsComplete, ppsComplete, includePS bool) (DecConfRec, error)

CreateHEVCDecConfRec - extract information from sps and insert vps, sps, pps if includePS set

func DecodeHEVCDecConfRec

func DecodeHEVCDecConfRec(data []byte) (DecConfRec, error)

DecodeHEVCDecConfRec - decode an HEVCDecConfRec

func (*DecConfRec) AddNaluArrays

func (h *DecConfRec) AddNaluArrays(na []NaluArray)

AddNaluArrays appends new nalus to HEVCDecConfRec.

func (*DecConfRec) Encode

func (h *DecConfRec) Encode(w io.Writer) error

func (*DecConfRec) EncodeSW

func (h *DecConfRec) EncodeSW(sw bits.SliceWriter) error

EncodeSW- write an HEVCDecConfRec to sw

func (*DecConfRec) GetNalusForType

func (h *DecConfRec) GetNalusForType(naluType NaluType) [][]byte

GetNalusForType - get all nalus for a specific naluType

func (*DecConfRec) Size

func (h *DecConfRec) Size() uint64

Size - total size in bytes

type NaluArray

type NaluArray struct {
	Nalus [][]byte
	// contains filtered or unexported fields
}

NaluArray - HEVC NALU array including complete bit and type

func NewNaluArray

func NewNaluArray(complete bool, naluType NaluType, nalus [][]byte) NaluArray

NewNaluArray - create an HEVC NaluArray

func (*NaluArray) Complete

func (n *NaluArray) Complete() byte

Complete - return 0x1 if complete

func (*NaluArray) NaluType

func (n *NaluArray) NaluType() NaluType

NaluType - return NaluType for NaluArray

type NaluType

type NaluType uint16

NaluType - HEVC nal type according to ISO/IEC 23008-2 Table 7.1

func FindNaluTypes

func FindNaluTypes(sample []byte) []NaluType

FindNaluTypes - find list of nalu types in sample

func FindNaluTypesUpToFirstVideoNalu

func FindNaluTypesUpToFirstVideoNalu(sample []byte) []NaluType

FindNaluTypesUpToFirstVideoNalu - all nalu types up to first video nalu

func GetNaluType

func GetNaluType(naluHeaderStart byte) NaluType

GetNaluType - extract NALU type from first byte of NALU Header

func (NaluType) String

func (n NaluType) String() string

type ProfileTierLevel

type ProfileTierLevel struct {
	GeneralProfileSpace              byte
	GeneralTierFlag                  bool
	GeneralProfileIDC                byte
	GeneralProfileCompatibilityFlags uint32
	GeneralConstraintIndicatorFlags  uint64 // 48 bits
	GeneralProgressiveSourceFlag     bool
	GeneralInterlacedSourceFlag      bool
	GeneralNonPackedConstraintFlag   bool
	GeneralFrameOnlyConstraintFlag   bool
	// 43 + 1 bits of info
	GeneralLevelIDC byte
}

ProfileTierLevel according to ISO/IEC 23008-2 Section 7.3.3

type SPS

type SPS struct {
	VpsID                                byte
	MaxSubLayersMinus1                   byte
	TemporalIDNestingFlag                bool
	ProfileTierLevel                     ProfileTierLevel
	SpsID                                byte
	ChromaFormatIDC                      byte
	SeparateColourPlaneFlag              bool
	ConformanceWindowFlag                bool
	PicWidthInLumaSamples                uint32
	PicHeightInLumaSamples               uint32
	ConformanceWindow                    ConformanceWindow
	BitDepthLumaMinus8                   byte
	BitDepthChromaMinus8                 byte
	Log2MaxPicOrderCntLsbMinus4          byte
	SubLayerOrderingInfoPresentFlag      bool
	SubLayeringOrderingInfos             []SubLayerOrderingInfo
	Log2MinLumaCodingBlockSizeMinus3     byte
	Log2DiffMaxMinLumaCodingBlockSize    byte
	Log2MinLumaTransformBlockSizeMinus2  byte
	Log2DiffMaxMinLumaTransformBlockSize byte
	MaxTransformHierarchyDepthInter      byte
	MaxTransformHierarchyDepthIntra      byte
	ScalingListEnabledFlag               bool
	ScalingListDataPresentFlag           bool
	AmpEnabledFlag                       bool
	SampleAdaptiveOffsetEnabledFlag      bool
	PCMEnabledFlag                       bool
	PcmSampleBitDepthLumaMinus1          byte
	PcmSampleBitDepthChromaMinus1        byte
	Log2MinPcmLumaCodingBlockSize        uint16
	Log2DiffMaxMinPcmLumaCodingBlockSize uint16
	PcmLoopFilterDisabledFlag            bool
	NumShortTermRefPicSets               byte
	ShortTermRefPicSets                  []ShortTermRPS
	LongTermRefPicsPresentFlag           bool
	SpsTemporalMvpEnabledFlag            bool
	StrongIntraSmoothingEnabledFlag      bool
	VUIParametersPresentFlag             bool
	VUI                                  *VUIParameters
}

SPS - HEVC SPS parameters ISO/IEC 23008-2 Sec. 7.3.2.2

func ParseSPSNALUnit

func ParseSPSNALUnit(data []byte) (*SPS, error)

ParseSPSNALUnit parses SPS NAL unit starting with NAL unit header

func (*SPS) ImageSize

func (s *SPS) ImageSize() (width, height uint32)

ImageSize - calculated width and height using ConformanceWindow

type ShortTermRPS

type ShortTermRPS struct {
	// Delta Picture Order Count
	DeltaPocS0      []uint32
	DeltaPocS1      []uint32
	UsedByCurrPicS0 []bool
	UsedByCurrPicS1 []bool
	NumNegativePics byte
	NumPositivePics byte
	NumDeltaPocs    byte
}

ShortTermRPS - Short term Reference Picture Set

type SubLayerOrderingInfo

type SubLayerOrderingInfo struct {
	MaxDecPicBufferingMinus1 byte
	MaxNumReorderPics        byte
	MaxLatencyIncreasePlus1  byte
}

SubLayerOrderingInfo according to ISO/IEC 23008-2

type VUIParameters

type VUIParameters struct {
	SampleAspectRatioWidth         uint
	SampleAspectRatioHeight        uint
	OverscanInfoPresentFlag        bool
	OverscanAppropriateFlag        bool
	VideoSignalTypePresentFlag     bool
	VideoFormat                    byte
	VideoFullRangeFlag             bool
	ColourDescriptionFlag          bool
	ColourPrimaries                byte
	TransferCharacteristics        byte
	MatrixCoefficients             byte
	ChromaLocInfoPresentFlag       bool
	ChromaSampleLocTypeTopField    uint
	ChromaSampleLocTypeBottomField uint
	NeutralChromaIndicationFlag    bool
	FieldSeqFlag                   bool
	FrameFieldInfoPresentFlag      bool
	DefaultDisplayWindowFlag       bool
	DefDispWinLeftOffset           uint
	DefDispWinRightOffset          uint
	DefDispWinTopOffset            uint
	DefDispWinBottomOffset         uint
	TimingInfoPresentFlag          bool
	NumUnitsInTick                 uint
	TimeScale                      uint
	PocProportionalToTimingFlag    bool
	NumTicksPocDiffOneMinus1       uint
	HrdParametersPresentFlag       bool
	BitstreamRestrictionFlag       bool
	BitstreamResctrictions         *BitstreamRestrictions
}

VUIParameters - Visual Usability Information as defined in Section E.2

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL