示例#1
0
    def run_counter(self):
        if self.recording:
            logger.debug("Already recording, not starting again.")
            return
        #
        # Annoyances with the menus
        #
        logger.debug("Running Counter.")
        (main_x, main_y) = self.window.get_position()
        if main_x and main_y:
            prefs.main_x = main_x
            prefs.main_y = main_y

        self.indicator.recording = True
        self.indicator.menuitem_start.set_sensitive(False)
        self.indicator.menuitem_pause.set_sensitive(False)
        self.indicator.menuitem_finish.set_sensitive(True)
        self.indicator.menuitem_quit.set_sensitive(False)
        self.indicator.menuitem_finish.set_label(_("Cancel countdown"))
        self.in_countdown = True

        self.indicator.blink_set_state(BLINK_START)

        if prefs.sound:
            if (self.main_mode == MODE_SCREENCAST and prefs.capture_speakers) or \
               (self.main_mode == MODE_BROADCAST and prefs.capture_speakers_broadcast) or \
               (self.main_mode == MODE_WEBCAM and prefs.capture_speakers_webcam):
                try:
                    audio_source = prefs.speaker_sources[prefs.audio_source][1]
                    try:
                        audio_channels = prefs.pa_q.get_source_info_by_index(
                            prefs.speaker_sources[
                                prefs.audio_source][0])[2].channels
                    except:
                        audio_channels = 1
                    logger.debug(
                        "Detected audio channels: {}".format(audio_channels))
                except IndexError:
                    logger.warning(
                        "It appears that speakers audio source isn't set up correctly."
                    )
                    audio_source = None
            else:
                audio_source = None
                audio_channels = 1

            if (self.main_mode == MODE_SCREENCAST and prefs.capture_microphone) or \
               (self.main_mode == MODE_BROADCAST and prefs.capture_microphone_broadcast) or \
               (self.main_mode == MODE_WEBCAM and prefs.capture_microphone_webcam):
                try:
                    audio2_source = prefs.mic_sources[prefs.audio2_source][1]
                    try:
                        audio2_channels = prefs.pa_q.get_source_info_by_index(
                            prefs.speaker_sources[
                                prefs.audio2_source][0])[2].channels
                    except:
                        audio2_channels = 1
                    logger.debug(
                        "Detected audio2 channels: {}".format(audio2_channels))
                except IndexError:
                    logger.warning(
                        "It appears that microphone audio source isn't set up correctly."
                    )
                    audio2_source = None
            else:
                audio2_source = None
                audio2_channels = 1
        else:
            audio_source = None
            audio_channels = 1
            audio2_source = None
            audio2_channels = 1

        #
        # Get appropriate coordinates for recording
        #

        video_source = None

        screen = HW.get_current_screen(self.window)
        prefs.current_screen = screen

        if self.main_mode == MODE_WEBCAM:
            video_source = CAM_RESOLUTIONS[prefs.webcam_source]
        elif self.record_mode == MODE_ALL:
            video_source = HW.combined_screen
        else:
            video_source = HW.screens[screen]

        if self.main_mode in [MODE_SCREENCAST, MODE_WEBCAM, MODE_BROADCAST]:
            self.recorder = Screencast(self.main_mode)
            self.recorder.setup_sources(
                video_source, audio_source, audio2_source,
                prefs.area if self.record_mode == MODE_AREA
                and self.main_mode not in [MODE_WEBCAM, MODE_BROADCAST] else
                None, prefs.xid if self.record_mode == MODE_WIN
                and self.main_mode not in [MODE_WEBCAM, MODE_BROADCAST] else
                None, audio_channels, audio2_channels)

            self.recorder.connect("flush-done", self.cb_flush_done)

        elif self.main_mode == MODE_SCREENSHOT:
            self.grabber = Grabber()
            self.grabber.setup_sources(
                video_source,
                prefs.area if self.record_mode == MODE_AREA else None,
                prefs.xid if self.record_mode == MODE_WIN else None)
            self.grabber.connect("flush-done", self.cb_flush_done)

        self.countdown = CountdownWindow(self.indicator,
                                         show_window=prefs.countdown_splash)
        self.countdown.connect("counter-finished", self.cb_counter_finished)
        logger.debug("Starting counter.")
        self.countdown.run(prefs.countdown_timer)
        self.recording = True
        logger.debug("Hiding main window.")
        self.window.hide()
        if self.main_mode == MODE_SCREENCAST or self.main_mode == MODE_SCREENSHOT:
            try:
                if self.record_mode == MODE_AREA and prefs.area:
                    logger.debug("Showing recording outline.")
                    self.outline_window = OutlineWindow(
                        prefs.area[0], prefs.area[1], prefs.area[4],
                        prefs.area[5])
                    self.outline_window.show()
                else:
                    logger.debug(
                        "Ubuntu 13.04 or higher not detected, recording outline not shown."
                    )
            except:
                logger.debug("Unable to show recording outline.")
