avc

package
v0.21.2-0...-6e41e77 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2021 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package avc - parse AVC(H.264) NAL unit headers, slice headers and complete SPS and PPS.

Index

Constants

View Source
const (
	// NALU_NON_IDR - Non-IDR Slice NAL unit
	NALU_NON_IDR = NaluType(1)
	// NALU_IDR - IDR Random Access Slice NAL Unit
	NALU_IDR = NaluType(5)
	// NALU_SEI - Supplementary Enhancement Information NAL Unit
	NALU_SEI = NaluType(6)
	// NALU_SSP - SequenceParameterSet NAL Unit
	NALU_SPS = NaluType(7)
	// NALU_PPS - PictureParameterSet NAL Unit
	NALU_PPS = NaluType(8)
	// NALU_AUD - AccessUnitDelimiter NAL Unit
	NALU_AUD = NaluType(9)
	// NALU_EO_SEQ - End of Sequence NAL Unit
	NALU_EO_SEQ = NaluType(10)
	// NALU_EO_STREAM - End of Stream NAL Unit
	NALU_EO_STREAM = NaluType(11)
	// NALU_FILL - Filler NAL Unit
	NALU_FILL = NaluType(12)
)
View Source
const (
	SLICE_P  = SliceType(0)
	SLICE_B  = SliceType(1)
	SLICE_I  = SliceType(2)
	SLICE_SP = SliceType(3)
	SLICE_SI = SliceType(4)
)

Variables

View Source
var ErrCannotParseAVCExtension = errors.New("Cannot parse SPS extensions")
View Source
var ErrInvalidSliceType = errors.New("Invalid slice type")
View Source
var ErrLengthSize = errors.New("Can only handle 4byte NAL length size")
View Source
var ErrNoSliceHeader = errors.New("No slice header")
View Source
var ErrNotPPS = errors.New("Not an PPS NAL unit")
View Source
var ErrNotSPS = errors.New("Not an SPS NAL unit")
View Source
var ErrTooFewBytesToParse = errors.New("Too few bytes to parse symbol")

Functions

func CodecString

func CodecString(sampleEntry string, sps *SPS) string

CodecString - sub-parameter for MIME type "codecs" parameter like avc1.42E00C where avc1 is sampleEntry. Defined in ISO/IEC 14496-15 2017.

func ContainsNaluType

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

ContainsNaluType - is specific NaluType present in sample

func ConvertByteStreamToNaluSample

func ConvertByteStreamToNaluSample(stream []byte) []byte

ConvertByteStreamToNaluSample - Change start codes to 4-byte length fields

func ConvertSampleToByteStream

func ConvertSampleToByteStream(sample []byte) []byte

ConvertSampleToByteStream - Replace 4-byte NALU lengths with start codes

func ExtractNalusFromByteStream

func ExtractNalusFromByteStream(data []byte) [][]byte

ExtractNalusFromByteStream - extract NALUs without startcode from ByteStream

func GetNalusFromSample

func GetNalusFromSample(sample []byte) ([][]byte, error)

GetNalusFromSample - get nalus by following 4 byte length fields

func GetParameterSets

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

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

func HasParameterSets

func HasParameterSets(b []byte) bool

HasParameterSets - Check if H.264 SPS and PPS are present

func IsIDRSample

func IsIDRSample(sample []byte) bool

IsIDRSample - does sample contain IDR NALU

Types

type AVCDecConfRec

type AVCDecConfRec struct {
	AVCProfileIndication byte
	ProfileCompatibility byte
	AVCLevelIndication   byte
	SPSnalus             [][]byte
	PPSnalus             [][]byte
	ChromaFormat         byte
	BitDepthLumaMinus1   byte
	BitDepthChromaMinus1 byte
	NumSPSExt            byte
	NoTrailingInfo       bool // To handle strange cases where trailing info is missing
}

AVCDecConfRec - AVCDecoderConfigurationRecord

func CreateAVCDecConfRec

func CreateAVCDecConfRec(spsNALUs [][]byte, ppsNALUs [][]byte) (*AVCDecConfRec, error)

CreateAVCDecConfRec - Create an AVCDecConfRec based on SPS and PPS

func DecodeAVCDecConfRec

func DecodeAVCDecConfRec(r io.Reader) (AVCDecConfRec, error)

DecodeAVCDecConfRec - decode an AVCDecConfRec

func (*AVCDecConfRec) Encode

func (a *AVCDecConfRec) Encode(w io.Writer) error

Encode - write an AVCDecConfRec to w

func (*AVCDecConfRec) Size

func (a *AVCDecConfRec) Size() uint64

type CpbEntry

type CpbEntry struct {
	BitRateValueMinus1 uint
	CpbSizeValueMinus1 uint
	CbrFlag            bool
}

CpbEntry inside HrdParameters

type HrdParameters

type HrdParameters struct {
	CpbCountMinus1                     uint
	BitRateScale                       uint
	CpbSizeScale                       uint
	CpbEntries                         []CpbEntry
	InitialCpbRemovalDelayLengthMinus1 uint
	CpbRemovalDelayLengthMinus1        uint
	DpbOutpuDelayLengthMinus1          uint
	TimeOffsetLength                   uint
}

HrdParameters inside VUI

type NaluType

type NaluType uint16

NaluType - AVC NAL unit type

func FindNaluTypes

func FindNaluTypes(sample []byte) []NaluType

