diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2010-04-03 20:52:37 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@member.fsf.org> | 2010-04-03 20:52:37 (GMT) |
commit | dc080fefa45047af7401cf2a2a9c7c24dea3e57d (patch) | |
tree | 773ba4dfc7e3d4a31c3eb179e2a9f8f3cbf04422 | |
parent | e93a2bc44827060e1b9608770c8b42a0b2d7bfe3 (diff) |
Synchronize shutter
-rw-r--r-- | aplay.py | 28 | ||||
-rw-r--r-- | ui.py | 10 |
2 files changed, 22 insertions, 16 deletions
@@ -17,23 +17,31 @@ import gst import logging logger = logging.getLogger('record:aplay.py') -def play(file): +def play(file, done_cb=None): player.set_state(gst.STATE_NULL) - player.props.uri = 'file://' + file - player.set_state(gst.STATE_PLAYING) -def _gstmessage_cb(bus, message): - if message.type == gst.MESSAGE_EOS: + def eos_cb(bus, message): + bus.disconnect_by_func(eos_cb) player.set_state(gst.STATE_NULL) - elif message.type == gst.MESSAGE_ERROR: + if done_cb is not None: + done_cb() + + def error_cb(bus, message): err, debug = message.parse_error() logger.error('play_pipe: %s %s' % (err, debug)) player.set_state(gst.STATE_NULL) + if done_cb is not None: + done_cb() + + bus = player.get_bus() + bus.connect('message::eos', eos_cb) + bus.connect('message::error', error_cb) + + player.props.uri = 'file://' + file + player.set_state(gst.STATE_PLAYING) + player = gst.element_factory_make('playbin') fakesink = gst.element_factory_make('fakesink') player.set_property("video-sink", fakesink) - -bus = player.get_bus() -bus.add_signal_watch() -bus.connect('message', _gstmessage_cb) +player.get_bus().add_signal_watch() @@ -1345,13 +1345,11 @@ class UI: def clickShutter( self ): - if (not self.ca.m.RECORDING): - aplay.play(Constants.soundClick) - - wasRec = self.ca.m.RECORDING - self.ca.m.doShutter() - if (wasRec): + if self.ca.m.RECORDING: + self.ca.m.doShutter() aplay.play(Constants.soundClick) + else: + aplay.play(Constants.soundClick, self.ca.m.doShutter) def updateVideoComponents( self ): |