diff options
author | Aneesh Dogra <lionaneesh@gmail.com> | 2012-12-23 15:51:27 (GMT) |
---|---|---|
committer | Aneesh Dogra <lionaneesh@gmail.com> | 2012-12-23 15:58:15 (GMT) |
commit | 0c1e81a6692aaec75ac4778fb6cc05b831ed9c02 (patch) | |
tree | 9281e947a7be6115d01cb5cfdf1b2e2bbbda2491 | |
parent | a9d4ebfa1135165c39d0658d5ba087df95271ba7 (diff) |
Add functionality to send webcam images and recieve them and some minor fixes.
-rw-r--r-- | GNUChessActivity.py | 21 | ||||
-rw-r--r-- | WebcamImages.py | 19 |
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() |