mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-16 13:20:13 +01:00
refacted video_player and omx_driver into one class
This commit is contained in:
@@ -7,7 +7,6 @@ import traceback
|
|||||||
from data_centre import *
|
from data_centre import *
|
||||||
from tkinter import *
|
from tkinter import *
|
||||||
import tkinter.font
|
import tkinter.font
|
||||||
import omxdriver
|
|
||||||
|
|
||||||
import video_centre
|
import video_centre
|
||||||
import data_centre
|
import data_centre
|
||||||
@@ -37,7 +36,7 @@ video_driver = video_centre.video_driver(frame)
|
|||||||
|
|
||||||
# our data store
|
# our data store
|
||||||
data_object = data_centre.data()
|
data_object = data_centre.data()
|
||||||
video_player = omxdriver.omx_driver(frame, 'nope')
|
#video_player = omxdriver.omx_driver(frame, 'nope')
|
||||||
|
|
||||||
browser_list = data_object.get_browser_data_for_display()
|
browser_list = data_object.get_browser_data_for_display()
|
||||||
|
|
||||||
@@ -272,7 +271,8 @@ def up_key(event):
|
|||||||
global browser_index
|
global browser_index
|
||||||
global browser_start_index
|
global browser_start_index
|
||||||
elif display_mode == "LOOPER":
|
elif display_mode == "LOOPER":
|
||||||
video_driver.current_player.jump_video_back()
|
pass
|
||||||
|
#video_driver.current_player.jump_video_back()
|
||||||
|
|
||||||
def down_key(event):
|
def down_key(event):
|
||||||
if display_mode in ["BROWSER", "SETTINGS"]:
|
if display_mode in ["BROWSER", "SETTINGS"]:
|
||||||
@@ -280,7 +280,8 @@ def down_key(event):
|
|||||||
global browser_index
|
global browser_index
|
||||||
global browser_start_index
|
global browser_start_index
|
||||||
elif display_mode == "LOOPER":
|
elif display_mode == "LOOPER":
|
||||||
video_driver.current_player.jump_video_forward()
|
pass
|
||||||
|
#video_driver.current_player.jump_video_forward()
|
||||||
|
|
||||||
|
|
||||||
def backspace_key(event):
|
def backspace_key(event):
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
7
|
3
|
||||||
112
video_centre.py
112
video_centre.py
@@ -1,7 +1,7 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from omxdriver import omx_driver # <== for deving only
|
from video_player import video_player # <== for deving only
|
||||||
has_omx = True
|
has_omx = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
has_omx = False
|
has_omx = False
|
||||||
@@ -34,7 +34,7 @@ class video_driver(object):
|
|||||||
# TODO: the first clip will be a demo
|
# TODO: the first clip will be a demo
|
||||||
# first_context = '/home/pi/pp_home/media/01_trashpalaceintro.mp4'
|
# first_context = '/home/pi/pp_home/media/01_trashpalaceintro.mp4'
|
||||||
|
|
||||||
self.current_player.load_content()
|
self.current_player.load()
|
||||||
|
|
||||||
self.wait_for_first_load()
|
self.wait_for_first_load()
|
||||||
|
|
||||||
@@ -58,10 +58,10 @@ class video_driver(object):
|
|||||||
|
|
||||||
def play_video(self):
|
def play_video(self):
|
||||||
logger.info('{} is about to play'.format(self.current_player.name))
|
logger.info('{} is about to play'.format(self.current_player.name))
|
||||||
self.current_player.play_content()
|
self.current_player.play()
|
||||||
# self.last_player.exit()
|
# self.last_player.exit()
|
||||||
|
|
||||||
self.next_player.load_content()
|
self.next_player.load()
|
||||||
|
|
||||||
self.wait_for_next_cycle()
|
self.wait_for_next_cycle()
|
||||||
|
|
||||||
@@ -75,10 +75,6 @@ class video_driver(object):
|
|||||||
self.next_player.name))
|
self.next_player.name))
|
||||||
self.switch_players()
|
self.switch_players()
|
||||||
self.play_video()
|
self.play_video()
|
||||||
elif(self.next_player.failed_to_load):
|
|
||||||
self.switch_players()
|
|
||||||
self.next_player.load_content()
|
|
||||||
self.widget.after(self.delay, self.wait_for_next_cycle)
|
|
||||||
else:
|
else:
|
||||||
logger.info('{} is not loaded yet!'.format(
|
logger.info('{} is not loaded yet!'.format(
|
||||||
self.next_player.name))
|
self.next_player.name))
|
||||||
@@ -96,8 +92,8 @@ class video_driver(object):
|
|||||||
|
|
||||||
def get_info_for_video_display(self):
|
def get_info_for_video_display(self):
|
||||||
if has_omx:
|
if has_omx:
|
||||||
return self.current_player.bank_number, self.current_player.omx.status, self.next_player.bank_number, \
|
return self.current_player.bank_number, self.current_player.status, self.next_player.bank_number, \
|
||||||
self.next_player.omx.status, self.current_player.get_position(), self.current_player.length
|
self.next_player.status, self.current_player.get_position(), self.current_player.length
|
||||||
else:
|
else:
|
||||||
return 0, 'test', 1, 'test', 0, 10
|
return 0, 'test', 1, 'test', 0, 10
|
||||||
|
|
||||||
@@ -105,99 +101,3 @@ class video_driver(object):
|
|||||||
self.next_player.exit()
|
self.next_player.exit()
|
||||||
self.current_player.exit()
|
self.current_player.exit()
|
||||||
|
|
||||||
|
|
||||||
class video_player(object):
|
|
||||||
def __init__(self, widget, name):
|
|
||||||
self.widget = widget
|
|
||||||
self.name = name
|
|
||||||
self.video_name = ''
|
|
||||||
self.status = 'UNASSIGNED'
|
|
||||||
self.bank_number = '-'
|
|
||||||
self.position = 0
|
|
||||||
self.start = ''
|
|
||||||
self.end = ''
|
|
||||||
self.length = 10
|
|
||||||
self.location = ''
|
|
||||||
self.failed_to_load = False
|
|
||||||
self.omx = omx_driver(self.widget, dbus_name=self.name)
|
|
||||||
|
|
||||||
def is_loaded(self):
|
|
||||||
return self.omx.status is 'LOADED'
|
|
||||||
|
|
||||||
def is_finished(self):
|
|
||||||
return self.omx.status is 'FINISHED'
|
|
||||||
|
|
||||||
def get_position(self):
|
|
||||||
if self.omx.status is not 'LOADING':
|
|
||||||
return self.omx.get_position()
|
|
||||||
else:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def play_content(self):
|
|
||||||
|
|
||||||
logger.info('{} is playing now'.format(self.name))
|
|
||||||
self.omx.play()
|
|
||||||
|
|
||||||
def load_content(self):
|
|
||||||
try:
|
|
||||||
self.get_context_for_this_player()
|
|
||||||
logger.info('{} is loading now {}'.format(
|
|
||||||
self.name,self.location ))
|
|
||||||
if self.location == '' :
|
|
||||||
data_centre.set_message("failed to load - bank empty")
|
|
||||||
print('failed to load')
|
|
||||||
self.failed_to_load = True
|
|
||||||
else:
|
|
||||||
self.omx.load(self.location,
|
|
||||||
['--no-osd']) #'{}'.format(screen_size),
|
|
||||||
except Exception as e:
|
|
||||||
print('load problems, the current message is: {}'.format(e.message))
|
|
||||||
data_centre.set_message(e.message)
|
|
||||||
|
|
||||||
def get_context_for_this_player(self):
|
|
||||||
next_context = data_centre.get_next_context()
|
|
||||||
self.location = next_context['location']
|
|
||||||
self.length = next_context['length']
|
|
||||||
self.start = next_context['start']
|
|
||||||
self.end = next_context['end']
|
|
||||||
self.video_name = next_context['name']
|
|
||||||
self.bank_number = next_context['bank_number']
|
|
||||||
|
|
||||||
def reload_content(self):
|
|
||||||
self.status = 'RELOADING'
|
|
||||||
if self.is_loaded():
|
|
||||||
self.exit()
|
|
||||||
else:
|
|
||||||
self.widget.after(50, self.reload_content)
|
|
||||||
print("trying to reload")
|
|
||||||
self.load_content()
|
|
||||||
|
|
||||||
def exit(self):
|
|
||||||
try:
|
|
||||||
if (self.is_loaded):
|
|
||||||
logger.info('{} is exiting omx'.format(self.name))
|
|
||||||
self.omx.quit()
|
|
||||||
self.omx = omx_driver(self.widget, dbus_name=self.name)
|
|
||||||
except Exception as e:
|
|
||||||
print('the current message is: {}'.format(e.message))
|
|
||||||
data_centre.set_message(e.message)
|
|
||||||
|
|
||||||
def toggle_pause(self):
|
|
||||||
self.omx.toggle_pause()
|
|
||||||
|
|
||||||
def jump_video_forward(self):
|
|
||||||
self.omx.seek(30)
|
|
||||||
|
|
||||||
def jump_video_back(self):
|
|
||||||
self.omx.seek(-30)
|
|
||||||
|
|
||||||
|
|
||||||
# tk = Tk()
|
|
||||||
|
|
||||||
# canvas = Canvas(tk,width=500,height=400, bd=0, highlightthickness=0)
|
|
||||||
# canvas.pack()
|
|
||||||
|
|
||||||
# driver = video_driver(canvas)
|
|
||||||
|
|
||||||
# while True:
|
|
||||||
# tk.update()
|
|
||||||
|
|||||||
90
video_player.py
Normal file
90
video_player.py
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
from omxplayer.player import OMXPlayer
|
||||||
|
import data_centre
|
||||||
|
|
||||||
|
class video_player:
|
||||||
|
def __init__(self, root, name):
|
||||||
|
self.root = root
|
||||||
|
self.player = None
|
||||||
|
self.name = name
|
||||||
|
self.omx_running = False
|
||||||
|
self.status = 'UNASSIGNED'
|
||||||
|
self.duration = 0
|
||||||
|
self.bank_number = '-'
|
||||||
|
self.start = -1
|
||||||
|
self.end = -1
|
||||||
|
self.length = 0
|
||||||
|
self.location = ''
|
||||||
|
self.arguments = ['--no-osd'] #'{}'.format(screen_size),
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
self.get_context_for_player()
|
||||||
|
|
||||||
|
self.status = 'LOADING'
|
||||||
|
self.player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
|
||||||
|
self.omx_running = True
|
||||||
|
self.duration = self.player.duration()
|
||||||
|
print('{}: the duration is {}'.format(self.name, self.duration))
|
||||||
|
self.pause_at_start()
|
||||||
|
|
||||||
|
def pause_at_start(self):
|
||||||
|
position = self.get_position()
|
||||||
|
print('{}: the pause_at_start position is {}'.format(self.name, position))
|
||||||
|
if(position > -0.05):
|
||||||
|
self.status = 'LOADED'
|
||||||
|
self.player.pause()
|
||||||
|
print('{}: its paused'.format(self.name))
|
||||||
|
else:
|
||||||
|
self.root.after(5,self.pause_at_start)
|
||||||
|
|
||||||
|
def play(self):
|
||||||
|
self.status = 'PLAYING'
|
||||||
|
self.player.play()
|
||||||
|
self.pause_at_end()
|
||||||
|
|
||||||
|
def pause_at_end(self):
|
||||||
|
position = self.get_position()
|
||||||
|
print('{}: the pause_at_end position is {}'.format(self.name, position))
|
||||||
|
if(position > (self.duration - 0.15 )):
|
||||||
|
self.status = 'FINISHED'
|
||||||
|
print('time to end is {}'.format(self.duration - position))
|
||||||
|
self.player.pause()
|
||||||
|
print('its finished')
|
||||||
|
elif(self.omx_running):
|
||||||
|
self.root.after(5,self.pause_at_end)
|
||||||
|
|
||||||
|
def is_loaded(self):
|
||||||
|
return self.status is 'LOADED'
|
||||||
|
|
||||||
|
def is_finished(self):
|
||||||
|
return self.status is 'FINISHED'
|
||||||
|
|
||||||
|
def get_position(self):
|
||||||
|
try:
|
||||||
|
return self.player.position()
|
||||||
|
except:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def get_context_for_player(self):
|
||||||
|
next_context = data_centre.get_next_context()
|
||||||
|
self.location = next_context['location']
|
||||||
|
self.length = next_context['length']
|
||||||
|
self.start = next_context['start']
|
||||||
|
self.end = next_context['end']
|
||||||
|
self.bank_number = next_context['bank_number']
|
||||||
|
|
||||||
|
def toggle_pause(self):
|
||||||
|
self.player.play_pause()
|
||||||
|
|
||||||
|
self.status = self.player.playback_status().upper()
|
||||||
|
|
||||||
|
def seek(self, amount):
|
||||||
|
self.player.seek(amount)
|
||||||
|
|
||||||
|
def exit(self):
|
||||||
|
try:
|
||||||
|
self.player.quit()
|
||||||
|
self.omx_running = False
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user