mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-09 01:40:02 +01:00
connecting up some of the new settings including switching video modes
This commit is contained in:
27
actions.py
27
actions.py
@@ -177,6 +177,33 @@ class Actions(object):
|
|||||||
output_range = max_param - min_param
|
output_range = max_param - min_param
|
||||||
return int(( cc_value / 127 ) * output_range + min_param)
|
return int(( cc_value / 127 ) * output_range + min_param)
|
||||||
|
|
||||||
|
def change_output_mode(self, setting_value):
|
||||||
|
if setting_value == 'hdmi':
|
||||||
|
subprocess.call(['tvservice', '-p'])
|
||||||
|
self._refresh_frame_buffer()
|
||||||
|
elif setting_value == 'composite':
|
||||||
|
self.change_composite_setting(setting_value)
|
||||||
|
|
||||||
|
def change_composite_setting(self, setting_value):
|
||||||
|
if setting_value == 'composite':
|
||||||
|
mode = self.data.settings['video']['COMPOSITE_TYPE']['value']
|
||||||
|
aspect = self.data.settings['video']['COMPOSITE_RATIO']['value']
|
||||||
|
progressive = ''
|
||||||
|
if self.data.settings['video']['COMPOSITE_PROGRESSIVE']['value'] == 'yes':
|
||||||
|
progressive = 'p'
|
||||||
|
subprocess.call(['tvservice --sdtvon="{} {} {}"'.format(mode, aspect, progressive)],shell=True)
|
||||||
|
self._refresh_frame_buffer()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _refresh_frame_buffer():
|
||||||
|
subprocess.run(["fbset -depth 16; fbset -depth 32; xrefresh -display :0" ], shell=True)
|
||||||
|
|
||||||
|
def switch_dev_mode(self, state):
|
||||||
|
if state == 'on':
|
||||||
|
self.run_script('switch_display_to_hdmi')
|
||||||
|
elif state == 'off':
|
||||||
|
self.run_script('switch_display_to_lcd')
|
||||||
|
|
||||||
def switch_display_to_hdmi(self):
|
def switch_display_to_hdmi(self):
|
||||||
settings = self.data.settings
|
settings = self.data.settings
|
||||||
current_screen_mode = [x['options'][0] for x in settings if x['name'] == 'SCREEN_SIZE']
|
current_screen_mode = [x['options'][0] for x in settings if x['name'] == 'SCREEN_SIZE']
|
||||||
|
|||||||
@@ -47,10 +47,13 @@ class Data(object):
|
|||||||
|
|
||||||
def _update_json(self, file_name, data):
|
def _update_json(self, file_name, data):
|
||||||
with open('{}{}'.format(self.PATH_TO_DATA_OBJECTS, file_name), 'w') as data_file:
|
with open('{}{}'.format(self.PATH_TO_DATA_OBJECTS, file_name), 'w') as data_file:
|
||||||
json.dump(data, data_file)
|
json.dump(data, data_file, indent=4, sort_keys=True)
|
||||||
|
|
||||||
def get_dev_mode_status(self):
|
def get_setting_and_folder_from_name(self, setting_name):
|
||||||
return self.settings['other']['DEV_MODE_RESET']['value']
|
for folder_key , folder_item in self.settings.items():
|
||||||
|
for setting_key, setting_item in folder_item.items():
|
||||||
|
if setting_key == setting_name:
|
||||||
|
return folder_key, setting_key, setting_item
|
||||||
|
|
||||||
def create_new_slot_mapping_in_first_open(self, file_name):
|
def create_new_slot_mapping_in_first_open(self, file_name):
|
||||||
######## used for mapping current video to next available slot ########
|
######## used for mapping current video to next available slot ########
|
||||||
@@ -91,13 +94,6 @@ class Data(object):
|
|||||||
self.next_bankslot = '{}-{}'.format(self.bank_number,new_value)
|
self.next_bankslot = '{}-{}'.format(self.bank_number,new_value)
|
||||||
self._update_json(self.NEXT_BANKSLOT_JSON,self.next_bankslot)
|
self._update_json(self.NEXT_BANKSLOT_JSON,self.next_bankslot)
|
||||||
|
|
||||||
def return_setting_details(self, name):
|
|
||||||
for setting_folder_key, setting_folder_item in self.settings.items():
|
|
||||||
for setting_key, setting_details in setting_folder_item.items():
|
|
||||||
if setting_key == name:
|
|
||||||
return setting_details
|
|
||||||
|
|
||||||
|
|
||||||
def check_if_setting_selection_is_action_otherwise_cycle_value(self, setting_index):
|
def check_if_setting_selection_is_action_otherwise_cycle_value(self, setting_index):
|
||||||
######## update the value of selected setting by cycling through valid options ########
|
######## update the value of selected setting by cycling through valid options ########
|
||||||
if(self.setting['options'][0] == 'run_action'):
|
if(self.setting['options'][0] == 'run_action'):
|
||||||
@@ -106,6 +102,11 @@ class Data(object):
|
|||||||
self.cycle_setting_value(setting_index)
|
self.cycle_setting_value(setting_index)
|
||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
|
def update_setting_value(self, setting_folder, setting_name, setting_value):
|
||||||
|
self.settings[setting_folder][setting_name]['value'] = setting_value
|
||||||
|
self._update_json(self.SETTINGS_JSON, self.settings)
|
||||||
|
return self.settings[setting_folder][setting_name]
|
||||||
|
|
||||||
def cycle_setting_value(self, setting_index):
|
def cycle_setting_value(self, setting_index):
|
||||||
this_setting_option = self.settings[setting_index]['options']
|
this_setting_option = self.settings[setting_index]['options']
|
||||||
this_setting_option= this_setting_option[len(this_setting_option)-1:]+this_setting_option[0:len(this_setting_option)-1]
|
this_setting_option= this_setting_option[len(this_setting_option)-1:]+this_setting_option[0:len(this_setting_option)-1]
|
||||||
|
|||||||
@@ -1 +1,84 @@
|
|||||||
[[{"end": -1, "rate": 1, "length": 1132.04, "name": "mushroom-dreams.mp4", "location": "/media/pi/5EB5-664C/recur test videos/mushroom-dreams.mp4", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}, {"end": -1, "rate": 1, "length": -1, "name": "", "location": "", "start": -1}]]
|
[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": 1132.04,
|
||||||
|
"location": "/media/pi/5EB5-664C/recur test videos/mushroom-dreams.mp4",
|
||||||
|
"name": "mushroom-dreams.mp4",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": 6.96,
|
||||||
|
"location": "/home/pi/Videos/recordings/rec-2018-04-25-1.mp4",
|
||||||
|
"name": "rec-2018-04-25-1.mp4",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": -1,
|
||||||
|
"length": -1,
|
||||||
|
"location": "",
|
||||||
|
"name": "",
|
||||||
|
"rate": 1,
|
||||||
|
"start": -1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
@@ -1,36 +1,166 @@
|
|||||||
{
|
{
|
||||||
"midi":
|
"capture": {
|
||||||
{
|
"DEVICE": {
|
||||||
"INPUT": {"value": "enabled", "action": "cycle_setting_options", "options": ["enabled", "disabled"] },
|
"action": "enable_capture_device",
|
||||||
"STATUS": {"value": "disconnected", "action": null, "options": [] },
|
"options": [],
|
||||||
"CHANNEL": {"value": 1, "action": null, "options": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] }
|
"value": "enabled"
|
||||||
|
},
|
||||||
|
"EFFECT": {
|
||||||
|
"action": null,
|
||||||
|
"options": [],
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"EXPOSURE": {
|
||||||
|
"action": null,
|
||||||
|
"options": [],
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"FRAMERATE": {
|
||||||
|
"action": null,
|
||||||
|
"options": [],
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"RESOLUTION": {
|
||||||
|
"action": null,
|
||||||
|
"options": [],
|
||||||
|
"value": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"capture":
|
"midi": {
|
||||||
{
|
"CHANNEL": {
|
||||||
"DEVICE": {"value": "enabled", "action": "enable_capture_device", "options": [] },
|
"action": null,
|
||||||
"RESOLUTION": {"value": "", "action": null, "options": [] },
|
"options": [
|
||||||
"FRAMERATE": {"value": "", "action": null, "options": [] },
|
1,
|
||||||
"EXPOSURE": {"value": "", "action": null, "options": [] },
|
2,
|
||||||
"EFFECT": {"value": "", "action": null, "options": [] }
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11,
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
15,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"INPUT": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"enabled",
|
||||||
|
"disabled"
|
||||||
|
],
|
||||||
|
"value": "enabled"
|
||||||
|
},
|
||||||
|
"STATUS": {
|
||||||
|
"action": null,
|
||||||
|
"options": [],
|
||||||
|
"value": "disconnected"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"sampler":
|
"other": {
|
||||||
{
|
"DEV_MODE_RESET": {
|
||||||
"NEXT": {"value": "now", "action": "cycle_setting_options", "options": ["now", "random", "playlist"] },
|
"action": "switch_dev_mode",
|
||||||
"TRIGGER": {"value": "loop", "action": "cycle_setting_options", "options": ["loop", "once", "once-gated"] },
|
"options": [
|
||||||
"FIXED_LENGTH_MODE": {"value": "off", "action": "cycle_setting_options", "options": ["on","off"] },
|
"on",
|
||||||
"FIXED_LENGTH": {"value": "", "action": "set_fixed_length", "options": [] },
|
"off"
|
||||||
"RAND_START_MODE": {"value": "off", "action": "cycle_setting_options", "options": ["on","off"] }
|
],
|
||||||
|
"value": "on"
|
||||||
|
},
|
||||||
|
"QUIT": {
|
||||||
|
"action": "quit_the_program",
|
||||||
|
"options": [],
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"video":
|
"sampler": {
|
||||||
{
|
"FIXED_LENGTH": {
|
||||||
"OUTPUT": {"value": "hdmi", "action": "change_output_mode", "options": [] },
|
"action": "set_fixed_length",
|
||||||
"COMPOSITE_TYPE": {"value": "pal", "action": "change_composite_output_mode", "options": [] },
|
"options": [],
|
||||||
"SCREEN_MODE": {"value": "stretch", "action": "cycle_setting_options", "options": ["stretch","something else"] }
|
"value": ""
|
||||||
|
},
|
||||||
|
"FIXED_LENGTH_MODE": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"on",
|
||||||
|
"off"
|
||||||
|
],
|
||||||
|
"value": "off"
|
||||||
|
},
|
||||||
|
"NEXT": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"now",
|
||||||
|
"random",
|
||||||
|
"playlist"
|
||||||
|
],
|
||||||
|
"value": "now"
|
||||||
|
},
|
||||||
|
"RAND_START_MODE": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"on",
|
||||||
|
"off"
|
||||||
|
],
|
||||||
|
"value": "off"
|
||||||
|
},
|
||||||
|
"TRIGGER": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"loop",
|
||||||
|
"once",
|
||||||
|
"once-gated"
|
||||||
|
],
|
||||||
|
"value": "loop"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"other":
|
"video": {
|
||||||
{
|
"COMPOSITE_PROGRESSIVE": {
|
||||||
"DEV_MODE_RESET": {"value": "on", "action": "switch_dev_mode", "options": [] },
|
"action": "change_composite_setting",
|
||||||
"QUIT": {"value": null, "action": "quit_the_program", "options": [] }
|
"options": [
|
||||||
|
"off",
|
||||||
|
"on"
|
||||||
|
],
|
||||||
|
"value": "off"
|
||||||
|
},
|
||||||
|
"COMPOSITE_RATIO": {
|
||||||
|
"action": "change_composite_setting",
|
||||||
|
"options": [
|
||||||
|
"4:3",
|
||||||
|
"14:9",
|
||||||
|
"16:9"
|
||||||
|
],
|
||||||
|
"value": "4:3"
|
||||||
|
},
|
||||||
|
"COMPOSITE_TYPE": {
|
||||||
|
"action": "change_composite_setting",
|
||||||
|
"options": [
|
||||||
|
"PAL",
|
||||||
|
"NTSC"
|
||||||
|
],
|
||||||
|
"value": "PAL"
|
||||||
|
},
|
||||||
|
"OUTPUT": {
|
||||||
|
"action": "change_output_mode",
|
||||||
|
"options": [
|
||||||
|
"hdmi",
|
||||||
|
"composite"
|
||||||
|
],
|
||||||
|
"value": "hdmi"
|
||||||
|
},
|
||||||
|
"SCREEN_MODE": {
|
||||||
|
"action": "cycle_setting_options",
|
||||||
|
"options": [
|
||||||
|
"stretch",
|
||||||
|
"letterbox",
|
||||||
|
"fill"
|
||||||
|
],
|
||||||
|
"value": "letterbox"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,8 +146,8 @@ class SettingsMenu(Menu):
|
|||||||
for setting_folder_key, setting_folder_item in self.data.settings.items():
|
for setting_folder_key, setting_folder_item in self.data.settings.items():
|
||||||
if setting_folder_key in self.open_folders:
|
if setting_folder_key in self.open_folders:
|
||||||
self.menu_list.append(dict(name='{}/'.format(setting_folder_key), value=''))
|
self.menu_list.append(dict(name='{}/'.format(setting_folder_key), value=''))
|
||||||
for setting_key, setting_details in setting_folder_item.items():
|
for setting_details_key, setting_details_item in setting_folder_item.items():
|
||||||
self.menu_list.append(dict(name=' {}'.format(setting_key), value=self.data.make_empty_if_none(setting_details['value'])))
|
self.menu_list.append(dict(name=' {}'.format(setting_details_key), value=self.data.make_empty_if_none(setting_details_item['value'])))
|
||||||
else:
|
else:
|
||||||
self.menu_list.append(dict(name='{}|'.format(setting_folder_key), value=''))
|
self.menu_list.append(dict(name='{}|'.format(setting_folder_key), value=''))
|
||||||
|
|
||||||
@@ -155,7 +155,13 @@ class SettingsMenu(Menu):
|
|||||||
is_file, name = self.extract_file_type_and_name_from_menu_format(
|
is_file, name = self.extract_file_type_and_name_from_menu_format(
|
||||||
self.menu_list[self.selected_list_index]['name'])
|
self.menu_list[self.selected_list_index]['name'])
|
||||||
if is_file:
|
if is_file:
|
||||||
return True, self.data.return_setting_details(name)
|
folder, setting_name, setting_details = self.data.get_setting_and_folder_from_name(name)
|
||||||
|
if setting_details['value'] in setting_details['options']:
|
||||||
|
current_value_index = setting_details['options'].index(setting_details['value'])
|
||||||
|
new_value_index = (current_value_index + 1) % len(setting_details['options'])
|
||||||
|
setting_details = self.data.update_setting_value(folder, setting_name, setting_details['options'][new_value_index])
|
||||||
|
self.generate_settings_list()
|
||||||
|
return True, setting_details
|
||||||
else:
|
else:
|
||||||
self.update_open_folders(name)
|
self.update_open_folders(name)
|
||||||
self.generate_settings_list()
|
self.generate_settings_list()
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class Capture(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def set_preview_screen_size(self):
|
def set_preview_screen_size(self):
|
||||||
if self.data.get_screen_size_setting() == 'dev_mode':
|
if self.data.settings['other']['DEV_MODE_RESET']['value'] == 'on':
|
||||||
self.device.preview.fullscreen = False
|
self.device.preview.fullscreen = False
|
||||||
self.device.preview.window = (50, 350, 500, 400)
|
self.device.preview.window = (50, 350, 500, 400)
|
||||||
else:
|
else:
|
||||||
@@ -92,7 +92,7 @@ class Capture(object):
|
|||||||
def convert_raw_recording(self):
|
def convert_raw_recording(self):
|
||||||
recording_path , recording_name = self.generate_recording_path()
|
recording_path , recording_name = self.generate_recording_path()
|
||||||
try:
|
try:
|
||||||
mp4box_process = subprocess.Popen(['MP4Box -add {} {}'.format(self.video_dir + '/raw.h264', recording_path)],shell=True)
|
mp4box_process = subprocess.Popen(['MP4Box', '-add', self.video_dir + '/raw.h264', recording_path])
|
||||||
return mp4box_process , recording_name
|
return mp4box_process , recording_name
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
@@ -108,10 +108,7 @@ class Capture(object):
|
|||||||
if process.poll() is not None:
|
if process.poll() is not None:
|
||||||
self.is_recording = False
|
self.is_recording = False
|
||||||
os.remove(self.video_dir + '/raw.h264')
|
os.remove(self.video_dir + '/raw.h264')
|
||||||
#this is a bit clumsy and should be improved1
|
self.data.create_new_slot_mapping_in_first_open(name)
|
||||||
i = 0
|
|
||||||
while not self.data.create_new_slot_mapping_in_first_open(name, i):
|
|
||||||
i += i
|
|
||||||
else:
|
else:
|
||||||
self.root.after(300, self.wait_for_recording_to_save, process, name)
|
self.root.after(300, self.wait_for_recording_to_save, process, name)
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,10 @@ class VideoPlayer:
|
|||||||
def load(self):
|
def load(self):
|
||||||
try:
|
try:
|
||||||
self.get_context_for_player()
|
self.get_context_for_player()
|
||||||
first_screen_arg, second_screen_arg = self.set_screen_size()
|
is_dev_mode, first_screen_arg, second_screen_arg = self.set_screen_size_for_dev_mode()
|
||||||
self.arguments = ['--no-osd', '--adev', 'local', '--alpha', '0', first_screen_arg, second_screen_arg]
|
self.arguments = ['--no-osd', '--adev', 'local', '--alpha', '0', first_screen_arg, second_screen_arg]
|
||||||
|
if not is_dev_mode:
|
||||||
|
self.arguments.append('-b')
|
||||||
self.status = 'LOADING'
|
self.status = 'LOADING'
|
||||||
print('the location is {}'.format(self.location))
|
print('the location is {}'.format(self.location))
|
||||||
self.omx_player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
|
self.omx_player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
|
||||||
@@ -148,11 +150,12 @@ class VideoPlayer:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def set_screen_size(self):
|
def set_screen_size_for_dev_mode(self):
|
||||||
## only dev mode is needed now that auto handles all modes... can be removed probably ...
|
## only dev mode is needed now that auto handles all modes... can be removed probably ...
|
||||||
if self.data.get_dev_mode_status() == 'on':
|
if self.data.settings['other']['DEV_MODE_RESET']['value'] == 'on':
|
||||||
return '--win', '50,350,550,750'
|
return True, '--win', '50,350,550,750'
|
||||||
else:
|
else:
|
||||||
return '--aspect-mode', 'stretch'
|
aspect_mode = self.data.settings['video']['SCREEN_MODE']['value']
|
||||||
|
return False, '--aspect-mode', aspect_mode
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user