| @@ -12,6 +12,9 @@ import time | |||||
| import pygame | import pygame | ||||
| import wiringpi | |||||
| from .model import Playlist | from .model import Playlist | ||||
| @@ -56,6 +59,9 @@ class VideoLooper: | |||||
| self._osd = self._config.getboolean('video_looper', 'osd') | self._osd = self._config.getboolean('video_looper', 'osd') | ||||
| self._is_random = self._config.getboolean('video_looper', 'is_random') | self._is_random = self._config.getboolean('video_looper', 'is_random') | ||||
| self._keyboard_control = self._config.getboolean('video_looper', 'keyboard_control') | 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 | # Parse string of 3 comma separated values like "255, 255, 255" into | ||||
| # list of ints for colors. | # list of ints for colors. | ||||
| self._bgcolor = list(map(int, self._config.get('video_looper', 'bgcolor') | self._bgcolor = list(map(int, self._config.get('video_looper', 'bgcolor') | ||||
| @@ -71,7 +77,8 @@ class VideoLooper: | |||||
| # Initialize pygame and display a blank screen. | # Initialize pygame and display a blank screen. | ||||
| pygame.display.init() | pygame.display.init() | ||||
| pygame.font.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) | size = self._size = (pygame.display.Info().current_w, pygame.display.Info().current_h) | ||||
| self._screen = pygame.display.set_mode(size, pygame.FULLSCREEN) | self._screen = pygame.display.set_mode(size, pygame.FULLSCREEN) | ||||
| self._bgimage = self._load_bgimage() | self._bgimage = self._load_bgimage() | ||||
| @@ -81,6 +88,11 @@ class VideoLooper: | |||||
| self._small_font = pygame.font.Font(None, 50) | self._small_font = pygame.font.Font(None, 50) | ||||
| self._big_font = pygame.font.Font(None, 250) | self._big_font = pygame.font.Font(None, 250) | ||||
| self._running = True | self._running = True | ||||
| # Set GPIO Pin to input mode | |||||
| if self._gpio_control: | |||||
| wiringpi.pinMode(self._gpio_control_pin, 0) | |||||
| def _print(self, message): | def _print(self, message): | ||||
| """Print message to standard output if console output is enabled.""" | """Print message to standard output if console output is enabled.""" | ||||
| @@ -232,29 +244,34 @@ class VideoLooper: | |||||
| self._prepare_to_run_playlist(playlist) | self._prepare_to_run_playlist(playlist) | ||||
| # Main loop to play videos in the playlist and listen for file changes. | # Main loop to play videos in the playlist and listen for file changes. | ||||
| while self._running: | 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) | time.sleep(0.002) | ||||
| def quit(self): | def quit(self): | ||||