|
@@ -61,6 +61,10 @@ class VideoLooper(object): |
|
|
self._fgcolor = map(int, self._config.get('video_looper', 'fgcolor') \ |
|
|
self._fgcolor = map(int, self._config.get('video_looper', 'fgcolor') \ |
|
|
.translate(None, ',') \ |
|
|
.translate(None, ',') \ |
|
|
.split()) |
|
|
.split()) |
|
|
|
|
|
# Load sound volume file name value |
|
|
|
|
|
self._sound_vol_file = self._config.get('omxplayer', 'sound_vol_file'); |
|
|
|
|
|
# default value to 0 millibels (omxplayer) |
|
|
|
|
|
self._sound_vol = 0 |
|
|
# 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() |
|
@@ -91,6 +95,13 @@ class VideoLooper(object): |
|
|
return importlib.import_module('.' + module, 'Adafruit_Video_Looper') \ |
|
|
return importlib.import_module('.' + module, 'Adafruit_Video_Looper') \ |
|
|
.create_file_reader(self._config) |
|
|
.create_file_reader(self._config) |
|
|
|
|
|
|
|
|
|
|
|
def _is_number(iself, s): |
|
|
|
|
|
try: |
|
|
|
|
|
float(s) |
|
|
|
|
|
return True |
|
|
|
|
|
except ValueError: |
|
|
|
|
|
return False |
|
|
|
|
|
|
|
|
def _build_playlist(self): |
|
|
def _build_playlist(self): |
|
|
"""Search all the file reader paths for movie files with the provided |
|
|
"""Search all the file reader paths for movie files with the provided |
|
|
extensions. |
|
|
extensions. |
|
@@ -104,10 +115,20 @@ class VideoLooper(object): |
|
|
# Skip paths that don't exist or are files. |
|
|
# Skip paths that don't exist or are files. |
|
|
if not os.path.exists(path) or not os.path.isdir(path): |
|
|
if not os.path.exists(path) or not os.path.isdir(path): |
|
|
continue |
|
|
continue |
|
|
|
|
|
# Ignore hidden files (useful when file loaded on usb |
|
|
|
|
|
# key from an OSX computer |
|
|
movies.extend(['{0}/{1}'.format(path.rstrip('/'), x) \ |
|
|
movies.extend(['{0}/{1}'.format(path.rstrip('/'), x) \ |
|
|
for x in os.listdir(path) \ |
|
|
for x in os.listdir(path) \ |
|
|
if re.search('\.{0}$'.format(ex), x, |
|
|
if re.search('\.{0}$'.format(ex), x, |
|
|
flags=re.IGNORECASE)]) |
|
|
|
|
|
|
|
|
flags=re.IGNORECASE) and \ |
|
|
|
|
|
x[0] is not '.']) |
|
|
|
|
|
# Get the video volume from the file in the usb key |
|
|
|
|
|
sound_vol_file_path = '{0}/{1}'.format(path.rstrip('/'), self._sound_vol_file) |
|
|
|
|
|
if os.path.exists(sound_vol_file_path): |
|
|
|
|
|
with open(sound_vol_file_path, 'r') as sound_file: |
|
|
|
|
|
sound_vol_string = sound_file.readline() |
|
|
|
|
|
if self._is_number(sound_vol_string): |
|
|
|
|
|
self._sound_vol = int(float(sound_vol_string)) |
|
|
# Create a playlist with the sorted list of movies. |
|
|
# Create a playlist with the sorted list of movies. |
|
|
return Playlist(sorted(movies)) |
|
|
return Playlist(sorted(movies)) |
|
|
|
|
|
|
|
@@ -193,7 +214,7 @@ class VideoLooper(object): |
|
|
if movie is not None: |
|
|
if movie is not None: |
|
|
# Start playing the first available movie. |
|
|
# Start playing the first available movie. |
|
|
self._print('Playing movie: {0}'.format(movie)) |
|
|
self._print('Playing movie: {0}'.format(movie)) |
|
|
self._player.play(movie, loop=playlist.length() == 1) |
|
|
|
|
|
|
|
|
self._player.play(movie, loop=playlist.length() == 1, vol = self._sound_vol) |
|
|
# Check for changes in the file search path (like USB drives added) |
|
|
# Check for changes in the file search path (like USB drives added) |
|
|
# and rebuild the playlist. |
|
|
# and rebuild the playlist. |
|
|
if self._reader.is_changed(): |
|
|
if self._reader.is_changed(): |
|
@@ -203,7 +224,7 @@ class VideoLooper(object): |
|
|
playlist = self._build_playlist() |
|
|
playlist = self._build_playlist() |
|
|
self._prepare_to_run_playlist(playlist) |
|
|
self._prepare_to_run_playlist(playlist) |
|
|
# Give the CPU some time to do other tasks. |
|
|
# Give the CPU some time to do other tasks. |
|
|
time.sleep(0) |
|
|
|
|
|
|
|
|
time.sleep(0.002) |
|
|
|
|
|
|
|
|
def signal_quit(self, signal, frame): |
|
|
def signal_quit(self, signal, frame): |
|
|
"""Shut down the program, meant to by called by signal handler.""" |
|
|
"""Shut down the program, meant to by called by signal handler.""" |
|
|