From: qydysky Date: Sun, 4 Aug 2024 08:44:39 +0000 (+0800) Subject: 1 X-Git-Tag: v0.28.20240804085048 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=34c34fd1f4fb4cfcf01968d704ac03a56153b114;p=part%2F.git 1 --- diff --git a/decoder/tool/B_I.go b/decoder/tool/B_I.go index a8d1498..c33750d 100644 --- a/decoder/tool/B_I.go +++ b/decoder/tool/B_I.go @@ -1,4 +1,4 @@ -package mp4 +package tool /* 整数 字节转换区 diff --git a/decoder/tool/sue.go b/decoder/tool/sue.go new file mode 100644 index 0000000..2abe55a --- /dev/null +++ b/decoder/tool/sue.go @@ -0,0 +1,30 @@ +package tool + +// unsigned integer Exp-Golomb-coded syntax element with the left bit first +func ue(d int) (r, move int) { + for d&0b10000000 == 0b00000000 { + move += 1 + d = d << 1 + } + for i := move; i >= 0; i-- { + r |= d & 0b10000000 >> (7 - i) + d = d << 1 + } + return r - 1, 2*move + 1 +} + +// signed integer Exp-Golomb-coded syntax element with the left bit first +func se(d int) (r, move int) { + for d&0b10000000 == 0b00000000 { + move += 1 + d = d << 1 + } + for i := move; i > 0; i-- { + r |= d & 0b10000000 >> (8 - i) + d = d << 1 + } + if d&0b10000000 == 0b00000000 { + r = -r + } + return r, 2*move + 1 +} diff --git a/decoder/tool/sue_test.go b/decoder/tool/sue_test.go new file mode 100644 index 0000000..139cf07 --- /dev/null +++ b/decoder/tool/sue_test.go @@ -0,0 +1,20 @@ +package tool + +import ( + "testing" +) + +func Test_ue(t *testing.T) { + if r, m := ue(0b01101100); r != 2 || m != 3 { + t.Fatal() + } +} + +func Test_se(t *testing.T) { + if r, m := se(0b00101000); r != 2 || m != 5 { + t.Fatal() + } + if r, m := se(0b00100000); r != -2 || m != 5 { + t.Fatal() + } +}