77from PIL import Image
88from io import BytesIO
99import time
10- import random
1110import numpy
1211
1312app = Flask (__name__ )
@@ -67,40 +66,48 @@ def set_element_color(self, midiTrigger, color_idx, animation_idx):
6766
6867 def prepare_next_frame_for_display (self , frame , input_format = push2_python .constants .FRAME_FORMAT_BGR565 ):
6968 global latest_prepared_base64_image_to_send , latest_prepared_image_sent
70-
69+
7170 # 'frame' expects a "frame" as in display.display_frame method
7271 if time .time () - self .last_time_frame_prepared > 1.0 / 5.0 : # Limit fps to save recources
7372 self .last_time_frame_prepared = time .time ()
74-
73+
7574 # We need to convert the frame to RGBA format first (so Pillow can read it later)
75+ if input_format == push2_python .constants .FRAME_FORMAT_RGB :
76+ frame = push2_python .display .rgb_to_bgr565 (frame )
77+
7678 frame = frame .transpose ().flatten ()
7779 rgb_frame = numpy .zeros (shape = (len (frame ), 1 ), dtype = numpy .uint32 ).flatten ()
7880 rgb_frame [:] = frame [:]
81+
7982 if input_format == push2_python .constants .FRAME_FORMAT_RGB565 :
8083 r_filter = int ('1111100000000000' , 2 )
8184 g_filter = int ('0000011111100000' , 2 )
8285 b_filter = int ('0000000000011111' , 2 )
8386 frame_r_filtered = numpy .bitwise_and (rgb_frame , r_filter )
84- frame_r_shifted = numpy .left_shift (frame_r_filtered , 16 ) # Shift 16 to left so R starts at bit 32
87+ frame_r_shifted = numpy .right_shift (frame_r_filtered , 8 ) # Shift 8 to right so R sits in the the 0-7 right-most bits
8588 frame_g_filtered = numpy .bitwise_and (rgb_frame , g_filter )
86- frame_g_shifted = numpy .left_shift (frame_g_filtered , 13 ) # Shift 13 to the left so G start at bit 24
89+ frame_g_shifted = numpy .left_shift (frame_g_filtered , 5 ) # Shift 5 to the left so G sits at the 8-15 bits
8790 frame_b_filtered = numpy .bitwise_and (rgb_frame , b_filter )
88- frame_b_shifted = numpy .left_shift (frame_b_filtered , 11 ) # Shift 11 so B starts at bit 16
91+ frame_b_shifted = numpy .left_shift (frame_b_filtered , 19 ) # Shift 19 to the left so G sits at the 16-23 bits
8992 rgb_frame = frame_r_shifted + frame_g_shifted + frame_b_shifted # Combine all channels
90- rgb_frame = numpy .bitwise_or (rgb_frame , int ('00000000000000000000000011111111' , 2 )) # Set alpha channel to "full!"
91- elif input_format == push2_python .constants .FRAME_FORMAT_BGR565 :
93+ rgb_frame = numpy .bitwise_or (rgb_frame , int ('11111111000000000000000000000000' , 2 )) # Set alpha channel to "full!" (bits 24-32)
94+
95+ elif input_format == push2_python .constants .FRAME_FORMAT_BGR565 or input_format == push2_python .constants .FRAME_FORMAT_RGB :
9296 r_filter = int ('0000000000011111' , 2 )
9397 g_filter = int ('0000011111100000' , 2 )
94- b_filter = int ('1111100000000000' , 2 )
95- frame_r_filtered = numpy .bitwise_and (rgb_frame , r_filter )
96- frame_r_shifted = numpy .left_shift (frame_r_filtered , 27 ) # Shift 27 to left so R starts at bit 32
98+ b_filter = int ('1111100000000000' , 2 )
99+ frame_r_filtered = numpy .bitwise_and (rgb_frame , r_filter )
100+ frame_r_shifted = numpy .left_shift (frame_r_filtered , 3 ) # Shift 3 to left so R sits in the the 0-7 right-most bits
97101 frame_g_filtered = numpy .bitwise_and (rgb_frame , g_filter )
98- frame_g_shifted = numpy .left_shift (frame_g_filtered , 13 ) # Shift 13 to the left so G start at bit 24
102+ frame_g_shifted = numpy .left_shift (frame_g_filtered , 5 ) # Shift 5 to the left so G sits at the 8-15 bits
99103 frame_b_filtered = numpy .bitwise_and (rgb_frame , b_filter )
100- frame_b_shifted = frame_b_filtered # No shift, B already starts at 16
104+ frame_b_shifted = numpy . left_shift ( frame_b_filtered , 8 ) # Shift 8 to the left so G sits at the 16-23 bits
101105 rgb_frame = frame_r_shifted + frame_g_shifted + frame_b_shifted # Combine all channels
102- rgb_frame = numpy .bitwise_or (rgb_frame , int ('00000000000000000000000011111111' , 2 )) # Set alpha channel to "full!"
106+ rgb_frame = numpy .bitwise_or (rgb_frame , int ('11111111000000000000000000000000' , 2 )) # Set alpha channel to "full!" (bits 24-32)
107+
108+ '''
103109 elif input_format == push2_python.constants.FRAME_FORMAT_RGB:
110+
104111 r_filter = int('111111110000000000000000', 2)
105112 g_filter = int('000000001111111100000000', 2)
106113 b_filter = int('000000000000000011111111', 2)
@@ -112,6 +119,7 @@ def prepare_next_frame_for_display(self, frame, input_format=push2_python.consta
112119 frame_b_shifted = frame_b_filtered # No shift, B already starts at 16
113120 rgb_frame = frame_r_shifted + frame_g_shifted + frame_b_shifted # Combine all channels
114121 rgb_frame = numpy.bitwise_or(rgb_frame, int('00000000000000000000000011111111', 2)) # Set alpha channel to "full!"
122+ '''
115123
116124 img = Image .frombytes ('RGBA' , (960 , 160 ), rgb_frame .tobytes ())
117125 buffered = BytesIO ()
@@ -195,7 +203,7 @@ def index():
195203
196204
197205def run_simulator_in_thread ():
198- sim_app .run (app )
206+ sim_app .run (app , port = 6128 )
199207
200208
201209def start_simulator (_push_object ):
0 commit comments