Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Dogra <lionaneesh@gmail.com>2012-12-23 15:51:27 (GMT)
committer Aneesh Dogra <lionaneesh@gmail.com>2012-12-23 15:58:15 (GMT)
commit0c1e81a6692aaec75ac4778fb6cc05b831ed9c02 (patch)
tree9281e947a7be6115d01cb5cfdf1b2e2bbbda2491
parenta9d4ebfa1135165c39d0658d5ba087df95271ba7 (diff)
Add functionality to send webcam images and recieve them and some minor fixes.
-rw-r--r--GNUChessActivity.py21
-rw-r--r--WebcamImages.py19
2 files changed, 32 insertions, 8 deletions
diff --git a/GNUChessActivity.py b/GNUChessActivity.py
index fa52496..4de6851 100644
--- a/GNUChessActivity.py
+++ b/GNUChessActivity.py
@@ -415,20 +415,23 @@ class GNUChessActivity(activity.Activity):
def webcam_toggle(self, widget):
if widget.get_active():
self.webcam_image = Gtk.Image()
- self._gnuchess._width = Gdk.Screen.width() - W_I_WIDTH
- self.w_obj = WebcamImages(self.webcam_image, 2)
+ self.webcam_rec_image = Gtk.Image()
+ self.w_obj = WebcamImages(self.webcam_image, 1, self)
self.image_vbox = Gtk.VBox()
self.chess_canvas.set_size_request(Gdk.Screen.width() - W_I_WIDTH, \
Gdk.Screen.height())
self.image_vbox.pack_start(self.webcam_image, False, True, 0)
+ self.image_vbox.pack_start(self.webcam_rec_image, False, True, 0)
self.image_vbox.show()
self.main_hbox.pack_end(self.image_vbox, False, True, 0)
self.main_hbox.show_all()
else:
if self.w_obj:
self.w_obj.cleanup()
- self.image_vbox.remove(self.webcam_image)
+ self.image_vbox.remove(self.webcam_image)
+ self.image_vbox.remove(self.webcam_rec_image)
self.webcam_image = None
+ self.webcam_rec_image = None
self.main_hbox.remove(self.image_vbox)
self.chess_canvas.set_size_request(Gdk.Screen.width(), \
Gdk.Screen.height())
@@ -891,6 +894,17 @@ class GNUChessActivity(activity.Activity):
self.human_button.set_active(True)
self.restoring = False
+ def send_image(self, pixbuf):
+ GObject.idle_add(self._send_event, 'w:%s' % \
+ (pixbuf_to_base64(pixbuf)))
+
+ def _receive_webcam_image(self, pixbuf_data):
+ pixbuf = base64_to_pixbuf(activity,
+ pixbuf_data,
+ width=W_I_WIDTH,
+ height=W_I_HEIGHT)
+ self.webcam_rec_image.set_from_pixbuf(pixbuf)
+
def _list_tubes_reply_cb(self, tubes):
''' Reply to a list request. '''
for tube_info in tubes:
@@ -933,6 +947,7 @@ params=%r state=%d' % (id, initiator, type, service, params, state))
'C': [self._receive_colors, 'receive colors from opponent'],
'j': [self._receive_join, 'receive new joiner'],
'p': [self._receive_piece, 'receive new piece'],
+ 'w': [self._receive_webcam_image, 'receive webcam image'],
}
def event_received_cb(self, event_message):
diff --git a/WebcamImages.py b/WebcamImages.py
index 3dfb51c..cd4acba 100644
--- a/WebcamImages.py
+++ b/WebcamImages.py
@@ -30,12 +30,11 @@ class WebcamImages():
@param fps
fps: No of frames generated per second.
"""
- def __init__(self, image_widget, fps):
+ def __init__(self, image_widget, fps, context):
self.player = None
+ self.activity = context
self.image_updater_thread = None
- image_list = os.listdir(WEBCAM_IMAGES_DIR)
- for image in image_list:
- os.remove(os.path.join(WEBCAM_IMAGES_DIR, image))
+ self.clean_dir() # make sure we have an empty directory to work with
self.gen_webcam_images(fps)
# Let's give it some time to initialize itself and generate some images
time.sleep(2)
@@ -67,10 +66,14 @@ class WebcamImages():
image_list = [os.path.join(WEBCAM_IMAGES_DIR, image) \
for image in image_list]
image = image_list[-1]
- print image
if os.path.splitext(image)[-1] == '.png':
pixbuf = GdkPixbuf.Pixbuf.new_from_file(image)
+ try:
+ if self.activity.conn:
+ self.activity.send_image(pixbuf)
+ except:
+ pass
pixbuf = pixbuf.scale_simple(W_I_WIDTH, W_I_HEIGHT,
GdkPixbuf.InterpType.BILINEAR)
image_widget.set_from_pixbuf(pixbuf)
@@ -81,8 +84,14 @@ class WebcamImages():
self.update_image,
fps,
image_widget)
+ def clean_dir(self):
+ image_list = os.listdir(WEBCAM_IMAGES_DIR)
+ for image in image_list:
+ os.remove(os.path.join(WEBCAM_IMAGES_DIR, image))
+
def cleanup(self):
if self.image_updater_thread:
GObject.source_remove(self.image_updater_thread)
if self.player:
self.player.set_state(gst.STATE_NULL)
+ self.clean_dir()