FindNaluTypes - find list of NAL unit types in sample

func GetNaluType

func GetNaluType(naluHeader byte) NaluType

Get NaluType from NAL Unit Header byte

func (NaluType) String

func (a NaluType) String() string

type PPS

type PPS struct {
	PicParameterSetID                     uint
	SeqParameterSetID                     uint
	EntropyCodingModeFlag                 bool
	BottomFieldPicOrderInFramePresentFlag bool
	NumSliceGroupsMinus1                  uint
	SliceGroupMapType                     uint
	RunLengthMinus1                       []uint
	TopLeft                               []uint
	BottomRight                           []uint
	SliceGroupChangeDirectionFlag         bool
	SliceGroupChangeRateMinus1            uint
	PicSizeInMapUnitsMinus1               uint
	SliceGroupId                          []uint
	NumRefIdxI0DefaultActiveMinus1        uint
	NumRefIdxI1DefaultActiveMinus1        uint
	WeightedPredFlag                      bool
	WeightedBipredIDC                     uint
	PicInitQpMinus26                      int
	PicInitQsMinus26                      int
	ChromaQpIndexOffset                   int
	DeblockingFilterControlPresentFlag    bool
	ConstrainedIntraPredFlag              bool
	RedundantPicCntPresentFlag            bool
	Transform8x8ModeFlag                  bool
	PicScalingMatrixPresentFlag           bool
	PicScalingLists                       []ScalingList
	SecondChromaQpIndexOffset             int
}

func ParsePPSNALUnit

func ParsePPSNALUnit(data []byte, sps *SPS) (*PPS, error)

ParsePPSNALUnit - Parse AVC PPS NAL unit starting with NAL header

type SPS

type SPS struct {
	Profile                         uint
	ProfileCompatibility            uint
	Level                           uint
	ParameterID                     uint
	ChromaFormatIDC                 uint
	SeparateColourPlaneFlag         bool
	BitDepthLumaMinus8              uint
	BitDepthChromaMinus8            uint
	QPPrimeYZeroTransformBypassFlag bool
	SeqScalingMatrixPresentFlag     bool
	SeqScalingLists                 []ScalingList
	Log2MaxFrameNumMinus4           uint
	PicOrderCntType                 uint
	Log2MaxPicOrderCntLsbMinus4     uint
	DeltaPicOrderAlwaysZeroFlag     bool
	OffsetForNonRefPic              uint
	OffsetForTopToBottomField       uint
	RefFramesInPicOrderCntCycle     []uint
	NumRefFrames                    uint
	GapsInFrameNumValueAllowedFlag  bool
	FrameMbsOnlyFlag                bool
	MbAdaptiveFrameFieldFlag        bool
	Direct8x8InferenceFlag          bool
	FrameCroppingFlag               bool
	FrameCropLeftOffset             uint
	FrameCropRightOffset            uint
	FrameCropTopOffset              uint
	FrameCropBottomOffset           uint
	Width                           uint
	Height                          uint
	NrBytesBeforeVUI                int
	NrBytesRead                     int
	VUI                             *VUIParameters
}

SPS - AVC SPS parameters

func ParseSPSNALUnit

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

ParseSPSNALUnit - Parse AVC SPS NAL unit starting with NAL header

func (*SPS) ConstraintFlags

func (a *SPS) ConstraintFlags() byte

ConstraintFlags - return the four ConstraintFlag bits

type ScalingList

type ScalingList []int // 4x4 or 8x8 Scaling lists. Nil if not present

type SliceType

type SliceType uint

func GetSliceTypeFromNALU

func GetSliceTypeFromNALU(data []byte) (sliceType SliceType, err error)

GetSliceTypeFromNALU - parse slice header to get slice type in interval 0 to 4

func (SliceType) String

func (s SliceType) String() string

type VUIParameters

type VUIParameters struct {
	SampleAspectRatioWidth             uint
	SampleAspectRatioHeight            uint
	OverscanInfoPresentFlag            bool
	OverscanAppropriateFlag            bool
	VideoSignalTypePresentFlag         bool
	VideoFormat                        uint
	VideoFullRangeFlag                 bool
	ColourDescriptionFlag              bool
	ColourPrimaries                    uint
	TransferCharacteristics            uint
	MatrixCoefficients                 uint
	ChromaLocInfoPresentFlag           bool
	ChromaSampleLocTypeTopField        uint
	ChromaSampleLocTypeBottomField     uint
	TimingInfoPresentFlag              bool
	NumUnitsInTick                     uint
	TimeScale                          uint
	FixedFrameRateFlag                 bool
	NalHrdParametersPresentFlag        bool
	NalHrdParameters                   *HrdParameters
	VclHrdParametersPresentFlag        bool
	VclHrdParameters                   *HrdParameters
	LowDelayHrdFlag                    bool // Only present with HrdParameters
	PicStructPresentFlag               bool
	BitstreamRestrictionFlag           bool
	MotionVectorsOverPicBoundariesFlag bool
	MaxBytesPerPicDenom                uint
	MaxBitsPerMbDenom                  uint
	Log2MaxMvLengthHorizontal          uint
	Log2MaxMvLengthVertical            uint
	MaxNumReorderFrames                uint
	MaxDecFrameBuffering               uint
}

VUIParameters - extra parameters according to 14496-10, E.1

Jump to

Keyboard shortcuts

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