forked from h26forge/h26forge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathslice_0_all_blue.py
80 lines (67 loc) · 5.93 KB
/
slice_0_all_blue.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
76
77
78
79
80
##
# make_first_frame_all_blue
#
# Makes the first frame to have an all blue chroma residue, nabbed from solid_blue.png
##
def slice_0_all_blue(ds):
from helpers import set_cbp_chroma_and_luma, new_transform_block
print("\t Setting the first frame to be all blue")
ds["slices"][0]["sd"]["macroblock_vec"][0]["mb_type"] = "I16x16_2_1_0"
ds = set_cbp_chroma_and_luma(0, 0, ds)
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_chroma_pred_mode"] = 0
ds["slices"][0]["sd"]["macroblock_vec"][0]["mb_qp_delta"] = 0
# set the luma values
# if available then we just set the index
if ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["available"]:
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["last_significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coeff_abs_level_minus1"][0] = 1112
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coeff_sign_flag"][0] = True
else:
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["available"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["last_significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coeff_abs_level_minus1"].append(1112)
ds["slices"][0]["sd"]["macroblock_vec"][0]["intra_16x16_dc_level_transform_blocks"]["coeff_sign_flag"].append(True)
if len(ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"]) < 2:
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"].append(new_transform_block())
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"].append(new_transform_block())
if ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["available"]:
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["last_significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coeff_abs_level_minus1"][0] = 891
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coeff_sign_flag"][0] = False
else:
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["available"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["last_significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coeff_abs_level_minus1"].append(891)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][0]["coeff_sign_flag"].append(False)
if ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["available"]:
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["last_significant_coeff_flag"][0] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coeff_abs_level_minus1"][0] = 140
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coeff_sign_flag"][0] = True
else:
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["available"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coded_block_flag"] = True
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["last_significant_coeff_flag"].append(True)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coeff_abs_level_minus1"].append(140)
ds["slices"][0]["sd"]["macroblock_vec"][0]["chroma_dc_level_transform_blocks"][1]["coeff_sign_flag"].append(True)
# set all the other macroblocks
for i in range(1, len(ds["slices"][0]["sd"]["macroblock_vec"])):
ds["slices"][0]["sd"]["macroblock_vec"][i]["mb_type"] = "I16x16_2_0_0"
ds = set_cbp_chroma_and_luma(0, i, ds)
ds["slices"][0]["sd"]["macroblock_vec"][i]["intra_chroma_pred_mode"] = 0
ds["slices"][0]["sd"]["macroblock_vec"][i]["mb_qp_delta"] = 0
ds["slices"][0]["sd"]["macroblock_vec"][i]["intra_16x16_dc_level_transform_blocks"]["available"] = True
ds["slices"][0]["sd"]["macroblock_vec"][i]["intra_16x16_dc_level_transform_blocks"]["coded_block_flag"] = False
return ds
def modify_video(ds):
return slice_0_all_blue(ds)