|
@@ -50,6 +50,10 @@ parser.add_option("", "--videoplayer", dest="videoplayer",#default=1,
|
|
|
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
|
|
+
|
|
|
+import numpy
|
|
|
+
|
|
|
+
|
|
|
for o in dir(options):
|
|
|
if "_" in o:
|
|
|
continue
|
|
@@ -132,328 +136,6 @@ try:
|
|
|
PLAYLIST = open_playlist()
|
|
|
except:pass
|
|
|
|
|
|
-class Vopen_NEW():
|
|
|
-
|
|
|
- def __init__(self,dmx=None,_id=None):
|
|
|
- global PLAYLIST
|
|
|
-
|
|
|
- self._id = _id
|
|
|
- self.fpath = '/home/user/Downloads/'
|
|
|
- self.fpath = '/home/user/LibreLight/video/'
|
|
|
- self.fname = '' #'bbb_sunflower_480x320.mp4'
|
|
|
- #self.fname = 'no-video.mp4'
|
|
|
- try:
|
|
|
- self.fname = PLAYLIST[0]
|
|
|
- except Exception as e:
|
|
|
- print("Exception set video from PLAYLIST 5543:",e)
|
|
|
-
|
|
|
-
|
|
|
- self.fps = 0
|
|
|
- self.scale = 50 #%
|
|
|
- self.dmx=dmx
|
|
|
- self.dim = 0
|
|
|
- self.x = 0
|
|
|
- self.y = 0
|
|
|
- self.init_count = 0
|
|
|
- self.cap = None
|
|
|
- self.shape = [200,200]
|
|
|
- self.img = None
|
|
|
- self.success = 1
|
|
|
- self.cv2 = None
|
|
|
- self._run = 0
|
|
|
- self.end = 0
|
|
|
- self._video_nr = 0
|
|
|
-
|
|
|
- self.ready = 0
|
|
|
-
|
|
|
- self.shape_x = 370
|
|
|
- self.shape_y = 235
|
|
|
- try:
|
|
|
- global cv2
|
|
|
- self.cv2 = cv2
|
|
|
- except:
|
|
|
- pass
|
|
|
-
|
|
|
- self.init()
|
|
|
-
|
|
|
- def init(self):
|
|
|
- print("---- ---- Vopen.init()",[self.fname,self._video_nr])
|
|
|
- print(PLAYLIST)
|
|
|
- self.time = 0
|
|
|
- self.t_delta = 0
|
|
|
- self.t_last = time.time()
|
|
|
- self.im = None
|
|
|
- self.pos = 0
|
|
|
- self.buffer = []
|
|
|
- self._init()
|
|
|
- self.init_count = 1
|
|
|
-
|
|
|
- def select_video(self,dmx_value):
|
|
|
- try:
|
|
|
- dmx_value = int(dmx_value/10)
|
|
|
-
|
|
|
- if self._video_nr != dmx_value:
|
|
|
- self._video_nr = dmx_value
|
|
|
-
|
|
|
- if self._video_nr < len(PLAYLIST):
|
|
|
- self.fname = str(PLAYLIST[self._video_nr])
|
|
|
- self.init()
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- print("Vopen.select_video()",dmx_value,e)
|
|
|
-
|
|
|
-
|
|
|
- def close_cap():
|
|
|
- pass
|
|
|
-
|
|
|
- def _init(self):
|
|
|
- self.cap = self.cv2.VideoCapture(self.fpath+self.fname, cv2.CAP_FFMPEG)
|
|
|
- self.Rcap = self.cap
|
|
|
- self.success, self.img = self.cap.read()
|
|
|
-
|
|
|
- def _del(self):
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
- def _read(self):
|
|
|
- ok = 0
|
|
|
- if self.success:
|
|
|
- self.success, self.img = self.cap.read()
|
|
|
-
|
|
|
- if self.fps == 0:
|
|
|
- self.fps = self.cap.get(cv2.CAP_PROP_FPS)
|
|
|
-
|
|
|
- self.img = self.cv2.cvtColor(self.img, self.cv2.COLOR_BGR2RGB)
|
|
|
- self.img = self.rescale_frame2(self.img, 200)
|
|
|
- #self.shape = self.img.shape[1::-1]
|
|
|
- self.buffer.append(self.img)
|
|
|
-
|
|
|
- #self.buffer.append(self.img)
|
|
|
-
|
|
|
- s = sys.getsizeof(self.buffer)/1024
|
|
|
- #print(s)
|
|
|
- ok = 1
|
|
|
- self.ready = 1
|
|
|
- #if len(self.buffer) >= 30:
|
|
|
- # self.ready = 1
|
|
|
- return ok
|
|
|
- def read(self):
|
|
|
- if len(self.buffer) <= 0:
|
|
|
- return
|
|
|
- try:
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- self.pos = len(self.buffer)-1
|
|
|
- self._img = self.buffer[int(self.pos)]
|
|
|
- self.img = self._img
|
|
|
- #self.img = self.cv2.cvtColor(self.img, self.cv2.COLOR_BGR2RGB)
|
|
|
- self.img = self.rescale_frame(self.img, percent=self.scale)
|
|
|
- self.shape = self.img.shape[1::-1]
|
|
|
-
|
|
|
- if self._run: # and len(self.buffer) > 400:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = t-self.t_last
|
|
|
- self.t_last = t
|
|
|
- self.pos += self.t_delta*self.fps
|
|
|
- else:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = 0
|
|
|
- self.t_last = t
|
|
|
-
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- #self.pos = 0 #len(self.buffer)-1
|
|
|
- self.pos = 0 # len(self.buffer)-1
|
|
|
- #print("video.read",self.pos)
|
|
|
- #self.shape = self.img.shape[1::-1]
|
|
|
- except Exception as e:
|
|
|
- print("exception 432",e,len(self.buffer),self.fname)
|
|
|
- #self.init()
|
|
|
-
|
|
|
- def prev(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def rescale_frame2(self,frame, width):
|
|
|
- height = int(frame.shape[0]/frame.shape[1] * width )
|
|
|
- dim = (width, height)
|
|
|
- return self.cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)
|
|
|
-
|
|
|
- def rescale_frame(self,frame, percent=75):
|
|
|
- width = int(frame.shape[1] * percent/ 100)
|
|
|
- height = int(frame.shape[0] * percent/ 100)
|
|
|
- dim = (width, height)
|
|
|
- return self.cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)
|
|
|
-
|
|
|
- def next(self):
|
|
|
-
|
|
|
- self.read()
|
|
|
- try:
|
|
|
- if len(self.buffer) % 100 == 0:
|
|
|
- _id = str(self.__repr__)[-5:-1]
|
|
|
-
|
|
|
- # add DIMER to videplayer
|
|
|
- self.cv2.normalize(self.img, self.img, 0, self.dim, self.cv2.NORM_MINMAX)
|
|
|
-
|
|
|
- img = self.img
|
|
|
- if img is None:
|
|
|
- return
|
|
|
- shape = img.shape[1::-1]
|
|
|
- im = pygame.image.frombuffer(img.tobytes(), shape, "RGB")
|
|
|
- self.im = im
|
|
|
-
|
|
|
- if self._run and len(self.buffer) > 30:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = t-self.t_last
|
|
|
- self.t_last = t
|
|
|
- self.pos += self.t_delta*self.fps
|
|
|
- #self.pos += 4 # speedupt for testing
|
|
|
- else:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = 0
|
|
|
- self.t_last = t
|
|
|
-
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- self.pos = 0 # restart
|
|
|
- #self.pos = len(self.buffer)-1 # stay at the end
|
|
|
-
|
|
|
- except AttributeError as e:
|
|
|
- time.sleep(.05)
|
|
|
- #if self.init_count % 100 == 0:
|
|
|
- print("except 776",str(self).split(" ")[-1],e)
|
|
|
- #self.init()
|
|
|
- except Exception as e:
|
|
|
- print("except 756",str(self).split(" ")[-1], e)
|
|
|
-
|
|
|
- def draw(self,wn=None):
|
|
|
-
|
|
|
- if self.dim <= 1:
|
|
|
- return
|
|
|
-
|
|
|
- if self.scale < 255*.05:
|
|
|
- self.scale = 255*0.05
|
|
|
-
|
|
|
- # draw video background box
|
|
|
- __xw = int(self.shape_x*self.scale/255)
|
|
|
- __yw = int(self.shape_y*self.scale/255)
|
|
|
-
|
|
|
- #xx ,yy = (370,235)
|
|
|
- xx = self.shape_x #= xx
|
|
|
- yy = self.shape_y #= yy
|
|
|
- try:
|
|
|
- xx ,yy = self.im.get_size()[:2]
|
|
|
- self.shape_x = xx
|
|
|
- self.shape_y = yy
|
|
|
- except AttributeError as e:
|
|
|
- pass
|
|
|
-
|
|
|
- xx = int(xx*self.scale/255)
|
|
|
- yy = int(yy*self.scale/255)
|
|
|
-
|
|
|
-
|
|
|
- __xw = int(xx) #*self.scale/255)
|
|
|
- __yw = int(yy) #*self.scale/255)
|
|
|
- yellow = [105,50,0]
|
|
|
- yellow[0] = int(yellow[0]*self.dim/255)
|
|
|
- yellow[1] = int(yellow[1]*self.dim/255)
|
|
|
- yellow[2] = int(yellow[2]*self.dim/255)
|
|
|
- #print(yellow)
|
|
|
- if 1: #corner left up
|
|
|
- p1 = [self.x+2,self.y+2]
|
|
|
- p2 = [self.x+__xw-4,self.y+__yw-4]
|
|
|
- p3 = [self.x+__xw-4,self.y+2]
|
|
|
- p4 = [self.x+2,self.y+__yw-4]
|
|
|
-
|
|
|
- p1 = [self.x,self.y]
|
|
|
- p2 = [self.x+__xw,self.y+__yw]
|
|
|
- p3 = [self.x+__xw,self.y]
|
|
|
- p4 = [self.x,self.y+__yw]
|
|
|
-
|
|
|
- hx=int(xx/2)
|
|
|
- hy=int(yy/2)
|
|
|
- #print(hx,hy,xx,yy) #,ratio)
|
|
|
- #print("-")
|
|
|
- #print(sys.getsizeof(self.buffer))
|
|
|
- #print(sys.getsizeof(self))
|
|
|
- #print(sys.getsizeof(self.Rcap))
|
|
|
- #print(dir(self.Rcap))
|
|
|
- p1 = [self.x-hx,self.y-hy]
|
|
|
- p2 = [self.x+__xw-hx,self.y+__yw-hy]
|
|
|
- p3 = [self.x+__xw-hx,self.y-hy]
|
|
|
- p4 = [self.x-hx,self.y+__yw-hy]
|
|
|
-
|
|
|
- pygame.draw.rect(wn,yellow ,[p1[0] ,p1[1] ,__xw ,__yw])
|
|
|
- pygame.draw.rect(wn,[25,20,20],[p1[0]+1,p1[1]+1,__xw-2,__yw-2])
|
|
|
- pygame.draw.line(wn,yellow ,p1 ,p2)
|
|
|
- pygame.draw.line(wn,yellow ,p3 ,p4)
|
|
|
- if 0: #corner left up
|
|
|
- pygame.draw.rect(wn,yellow,[self.x,self.y,__xw,__yw])
|
|
|
- pygame.draw.rect(wn,[25,20,20],[self.x+1,self.y+1,__xw-2,__yw-2])
|
|
|
- pygame.draw.line(wn,yellow,[self.x+2,self.y+2],[self.x+__xw-4,self.y+__yw-4])
|
|
|
- pygame.draw.line(wn,yellow,[self.x+__xw-4,self.y+2],[self.x+2,self.y+__yw-4])
|
|
|
- if 0: #corner right down
|
|
|
- pygame.draw.rect(wn,yellow,[self.x-__xw,self.y-__yw,__xw,__yw])
|
|
|
- pygame.draw.rect(wn,[25,20,20],[self.x+1-__xw,self.y+1-__yw,__xw-2,__yw-2])
|
|
|
- pygame.draw.line(wn,yellow,[self.x+2-__xw,self.y+2-__yw],[self.x+__xw-4-__xw,self.y+__yw-4-__yw])
|
|
|
- pygame.draw.line(wn,yellow,[self.x+__xw-4-__xw,self.y+2-__yw],[self.x+2-__xw,self.y+__yw-4-__yw])
|
|
|
-
|
|
|
- #pygame.draw.line(wn,yellow,[self.x,self.y],[self.x,self.y+300])
|
|
|
- #pygame.draw.line(wn,yellow,[self.x,self.y],[self.x+300,self.y])
|
|
|
- pz = 0
|
|
|
- #txt = "FPS:{} F:{:05} von {:05} sec:{:0.02f} von {:0.02f}"
|
|
|
- #txt = txt.format(self.fps,int(self.pos),len(self.buffer),(-1),pz )
|
|
|
- #if self.end:
|
|
|
- # fr = font15.render(txt,1, (0,255,0))
|
|
|
- #else:
|
|
|
- # fr = font15.render(txt,1, (255,0,0))
|
|
|
- #wn.blit(fr,(10,main_size[1]-(self._id+1)*35))
|
|
|
-
|
|
|
- if self.ready and wn and self.im: # is not None:
|
|
|
- #wn.blit(self.im, (int(self.x), int(self.y)))
|
|
|
- #wn.blit(self.im, (int(self.x-__xw), int(self.y-__yw)))
|
|
|
- #xx ,yy = self._img.shape[:2]
|
|
|
- xx ,yy = self.im.get_size()[:2]
|
|
|
- #print(xx,yy)
|
|
|
- #wn.blit(self.im, (int(self.x+xx/2), int(self.y+yy/2)))
|
|
|
- wn.blit(self.im, (int(self.x-xx/2), int(self.y-yy/2)))
|
|
|
-
|
|
|
- def overlay(self,wn=None,mode="x"):
|
|
|
- # overlay
|
|
|
- y = main_size[1]-(self._id+1)*50
|
|
|
- pygame.draw.rect(wn,[255,200,0],[5,y,300,28+15])
|
|
|
- font15 = pygame.font.SysFont("freemonobold",17)
|
|
|
-
|
|
|
- pz = 0
|
|
|
-
|
|
|
- if self.end:
|
|
|
- rgb = [ 100,255,100]
|
|
|
- else:
|
|
|
- rgb = [255,100,0]
|
|
|
- pygame.draw.rect(wn,rgb,[220,y,80,13])
|
|
|
-
|
|
|
- _line = "error no _line"
|
|
|
- _line ="F:{:05} von {:05} sec:{:0.02f} von {:0.02f}"
|
|
|
- if self.fps == 0: # check if div zerro
|
|
|
- fps = 1
|
|
|
- _line = _line.format(int(self.pos),len(self.buffer),(-1),pz )
|
|
|
- else:
|
|
|
- pz = (len(self.buffer)/self.fps)
|
|
|
- _line = _line.format(self.fps,int(self.pos),len(self.buffer),(self.pos/self.fps),pz )
|
|
|
-
|
|
|
- fr = font15.render(_line ,1, (0,0,0))
|
|
|
- wn.blit(fr,(10,y))
|
|
|
-
|
|
|
- if self._run:
|
|
|
- mode = "run"
|
|
|
- else:
|
|
|
- mode = "pause"
|
|
|
- txt = "fps:{} id:{} nr:{} scale:{} "
|
|
|
- txt = txt.format(self.fps,self._id+1,self._video_nr,int(self.scale) )
|
|
|
- fr = font15.render(txt,1, (0,0,0))
|
|
|
- wn.blit(fr,(3,y+15))
|
|
|
-
|
|
|
- txt = "{}: {}"
|
|
|
- txt = txt.format(mode,self.fname )
|
|
|
- fr = font15.render(txt,1, (0,0,0))
|
|
|
- wn.blit(fr,(3,y+30))
|
|
|
-
|
|
|
|
|
|
class Vopen():
|
|
|
|
|
@@ -470,7 +152,7 @@ class Vopen():
|
|
|
except Exception as e:
|
|
|
print("Exception set video from PLAYLIST 5543:",e)
|
|
|
|
|
|
-
|
|
|
+ self.restart_t = time.time()
|
|
|
self.fps = 0
|
|
|
self.scale = 50 #%
|
|
|
self.dmx=dmx
|
|
@@ -498,6 +180,11 @@ class Vopen():
|
|
|
|
|
|
self.init()
|
|
|
|
|
|
+ def restart(self):
|
|
|
+ print(self,"reset()")
|
|
|
+ self.pos = 0
|
|
|
+ self.restart_t = time.time()
|
|
|
+
|
|
|
def init(self):
|
|
|
print("---- ---- Vopen.init()",[self.fname,self._video_nr])
|
|
|
print(PLAYLIST)
|
|
@@ -604,6 +291,7 @@ class Vopen():
|
|
|
|
|
|
#self.cv2.normalize(self.img, self.img, 0, self.dim, self.cv2.NORM_MINMAX)
|
|
|
|
|
|
+ # store frame into buffer list
|
|
|
self.buffer.append(self.img)
|
|
|
ok = 1
|
|
|
if len(self.buffer) % 100 == 0:
|
|
@@ -616,34 +304,7 @@ class Vopen():
|
|
|
return ok
|
|
|
|
|
|
def read(self):
|
|
|
- if len(self.buffer) <= 0:
|
|
|
- return
|
|
|
- try:
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- self.pos = len(self.buffer)-1
|
|
|
- self._img = self.buffer[int(self.pos)]
|
|
|
- self.img = self._img
|
|
|
- #self.img = self.cv2.cvtColor(self.img, self.cv2.COLOR_BGR2RGB)
|
|
|
- self.img = self.rescale_frame(self.img, percent=self.scale)
|
|
|
-
|
|
|
- if self._run: # and len(self.buffer) > 400:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = t-self.t_last
|
|
|
- self.t_last = t
|
|
|
- self.pos += self.t_delta*self.fps
|
|
|
- else:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = 0
|
|
|
- self.t_last = t
|
|
|
-
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- #self.pos = 0 #len(self.buffer)-1
|
|
|
- self.pos = 0 # len(self.buffer)-1
|
|
|
- #print("video.read",self.pos)
|
|
|
- self.shape = self.img.shape[1::-1]
|
|
|
- except Exception as e:
|
|
|
- print("exception 432",e,len(self.buffer),self.fname)
|
|
|
- #self.init()
|
|
|
+ pass
|
|
|
|
|
|
def prev(self):
|
|
|
self.pos -= 1
|
|
@@ -664,12 +325,49 @@ class Vopen():
|
|
|
dim = (width, height)
|
|
|
return self.cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)
|
|
|
|
|
|
+ def pause(self):
|
|
|
+ #print("pause",self.t_last)
|
|
|
+ t = time.time()
|
|
|
+ self.t_delta = 0
|
|
|
+ self.t_last = t
|
|
|
+
|
|
|
+ def next_frame(self):
|
|
|
+ #return 0
|
|
|
+
|
|
|
+ if self._run and len(self.buffer) > 30:
|
|
|
+ t = time.time()
|
|
|
+ self.t_delta = t-self.t_last
|
|
|
+ self.pos += self.t_delta*self.fps
|
|
|
+ self.t_last = t
|
|
|
+ else:
|
|
|
+ self.pause()
|
|
|
+
|
|
|
+ if self.restart_t > time.time()-0.5:
|
|
|
+ # prevent flickerung by reset
|
|
|
+ #self.pause()
|
|
|
+ self.pos = 5
|
|
|
+ pass
|
|
|
+
|
|
|
+ # restart at the end
|
|
|
+ if self.pos >= len(self.buffer):
|
|
|
+ self.pos = 0
|
|
|
+
|
|
|
+ self._img = self.buffer[int(self.pos)]
|
|
|
+ self.img = self._img
|
|
|
+
|
|
|
def next(self):
|
|
|
|
|
|
- self.read()
|
|
|
try:
|
|
|
+ self.next_frame()
|
|
|
+
|
|
|
+ #self.img = self.cv2.cvtColor(self.img, self.cv2.COLOR_BGR2RGB)
|
|
|
+ self.img = self.rescale_frame(self.img, percent=self.scale)
|
|
|
+
|
|
|
+ self.shape = self.img.shape[1::-1]
|
|
|
+
|
|
|
if len(self.buffer) % 100 == 0:
|
|
|
_id = str(self.__repr__)[-5:-1]
|
|
|
+ print("next",_id)
|
|
|
|
|
|
# add DIMER to videplayer
|
|
|
self.cv2.normalize(self.img, self.img, 0, self.dim, self.cv2.NORM_MINMAX)
|
|
@@ -679,20 +377,7 @@ class Vopen():
|
|
|
return
|
|
|
self.im = pygame.image.frombuffer(img.tobytes(), self.shape, "RGB")
|
|
|
|
|
|
- if self._run and len(self.buffer) > 30:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = t-self.t_last
|
|
|
- self.t_last = t
|
|
|
- self.pos += self.t_delta*self.fps
|
|
|
- #self.pos += 4 # speedupt for testing
|
|
|
- else:
|
|
|
- t = time.time()
|
|
|
- self.t_delta = 0
|
|
|
- self.t_last = t
|
|
|
-
|
|
|
- if self.pos >= len(self.buffer):
|
|
|
- self.pos = 0 # restart
|
|
|
- #self.pos = len(self.buffer)-1 # stay at the end
|
|
|
+ #self.next_frame()
|
|
|
|
|
|
except AttributeError as e:
|
|
|
time.sleep(.05)
|
|
@@ -828,6 +513,7 @@ class Vopen():
|
|
|
fr = font15.render("{}".format(self.fname) ,1, (0,0,0))
|
|
|
wn.blit(fr,(60,main_size[1]-(self._id+1)*35+15))
|
|
|
|
|
|
+Vopen = Vopen
|
|
|
|
|
|
VIDEO = []
|
|
|
videoplayer=[]
|
|
@@ -1954,7 +1640,7 @@ def draw_video(VIDEO):
|
|
|
if k in count:
|
|
|
if count[k]:
|
|
|
count[k] = 0
|
|
|
- video1.pos = 0
|
|
|
+ video1.restart()
|
|
|
|
|
|
k = "_RUN"
|
|
|
if k in count:
|