2019-07-31 16:05:09 +03:00
|
|
|
/*
|
|
|
|
DESCRIPTION
|
|
|
|
helpers.go provides general helper utilities.
|
|
|
|
|
|
|
|
AUTHORS
|
|
|
|
Saxon Nelson-Milton <saxon@ausocean.org>, 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
|
|
|
|
)
|
|
|
|
|
2019-08-04 18:47:19 +03:00
|
|
|
for i, c := range s {
|
2019-07-31 16:05:09 +03:00
|
|
|
switch c {
|
|
|
|
case ' ':
|
|
|
|
continue
|
|
|
|
case '1':
|
|
|
|
cur |= a
|
|
|
|
case '0':
|
|
|
|
default:
|
|
|
|
return nil, errors.New("invalid binary string")
|
|
|
|
}
|
|
|
|
|
|
|
|
a >>= 1
|
2019-08-04 18:47:19 +03:00
|
|
|
if a == 0 || i == (len(s)-1) {
|
2019-07-31 16:05:09 +03:00
|
|
|
bytes = append(bytes, cur)
|
|
|
|
cur = 0
|
|
|
|
a = 0x80
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return bytes, nil
|
|
|
|
}
|