github.com/bluenviron/mediacommon@v1.9.3/pkg/codecs/mpeg4video/is_valid_config.go (about) 1 package mpeg4video 2 3 import ( 4 "bytes" 5 "fmt" 6 ) 7 8 // IsValidConfig checks whether a MPEG-4 Video configuration is valid. 9 func IsValidConfig(config []byte) error { 10 if !bytes.HasPrefix(config, []byte{0, 0, 1, byte(VisualObjectSequenceStartCode)}) { 11 return fmt.Errorf("doesn't start with visual_object_sequence_start_code") 12 } 13 14 videoObjectFound := false 15 videoObjectLayerFound := false 16 17 for i := 4; i < (len(config) - 4); i++ { 18 if bytes.Equal(config[i:i+3], []byte{0, 0, 1}) { 19 startCode := StartCode(config[i+3]) 20 21 switch { 22 case startCode >= VideoObjectStartCodeFirst && startCode <= VideoObjectStartCodeLast: 23 videoObjectFound = true 24 25 case startCode >= VideoObjectLayerStartCodeFirst && startCode <= VideoObjectLayerStartCodeLast: 26 videoObjectLayerFound = true 27 28 case startCode == VisualObjectStartCode, 29 startCode == UserDataStartCode: 30 31 default: 32 return fmt.Errorf("unexpected start code: %x", startCode) 33 } 34 35 i += 3 36 } 37 } 38 39 if !videoObjectFound { 40 return fmt.Errorf("video object not found") 41 } 42 43 if !videoObjectLayerFound { 44 return fmt.Errorf("video object layer not found") 45 } 46 47 return nil 48 }