diff --git a/codec/h264/h264dec/helpers.go b/codec/h264/h264dec/helpers.go new file mode 100644 index 00000000..22e9a5eb --- /dev/null +++ b/codec/h264/h264dec/helpers.go @@ -0,0 +1,41 @@ +/* +DESCRIPTION + helpers.go provides general helper utilities. + +AUTHORS + Saxon Nelson-Milton , The Australian Ocean Laboratory (AusOcean) +*/ +package h264dec + +import "errors" + +// binToSlice is a helper function to convert a string of binary into a +// corresponding byte slice, e.g. "0100 0001 1000 1100" => {0x41,0x8c}. +// Spaces in the string are ignored. +func binToSlice(s string) ([]byte, error) { + var ( + a byte = 0x80 + cur byte + bytes []byte + ) + + for _, c := range s { + switch c { + case ' ': + continue + case '1': + cur |= a + case '0': + default: + return nil, errors.New("invalid binary string") + } + + a >>= 1 + if a == 0 { + bytes = append(bytes, cur) + cur = 0 + a = 0x80 + } + } + return bytes, nil +}