diff options
author | flavio <fdanesse@gmail.com> | 2012-12-12 18:44:49 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2012-12-12 18:44:49 (GMT) |
commit | d0c38d51b8a24ebf921921e7f0c6b80028017e6b (patch) | |
tree | a5a3d09e6f9c0259d366732a03eff414794708af | |
parent | 084c00e7b717b184733a570bb94ea27ef577efb8 (diff) |
Widgets must be made before play on gstreamer
-rw-r--r-- | glive.py | 19 | ||||
-rw-r--r-- | mediaview.py | 14 | ||||
-rw-r--r-- | model.py | 6 | ||||
-rw-r--r-- | record.py | 40 |
4 files changed, 42 insertions, 37 deletions
@@ -366,7 +366,7 @@ class Glive: queue.link(self._xbin) return self._xbin.get_by_name("xsink") - + def play(self, use_xv=True): if self._get_state() == Gst.State.PLAYING: @@ -487,13 +487,14 @@ class Glive: self._pipeline.remove(self._photobin) self._pic_exposure_open = False - pic = GdkPibuf.PixbufLoader.new_with_mime_type("image/jpeg") - pic.write( buffer ) - pic.close() - pixBuf = pic.get_pixbuf() - del pic + #pic = GdkPixbuf.PixbufLoader.new_with_mime_type("image/jpeg") + # FIXME: TypeError: Must be sequence, not Buffer + #pic.write( buffer ) + #pic.close() + #pixBuf = pic.get_pixbuf() + #del pic - self.save_photo(pixBuf) + #self.save_photo(pixBuf) def save_photo(self, pixbuf): @@ -549,8 +550,8 @@ class Glive: # FIXME: retest on F11 # FIXME: could this be the result of audio shortening problems? self._eos_cb = self._video_eos - self._pipeline.get_by_name('camsrc').send_event(gst.event_new_eos()) - self._audiobin.get_by_name('absrc').send_event(gst.event_new_eos()) + self._pipeline.get_by_name('camsrc').send_event(Gst.Event.new_eos()) + self._audiobin.get_by_name('absrc').send_event(Gst.Event.new_eos()) def _video_eos(self): diff --git a/mediaview.py b/mediaview.py index 7561835..4832a4a 100644 --- a/mediaview.py +++ b/mediaview.py @@ -165,7 +165,7 @@ class VideoBox(Gtk.EventBox): self._xid = self.get_property('window').get_xid() - def do_expose_event(self): + def do_draw(self, context): if self._sink: self._sink.expose() @@ -173,18 +173,12 @@ class VideoBox(Gtk.EventBox): else: return True - + # can be called from gstreamer thread, must not do any GTK+ stuff def set_sink(self, sink): self._sink = sink - # FIXME: AttributeError: '__main__.GstXvImageSink' object has no attribute 'set_xwindow_id' - #sink.set_xwindow_id(self._xid) - if self._xid: - Gdk.threads_enter() - Gdk.display_get_default().sync() - self._sink.set_xwindow_id(self._xid) - Gdk.threads_leave() + self._sink.set_window_handle(self._xid) class FullscreenButton(Gtk.EventBox): @@ -308,7 +302,7 @@ class MediaView(Gtk.EventBox): widget.show() widget.realize() - widget.get_property('window').raise_() # widget.window.raise_() + widget.get_property('window').raise_() def __init__(self): @@ -159,7 +159,7 @@ class Model: else: self.set_state(constants.STATE_INVISIBLE) - + def set_state(self, state): # Never go into READY mode if we aren't visible. @@ -288,7 +288,7 @@ class Model: # otherwise, capture normally self.shutter_sound(self._start_media_capture) - + # called from gstreamer thread def still_ready(self, pixbuf): GObject.idle_add(self.activity.show_still, pixbuf) @@ -472,7 +472,7 @@ class Model: else: #remove from the datastore here, since once gone, it is gone... serialize.removeMediaFromDatastore(recd) - + def request_download(self, recd): self.activity.show_still(recd.getThumbPixbuf()) @@ -83,7 +83,6 @@ class Record(activity.Activity): Instance(self) self.add_events(Gdk.EventMask.VISIBILITY_NOTIFY_MASK) - self.connect("visibility-notify-event", self._visibility_changed) #the main classes self.model = Model(self) @@ -99,9 +98,16 @@ class Record(activity.Activity): else: self.connect("joined", self._joined_cb) - # Realize the video view widget so that it knows its own window XID - self._media_view.realize_video() + self.show_all() + self.realize() + GObject.idle_add(self.setup_init) + + def setup_init(self): + + self.connect("visibility-notify-event", self._visibility_changed) + self.model.set_visible(True) + # Changing to the first toolbar kicks off the rest of the setup if self.model.get_has_camera(): self.model.change_mode(constants.MODE_PHOTO) @@ -263,7 +269,7 @@ class Record(activity.Activity): self._toolbar_controls.set_timer_idx(data.get('timer', 0)) self._toolbar_controls.set_duration_idx(data.get('duration', 0)) self._toolbar_controls.set_quality(data.get('quality', 0)) - + def _key_pressed(self, widget, event): key = event.keyval @@ -355,7 +361,7 @@ class Record(activity.Activity): def _media_view_info_clicked(self, widget): self._toggle_info() - + def _toggle_info(self): recd = self._active_recd @@ -462,7 +468,7 @@ class Record(activity.Activity): else: self._play_button.set_pause() - + def _thumbnail_clicked(self, button, recd): if self.model.ui_frozen(): @@ -510,7 +516,7 @@ class Record(activity.Activity): def _thumbnail_copy_clipboard(self, recdbutton): self._copy_to_clipboard(recdbutton.get_recd()) - + def _remove_recd(self, recdbutton): recd = recdbutton.get_recd() @@ -551,7 +557,7 @@ class Record(activity.Activity): self._record_container.set_title_visible(True) self._shutter_button.hide() self._progress.hide() - + def _show_audio(self, recd, play): self._progress.hide() @@ -566,7 +572,7 @@ class Record(activity.Activity): if play: self.model.play_audio(recd) - + def _show_video(self, recd, play): self._progress.hide() @@ -599,7 +605,7 @@ class Record(activity.Activity): #maybe it is not downloaded from the mesh yet... #but we can show the low res thumb in the interim return recd.getThumbFilepath() - + def _show_recd(self, recd, play=True): self._showing_info = False @@ -645,7 +651,7 @@ class Record(activity.Activity): self.get_property('window').set_cursor(None) -class RecordContainer(Gtk.Container): +class RecordContainer(Gtk.VBox): """ A custom Container that contains a media view area, and a controls hbox. @@ -660,21 +666,25 @@ class RecordContainer(Gtk.Container): def __init__(self, media_view, controls_hbox): + super(RecordContainer, self).__init__() + self._media_view = media_view self._controls_hbox = controls_hbox self._show_title = False self._controls_hbox_height = 0 - super(RecordContainer, self).__init__() + self.pack_start(self._media_view, True, True, 0) + self.pack_start(self._controls_hbox, True, True, 0) + ''' for widget in (self._media_view, self._controls_hbox): if widget.get_state_flags() & widget.get_realized(): widget.set_parent_window(self.get_property('window')) - widget.set_parent(self) + widget.set_parent(self)''' self.show_all() - + ''' def do_realize(self): self.set_realized(True) @@ -797,7 +807,7 @@ class RecordContainer(Gtk.Container): # FIXME: TypeError: do_forall() takes exactly 4 arguments (3 given) #def do_forall(self, include_internals, callback, data): # for widget in (self._media_view, self._controls_hbox): - # callback(widget, data) + # callback(widget, data)''' def set_title_visible(self, visible): |