示例#2
0
文件: app.py 项目: mikhailnov/kazam
    def run_counter(self):
        #
        # Annoyances with the menus
        #
        (main_x, main_y) = self.window.get_position()
        if main_x and main_y:
            prefs.main_x = main_x
            prefs.main_y = main_y

        self.indicator.recording = True
        self.indicator.menuitem_start.set_sensitive(False)
        self.indicator.menuitem_pause.set_sensitive(False)
        self.indicator.menuitem_finish.set_sensitive(True)
        self.indicator.menuitem_quit.set_sensitive(False)
        self.indicator.menuitem_finish.set_label(_("Cancel countdown"))
        self.in_countdown = True

        self.indicator.blink_set_state(BLINK_START)

        if self.main_mode == MODE_SCREENCAST and prefs.sound:
            if prefs.capture_speakers:
                try:
                    audio_source = prefs.speaker_sources[prefs.audio_source][1]
                except  IndexError:
                    logger.warning("It appears that speakers audio source isn't set up correctly.")
                    audio_source = None
            else:
                audio_source = None

            if prefs.capture_microphone:
                try:
                    audio2_source = prefs.mic_sources[prefs.audio2_source][1]
                except IndexError:
                    logger.warning("It appears that microphone audio source isn't set up correctly.")
                    audio2_source = None
            else:
                audio2_source = None

        else:
            audio_source = None
            audio2_source = None

        #
        # Get appropriate coordinates for recording
        #

        video_source = None

        if self.record_mode == MODE_ALL:
            video_source = HW.combined_screen
        else:
            screen = HW.get_current_screen(self.window)
            video_source = HW.screens[screen]

        if self.main_mode == MODE_SCREENCAST:
            self.recorder = Screencast()
            self.recorder.setup_sources(video_source,
                                        audio_source,
                                        audio2_source,
                                        prefs.area if self.record_mode == MODE_AREA else None,
                                        prefs.xid if self.record_mode == MODE_WIN else None)

            self.recorder.connect("flush-done", self.cb_flush_done)

        elif self.main_mode == MODE_SCREENSHOT:
            self.grabber = Grabber()
            self.grabber.setup_sources(video_source,
                                       prefs.area if self.record_mode == MODE_AREA else None,
                                       prefs.xid if self.record_mode == MODE_WIN else None)
            self.grabber.connect("flush-done", self.cb_flush_done)

        self.countdown = CountdownWindow(self.indicator, show_window = prefs.countdown_splash)
        self.countdown.connect("counter-finished", self.cb_counter_finished)
        self.countdown.run(prefs.countdown_timer)
        self.recording = True
        logger.debug("Hiding main window.")
        self.window.hide()
        try:
            if self.record_mode == MODE_AREA and prefs.area:
                if prefs.dist[0] == 'Ubuntu' and int(prefs.dist[1].split(".")[0]) > 12:
                    logger.debug("Showing recording outline.")
                    self.outline_window = OutlineWindow(prefs.area[0],
                                                        prefs.area[1],
                                                        prefs.area[4],
                                                        prefs.area[5])
                    self.outline_window.show()
                else:
                    logger.debug("Ubuntu 13.04 or higher not detected, recording outline not shown.")
        except:
                logger.debug("Unable to show recording outline.")