-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpyUtils.py
76 lines (55 loc) · 1.82 KB
/
pyUtils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import math
class StrBinArray():
def __init__(self, binary):
self.binary = binary
self.r_idx = 0
def read_bits(payload, int_size):
if int_size == 0:
return 0
str_bits = payload.binary[payload.r_idx: payload.r_idx + int_size]
int_bits = int(str_bits, 2)
payload.r_idx = payload.r_idx + int_size
return int_bits
def read_ue(payload):
leading_zero_bits = 0
while read_bits(payload, 1) == 0:
leading_zero_bits = leading_zero_bits + 1
num_1 = 1
temp = leading_zero_bits
while temp > 0:
num_1 = 2 * num_1
temp = temp - 1
num_2 = 1
num_3 = read_bits(payload, leading_zero_bits)
result = num_1 - num_2 + num_3
return result
def read_se(payload):
ue = read_ue(payload)
if ue % 2 == 0:
num_1 = -1
else:
num_1 = 1
num_2 = math.ceil(ue / 2)
result = num_1 * num_2
return result
def more_rbsp_data(payload):
last_1_idx = payload.binary.rfind("1")
if payload.r_idx < last_1_idx:
return True
return False
def scaling_list(str_payload, scaling_list, size_of_scaling_list, use_default_scaling_matrix_flag):
last_scale = 8
next_scale = 8
for j in range(size_of_scaling_list):
if next_scale != 0:
delta_scale = read_se(str_payload)
next_scale = math.floor((last_scale + delta_scale + 256) % 256)
use_default_scaling_matrix_flag = (j == 0 and next_scale == 0)
if next_scale == 0:
scaling_list[j] = last_scale
else:
scaling_list[j] = next_scale
last_scale = scaling_list[j]
def rbsp_trailing_bits(str_payload):
last_payload = str_payload.binary[str_payload.r_idx:]
print("rbsp_trailing_bits() binary of last_payload = " + last_payload)