def display_trim_clip(self, path, clip_start_pos, patter_producer_data=None, ttl=None): """ Adds clip to hidden track for trim editing display. """ track = self.tracks[-1] # Always last track track.clear( ) # # TRIM INIT CRASH HACK, see clear_hidden_track there may be blank clip here track.clips = [] # Display trimmmed clip on hidden track by creating copy of it. # File producer if path != None: clip = editorstate.get_cached_trim_clip(path) if clip == None: clip = self.create_file_producer_clip(path, None, True, ttl) editorstate.add_cached_trim_clip(clip) if clip_start_pos > 0: edit._insert_blank(track, 0, clip_start_pos) edit._insert_clip(track, clip, 1, 0, clip.get_length() - 1) else: edit._insert_clip(track, clip, 1, -clip_start_pos, clip.get_length() - 1) # insert index 1 ? # Pattern producer (FIX ME: does not allow for keyframes in pattern producer) else: clip = self.create_pattern_producer(patter_producer_data) edit._insert_clip(track, clip, 0, 0, clip.get_length() - 1) self._mute_editable()
def display_trim_clip(self, path, clip_start_pos, patter_producer_data=None, ttl=None): """ Adds clip to hidden track for trim editing display. """ track = self.tracks[-1] # Always last track track.clear() # # TRIM INIT CRASH HACK, see clear_hidden_track there may be blank clip here track.clips = [] # Display trimmmed clip on hidden track by creating copy of it. # File producer if path != None: clip = editorstate.get_cached_trim_clip(path) if clip == None: clip = self.create_file_producer_clip(path, None, True, ttl) editorstate.add_cached_trim_clip(clip) if clip_start_pos > 0: edit._insert_blank(track, 0, clip_start_pos) edit._insert_clip(track, clip, 1, 0, clip.get_length() - 1) else: edit._insert_clip(track, clip, 1, -clip_start_pos, clip.get_length() - 1) # insert index 1 ? # Pattern producer (FIX ME: does not allow for keyframes in pattern producer) else: clip = self.create_pattern_producer(patter_producer_data) edit._insert_clip(track, clip, 0, 0, clip.get_length() - 1) self._mute_editable()
def update_trim_hack_blank_length(self): # NEEDED FOR TRIM CRASH HACK, REMOVE IF FIXED self.tracks[-1].clips = [] self.tracks[-1].clear() seq_len = self.seq_len if seq_len < 1: seq_len = 1 edit._insert_blank(self.tracks[-1], 0, seq_len)
def update_hidden_track(self, hidden_track, seq_len): if len(self.segments) == 0: edit._insert_blank(hidden_track, 0, seq_len) else: in_frame = 0 index = 0 for segment in self.segments: if segment.start_frame >= seq_len: break # Blank between segments/sequence start if segment.start_frame > in_frame: edit._insert_blank(hidden_track, index, segment.start_frame - in_frame) index += 1 segment_length = segment.end_frame - segment.start_frame # Segment contents if segment.segment_state == SEGMENT_UNRENDERED or segment.segment_state == SEGMENT_DIRTY: edit._insert_blank(hidden_track, index, segment_length - 1) elif segment.segment_state == SEGMENT_RENDERED: edit.append_clip(hidden_track, segment.producer, 0, segment_length - 1) # -1, out incl. in_frame = segment.end_frame index += 1 if hidden_track.get_length() < seq_len: edit._insert_blank(hidden_track, index, seq_len - hidden_track.get_length())
def redisplay_hidden_clips(self): """ Called after trim mode loop playback to redisplay hidden track clips """ clips = self.tracks[-1].clips self.tracks[-1].clips = [] for i in range(0, len(clips)): clip = clips[i] if clip.is_blanck_clip: edit._insert_blank(self.tracks[-1], i, clip.clip_out - clip.clip_in + 1) else: edit._insert_clip(self.tracks[-1], clip, i, clip.clip_in, clip.clip_out) self._mute_editable()
def _copy_track_contents(from_track, to_track, to_sequence): # Copy clips for i in range(0, len(from_track.clips)): clip = from_track.clips[i] if clip.is_blanck_clip != True: edit.append_clip(to_track, clip, clip.clip_in, clip.clip_out) else: edit._insert_blank(to_track, i, clip.clip_out - clip.clip_in + 1) from_track.clear() from_track.clips = [] # Copy track attributes. to_sequence.set_track_mute_state(to_track.id, from_track.mute_state) to_track.edit_freedom = from_track.edit_freedom
def clear_hidden_track(self): """ Last track is hidden track used to display clips and trim edits. Here that track is cleared of any content. """ self.update_edit_tracks_length() # Empty timeline needs blank clip of len atleast 1 because # edit_insert_blank() always needs a clip to add attributes to # and that method is fundamendal and cannot be changed. seq_len = self.seq_len if seq_len < 1: seq_len = 1 self.tracks[-1].clips = [] self.tracks[-1].clear() edit._insert_blank(self.tracks[-1], 0, seq_len) # TRIM INIT CRASH HACK. This being empty crashes a lot, so far unexplained. self._unmute_editable()
def append_blank(self, blank_length, track): """ Used in hack for trim editing last clip of a track. """ index = len(track.clips) edit._insert_blank(track, index, blank_length)
def create_and_insert_blank(self, track, index, length): """ Used for persistance. """ edit._insert_blank(track, index, length) return track.clips[index]
def update_hidden_track(self, hidden_track, seq_len): # This was required for some real random crashes long time ago, may not be needed anymore but we're keeping this. edit._insert_blank(hidden_track, 0, seq_len)