def run(self): print("RUNNING") # Marks segments with changed contents dirty. _timeline_renderer.update_segments() self.dirty_segments = _timeline_renderer.get_dirty_segments() if len(self.dirty_segments) == 0: print("no dirty segments") return try: # Blocks untils renders are stopped and cleaned tlinerenderserver.abort_current_renders() except: # Dbus default timeout of 25s was exceeded, something is very wrong, no use to attempt further work. print( "INFO: tlinerendersrver.abort_current_renders() exceeded DBus timeout of 25s." ) return # Write out MLT XML for render self.save_path = _get_session_dir() + "/" + self.update_id + ".xml" _xml_render_player = renderconsumer.XMLRenderPlayer( self.save_path, self.xml_render_done, None, PROJECT().c_seq, PROJECT(), PLAYER()) _xml_render_player.start()
def mouse_double_clicked(self, frame): hit_seg = self.get_hit_segment(frame) if hit_seg == None: return self.clear_selection() hit_seg.selected = True # On TLINE_RENDERING_AUTO this only selects, segment as render launching is auto if get_tline_rendering_mode() == appconsts.TLINE_RENDERING_AUTO: return global _update_thread # if not rendering, launch render. if _update_thread == None: hit_seg.segment_state = SEGMENT_DIRTY self.launch_update_thread() else: # if rendering, cancel render tlinerenderserver.abort_current_renders() # blocks if _status_polling_thread != None: _status_polling_thread.abort = True # Delete file fragment clip_path = hit_seg.get_clip_path() if os.path.isfile(clip_path) == True: os.remove(clip_path) # Reset to be renderable on request. hit_seg.segment_state = SEGMENT_UNRENDERED hit_seg.content_hash = "-1" # Update gui self.set_all_partially_rendered_segments_not_rendered() gui.tline_render_strip.widget.queue_draw()
def delete_segment(self, segment): global _update_thread, _status_polling_thread if _update_thread != None: tlinerenderserver.abort_current_renders() # blocks if _status_polling_thread != None: _status_polling_thread.abort = True else: _update_thread = None self.segments.remove(segment) self.delete_segment_files([segment]) self.delete_all_partially_rendered_segment_files() self.set_all_partially_rendered_segments_not_rendered() if timeline_visible() == True: current_sequence().update_hidden_track_for_timeline_rendering() gui.tline_render_strip.widget.queue_draw() # On TLINE_RENDERING_AUTO see if user added new segment while rendering. if get_tline_rendering_mode() == appconsts.TLINE_RENDERING_AUTO: self.update_segments() if len(self.get_dirty_segments()) > 0: self.launch_update_thread()
def _strip_menu_item_callback(widget, data): global _update_thread, _status_polling_thread msg, segment = data if msg == "render_segment": segment.segment_state = SEGMENT_DIRTY get_renderer().clear_selection() get_renderer().launch_update_thread() elif msg == "delete_all": if _update_thread != None: tlinerenderserver.abort_current_renders() # blocks if _status_polling_thread != None: _status_polling_thread.abort = True else: _update_thread = None old_segs = get_renderer().segments get_renderer().segments = [] get_renderer().delete_segment_files(old_segs) if timeline_visible() == True: current_sequence().update_hidden_track_for_timeline_rendering() gui.tline_render_strip.widget.queue_draw() elif msg == "settings": settings_dialog_launch(None, None) else: # single segment delete get_renderer().delete_segment(segment)