Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflavio <fdanesse@gmail.com>2012-12-12 18:44:49 (GMT)
committer flavio <fdanesse@gmail.com>2012-12-12 18:44:49 (GMT)
commitd0c38d51b8a24ebf921921e7f0c6b80028017e6b (patch)
treea5a3d09e6f9c0259d366732a03eff414794708af
parent084c00e7b717b184733a570bb94ea27ef577efb8 (diff)
Widgets must be made before play on gstreamer
-rw-r--r--glive.py19
-rw-r--r--mediaview.py14
-rw-r--r--model.py6
-rw-r--r--record.py40
4 files changed, 42 insertions, 37 deletions
diff --git a/glive.py b/glive.py
index a9b861d..4b65ab5 100644
--- a/glive.py
+++ b/glive.py
@@ -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):
diff --git a/model.py b/model.py
index 8ef5beb..be1c2c2 100644
--- a/model.py
+++ b/model.py
@@ -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())
diff --git a/record.py b/record.py
index c7d22c5..978873a 100644
--- a/record.py
+++ b/record.py
@@ -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):