# -*- coding: utf-8 -*-
# (c) cubicibo
from SUPer import SupStream, ODS, PCS, WDS, ENDS, DisplaySet, Epoch
from SUPer import PGraphics
FILE_PATH = ...
FILE_OUT1 = ...
FILE_OUT2 = ...
sup = SupStream(FILE_PATH)
cut_height = 1080/2
out1, out2 = [], []
for epoch in sup.epochs():
prev_ds2_has_gfx = False
ds1, ds2 = [], []
for ds in epoch.ds:
if ds.ods and ds.ods[0].height > cut_height:
rle_data = b''.join([ods.data for ods in ds.ods])
graphic = PGraphics.decode_rle(rle_data)
pg2 = PGraphics.encode_rle(graphic[:int(ds.ods[0].height/2),:])
pg1 = PGraphics.encode_rle(graphic[int(ds.ods[0].height/2):,:])
ods2 = ODS.from_scratch(0, 0, *graphic[:int(ds.ods[0].height/2),:].shape[::-1], pg2, pts=ds.pcs.pts)
ods1 = ODS.from_scratch(0, 0, *graphic[int(ds.ods[0].height/2):,:].shape[::-1], pg1, pts=ds.pcs.pts)
if not isinstance(ods1, list): ods1 = [ods1]
if not isinstance(ods2, list): ods2 = [ods2]
ds1.append(DisplaySet([ds.pcs, *ds.wds, *ds.pds, *ods1, ds.segments[-1]]))
ds2.append(DisplaySet([ds.pcs, *ds.wds, *ds.pds, *ods2, ds.segments[-1]]))
#prev_ds2_has_gfx already True => acquisition => "God is in his heaven, all is right with the world" ;)
if prev_ds2_has_gfx is False:
ds2[-1].pcs.composition_state = PCS.CompositionState.EPOCH_START
prev_ds2_has_gfx = True
else:
if prev_ds2_has_gfx:
ds2.append(DisplaySet([PCS(bytes(ds.pcs)), WDS.from_scratch([], pts=ds.pcs.pts), ENDS.from_scratch(pts=ds.pcs.pts)]))
ds2[-1].pcs.composition_state = 0
prev_ds2_has_gfx = False
ds1.append(ds)
out1.append(Epoch(ds1))
if ds2:
out2.append(Epoch(ds2))
with open(FILE_OUT1, 'wb') as f:
f.write(b''.join([bytes(epoch) for epoch in out1]))
with open(FILE_OUT2, 'wb') as f:
f.write(b''.join([bytes(epoch) for epoch in out2]))