def __init__(self, app, project, pipeline=None): from pitivi.preset import RenderPresetManager Loggable.__init__(self) self.app = app self.project = project self.system = app.system if pipeline is not None: self._pipeline = pipeline else: self._pipeline = self.project.pipeline self.outfile = None self.notification = None # Variables to keep track of progress indication timers: self._filesizeEstimateTimer = self._timeEstimateTimer = None self._is_rendering = False self._rendering_is_paused = False self.current_position = None self._time_started = 0 self._time_spent_paused = 0 # Avoids the ETA being wrong on resume # Various gstreamer signal connection ID's # {object: sigId} self._gstSigId = {} self._createUi() # FIXME: re-enable this widget when bug #637078 is implemented self.selected_only_button.destroy() # Directory and Filename self.filebutton.set_current_folder(self.app.settings.lastExportFolder) if not self.project.name: self.updateFilename(_("Untitled")) else: self.updateFilename(self.project.name) # We store these so that when the user tries various container formats, # (AKA muxers) we select these a/v encoders, if they are compatible with # the current container format. self.preferred_vencoder = self.project.vencoder self.preferred_aencoder = self.project.aencoder self._initializeComboboxModels() self._displaySettings() self._displayRenderSettings() self.window.connect("delete-event", self._deleteEventCb) self.project.connect("rendering-settings-changed", self._settingsChanged) # Monitor changes self.wg = RippleUpdateGroup() self.wg.addVertex(self.frame_rate_combo, signal="changed") self.wg.addVertex(self.save_render_preset_button, update_func=self._updateRenderSaveButton) self.wg.addVertex(self.channels_combo, signal="changed") self.wg.addVertex(self.sample_rate_combo, signal="changed") self.wg.addVertex(self.muxercombobox, signal="changed") self.wg.addVertex(self.audio_encoder_combo, signal="changed") self.wg.addVertex(self.video_encoder_combo, signal="changed") self.render_presets = RenderPresetManager() self.render_presets.loadAll() self._fillPresetsTreeview(self.render_preset_treeview, self.render_presets, self._updateRenderPresetButtons) self.wg.addEdge(self.frame_rate_combo, self.save_render_preset_button) self.wg.addEdge(self.audio_encoder_combo, self.save_render_preset_button) self.wg.addEdge(self.video_encoder_combo, self.save_render_preset_button) self.wg.addEdge(self.muxercombobox, self.save_render_preset_button) self.wg.addEdge(self.channels_combo, self.save_render_preset_button) self.wg.addEdge(self.sample_rate_combo, self.save_render_preset_button) self._infobarForPresetManager = { self.render_presets: self.render_preset_infobar } # Bind widgets to RenderPresetsManager self.bindCombo(self.render_presets, "channels", self.channels_combo) self.bindCombo(self.render_presets, "sample-rate", self.sample_rate_combo) self.bindCombo(self.render_presets, "acodec", self.audio_encoder_combo) self.bindCombo(self.render_presets, "vcodec", self.video_encoder_combo) self.bindCombo(self.render_presets, "container", self.muxercombobox) self.bindCombo(self.render_presets, "frame-rate", self.frame_rate_combo) self.bindHeight(self.render_presets) self.bindWidth(self.render_presets) self.createNoPreset(self.render_presets)
def __init__(self, app, project, pipeline=None): from pitivi.preset import RenderPresetManager Loggable.__init__(self) self.app = app self.project = project self.system = app.system if pipeline is not None: self._pipeline = pipeline else: self._pipeline = self.project.pipeline self.outfile = None self.notification = None self.timestarted = 0 # Various gstreamer signal connection ID's # {object: sigId} self._gstSigId = {} self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "renderingdialog.ui")) self._setProperties() self.builder.connect_signals(self) # UI widgets icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) # Set the shading style in the toolbar below presets presets_toolbar = self.builder.get_object("render_presets_toolbar") presets_toolbar.get_style_context().add_class("inline-toolbar") # FIXME: re-enable this widget when bug #637078 is implemented self.selected_only_button.destroy() # Directory and Filename self.filebutton.set_current_folder(self.app.settings.lastExportFolder) if not self.project.name: self.updateFilename(_("Untitled")) else: self.updateFilename(self.project.name) # We store these so that when the user tries various container formats, # (AKA muxers) we select these a/v encoders, if they are compatible with # the current container format. self.preferred_vencoder = self.project.vencoder self.preferred_aencoder = self.project.aencoder self._initializeComboboxModels() self._displaySettings() self._displayRenderSettings() self.window.connect("delete-event", self._deleteEventCb) self.project.connect("rendering-settings-changed", self._settingsChanged) # Monitor changes self.wg = RippleUpdateGroup() self.wg.addVertex(self.frame_rate_combo, signal="changed") self.wg.addVertex(self.save_render_preset_button, update_func=self._updateRenderSaveButton) self.wg.addVertex(self.channels_combo, signal="changed") self.wg.addVertex(self.sample_rate_combo, signal="changed") self.wg.addVertex(self.sample_depth_combo, signal="changed") self.wg.addVertex(self.muxercombobox, signal="changed") self.wg.addVertex(self.audio_encoder_combo, signal="changed") self.wg.addVertex(self.video_encoder_combo, signal="changed") self.render_presets = RenderPresetManager() self.render_presets.loadAll() self._fillPresetsTreeview( self.render_preset_treeview, self.render_presets, self._updateRenderPresetButtons) self.wg.addEdge(self.frame_rate_combo, self.save_render_preset_button) self.wg.addEdge(self.audio_encoder_combo, self.save_render_preset_button) self.wg.addEdge(self.video_encoder_combo, self.save_render_preset_button) self.wg.addEdge(self.muxercombobox, self.save_render_preset_button) self.wg.addEdge(self.channels_combo, self.save_render_preset_button) self.wg.addEdge(self.sample_rate_combo, self.save_render_preset_button) self.wg.addEdge(self.sample_depth_combo, self.save_render_preset_button) self._infobarForPresetManager = {self.render_presets: self.render_preset_infobar} # Bind widgets to RenderPresetsManager self.bindCombo(self.render_presets, "channels", self.channels_combo) self.bindCombo(self.render_presets, "sample-rate", self.sample_rate_combo) self.bindCombo(self.render_presets, "depth", self.sample_depth_combo) self.bindCombo(self.render_presets, "acodec", self.audio_encoder_combo) self.bindCombo(self.render_presets, "vcodec", self.video_encoder_combo) self.bindCombo(self.render_presets, "container", self.muxercombobox) self.bindCombo(self.render_presets, "frame-rate", self.frame_rate_combo) self.bindHeight(self.render_presets) self.bindWidth(self.render_presets) self.createNoPreset(self.render_presets)
def __init__(self, app, project): Loggable.__init__(self) self.app = app self.project = project self.system = app.system self._pipeline = self.project.pipeline self.outfile = None self.notification = None # Variables to keep track of progress indication timers: self._filesizeEstimateTimer = self._timeEstimateTimer = None self._is_rendering = False self._rendering_is_paused = False self.current_position = None self._time_started = 0 self._time_spent_paused = 0 # Avoids the ETA being wrong on resume # Various gstreamer signal connection ID's # {object: sigId} self._gstSigId = {} self.render_presets = RenderPresetManager(self.app.system, Encoders()) self.render_presets.loadAll() # Whether encoders changing are a result of changing the muxer. self.muxer_combo_changing = False self._createUi() # Directory and Filename self.filebutton.set_current_folder(self.app.settings.lastExportFolder) if not self.project.name: self.updateFilename(_("Untitled")) else: self.updateFilename(self.project.name) # We store these so that when the user tries various container formats, # (AKA muxers) we select these a/v encoders, if they are compatible with # the current container format. self.preferred_vencoder = self.project.vencoder self.preferred_aencoder = self.project.aencoder self.__unproxiedClips = {} self.frame_rate_combo.set_model(frame_rates) self.channels_combo.set_model(audio_channels) self.sample_rate_combo.set_model(audio_rates) self.__initialize_muxers_model() self._displaySettings() self._displayRenderSettings() self.window.connect("delete-event", self._deleteEventCb) self.project.connect("rendering-settings-changed", self._settingsChanged) # Monitor changes self.wg = RippleUpdateGroup() self.wg.addVertex(self.frame_rate_combo, signal="changed") self.wg.addVertex(self.channels_combo, signal="changed") self.wg.addVertex(self.sample_rate_combo, signal="changed") self.wg.addVertex(self.muxer_combo, signal="changed") self.wg.addVertex(self.audio_encoder_combo, signal="changed") self.wg.addVertex(self.video_encoder_combo, signal="changed") self.wg.addVertex(self.preset_menubutton, update_func=self._updatePresetMenuButton) self.wg.addEdge(self.frame_rate_combo, self.preset_menubutton) self.wg.addEdge(self.audio_encoder_combo, self.preset_menubutton) self.wg.addEdge(self.video_encoder_combo, self.preset_menubutton) self.wg.addEdge(self.muxer_combo, self.preset_menubutton) self.wg.addEdge(self.channels_combo, self.preset_menubutton) self.wg.addEdge(self.sample_rate_combo, self.preset_menubutton) # Bind widgets to RenderPresetsManager self.render_presets.bindWidget( "container", lambda x: self.muxer_setter(self.muxer_combo, x), lambda: get_combo_value(self.muxer_combo).get_name()) self.render_presets.bindWidget( "acodec", lambda x: self.acodec_setter(self.audio_encoder_combo, x), lambda: get_combo_value(self.audio_encoder_combo).get_name()) self.render_presets.bindWidget( "vcodec", lambda x: self.vcodec_setter(self.video_encoder_combo, x), lambda: get_combo_value(self.video_encoder_combo).get_name()) self.render_presets.bindWidget( "sample-rate", lambda x: self.sample_rate_setter(self.sample_rate_combo, x), lambda: get_combo_value(self.sample_rate_combo)) self.render_presets.bindWidget( "channels", lambda x: self.channels_setter(self.channels_combo, x), lambda: get_combo_value(self.channels_combo)) self.render_presets.bindWidget( "frame-rate", lambda x: self.framerate_setter(self.frame_rate_combo, x), lambda: get_combo_value(self.frame_rate_combo)) self.render_presets.bindWidget( "height", lambda x: setattr(self.project, "videoheight", x), lambda: 0) self.render_presets.bindWidget( "width", lambda x: setattr(self.project, "videowidth", x), lambda: 0)