|
|
@@ -12,6 +12,9 @@ import time |
|
|
|
|
|
|
|
import pygame |
|
|
|
|
|
|
|
import wiringpi |
|
|
|
|
|
|
|
|
|
|
|
from .model import Playlist |
|
|
|
|
|
|
|
|
|
|
@@ -56,6 +59,9 @@ class VideoLooper: |
|
|
|
self._osd = self._config.getboolean('video_looper', 'osd') |
|
|
|
self._is_random = self._config.getboolean('video_looper', 'is_random') |
|
|
|
self._keyboard_control = self._config.getboolean('video_looper', 'keyboard_control') |
|
|
|
self._gpio_control = self._config.getboolean('video_looper', 'gpio_control') |
|
|
|
self._gpio_control_pin = self._config.get('video_looper', 'gpio_control_pin') |
|
|
|
self._gpio_control_upstate = self._config.get('video_looper', 'gpio_control_upstate') # 1 or 0 |
|
|
|
# Parse string of 3 comma separated values like "255, 255, 255" into |
|
|
|
# list of ints for colors. |
|
|
|
self._bgcolor = list(map(int, self._config.get('video_looper', 'bgcolor') |
|
|
@@ -71,7 +77,8 @@ class VideoLooper: |
|
|
|
# Initialize pygame and display a blank screen. |
|
|
|
pygame.display.init() |
|
|
|
pygame.font.init() |
|
|
|
pygame.mouse.set_visible(False) |
|
|
|
pygame.mouse.set_visible(False)/ |
|
|
|
|
|
|
|
size = self._size = (pygame.display.Info().current_w, pygame.display.Info().current_h) |
|
|
|
self._screen = pygame.display.set_mode(size, pygame.FULLSCREEN) |
|
|
|
self._bgimage = self._load_bgimage() |
|
|
@@ -81,6 +88,11 @@ class VideoLooper: |
|
|
|
self._small_font = pygame.font.Font(None, 50) |
|
|
|
self._big_font = pygame.font.Font(None, 250) |
|
|
|
self._running = True |
|
|
|
|
|
|
|
# Set GPIO Pin to input mode |
|
|
|
if self._gpio_control: |
|
|
|
wiringpi.pinMode(self._gpio_control_pin, 0) |
|
|
|
|
|
|
|
|
|
|
|
def _print(self, message): |
|
|
|
"""Print message to standard output if console output is enabled.""" |
|
|
@@ -232,29 +244,34 @@ class VideoLooper: |
|
|
|
self._prepare_to_run_playlist(playlist) |
|
|
|
# Main loop to play videos in the playlist and listen for file changes. |
|
|
|
while self._running: |
|
|
|
# Load and play a new movie if nothing is playing. |
|
|
|
if not self._player.is_playing(): |
|
|
|
movie = playlist.get_next() |
|
|
|
if movie is not None: |
|
|
|
# Start playing the first available movie. |
|
|
|
self._print('Playing movie: {0}'.format(movie)) |
|
|
|
self._player.play(movie, loop=playlist.length() == 1, vol = self._sound_vol) |
|
|
|
# Check for changes in the file search path (like USB drives added) |
|
|
|
# and rebuild the playlist. |
|
|
|
if self._reader.is_changed(): |
|
|
|
self._player.stop(3) # Up to 3 second delay waiting for old |
|
|
|
# player to stop. |
|
|
|
# Rebuild playlist and show countdown again (if OSD enabled). |
|
|
|
playlist = self._build_playlist() |
|
|
|
self._prepare_to_run_playlist(playlist) |
|
|
|
# Event handling for key press, if keyboard control is enabled |
|
|
|
if self._keyboard_control: |
|
|
|
for event in pygame.event.get(): |
|
|
|
if event.type == pygame.KEYDOWN: |
|
|
|
# If pressed key is ESC quit program |
|
|
|
if event.key == pygame.K_ESCAPE: |
|
|
|
self.quit() |
|
|
|
# Give the CPU some time to do other tasks. |
|
|
|
if not self._gpio_control or wiringpi.digitalRead(self._gpio_control_pin) == self._gpio_control_upstate: |
|
|
|
|
|
|
|
# Load and play a new movie if nothing is playing. |
|
|
|
if not self._player.is_playing(): |
|
|
|
movie = playlist.get_next() |
|
|
|
if if not self._player.is_playing(): movie is not None: |
|
|
|
# Start playing the first available movie. |
|
|
|
self._print('Playing movie: {0}'.format(movie)) |
|
|
|
self._player.play(movie, loop=playlist.length() == 1, vol = self._sound_vol) |
|
|
|
# Check for changes in the file search path (like USB drives added) |
|
|
|
# and rebuild the playlist. |
|
|
|
if self._reader.is_changed(): |
|
|
|
self._player.stop(3) # Up to 3 second delay waiting for old |
|
|
|
# player to stop. |
|
|
|
# Rebuild playlist and show countdown again (if OSD enabled). |
|
|
|
playlist = self._build_playlist() |
|
|
|
self._prepare_to_run_playlist(playlist) |
|
|
|
# Event handling for key press, if keyboard control is enabled |
|
|
|
if self._keyboard_control: |
|
|
|
for event in pygame.event.get(): |
|
|
|
if event.type == pygame.KEYDOWN: |
|
|
|
# If pressed key is ESC quit program |
|
|
|
if event.key == pygame.K_ESCAPE: |
|
|
|
self.quit() |
|
|
|
else: |
|
|
|
self._player.stop() |
|
|
|
|
|
|
|
# Give the CPU some time to do other tasks. |
|
|
|
time.sleep(0.002) |
|
|
|
|
|
|
|
def quit(self): |
|
|
|