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  }