en
Jan 2012
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Gajim in your GNOME3 Shell

The IM integration in the GNOME3 is interesting, but only for the people using Empathy :) Because my personal preference goes to another client called Gajim I wanted it to fit more in the Shell. To reach this goal I worked on 2 small projects partly during my Igalia hackfest hours and partly during my free time.

The first bit is a Gajim plugin integrating with the GNOME Session-Manager and synchronizing your status in GNOME with your Gajim status.

The second part is a Shell extension hooking to Gajim via D-Bus to monitor chat notifications and allow chatting in the Shell without directly using the Gajim window. This behaves exactly as the Empathy integration.

There's still some work to do, like inhibiting notifications coming from Gajim because currently when a incoming chat appears the user gets a notification from the builtin Shell IM and a notification from Gajim itself. A workaround is to disable some notifications in the Gajim preferences.

As I needed some new D-Bus API in Gajim the Shell extension requires Gajim-nightly >= 20110326.

Congrats to the GNOME Team for this awesome GNOME3 release and happy chating :)

3645 hits / 5 comments Fri Apr 8 09:57:51 2011 -- By: Philippe Normand

WebKitGTK+ Hackfest!

This was a nice week in A Coruña, Spain. The WebKitGTK+ Hackfest went well I think :) The Igalia office is great for such an event, the organization/infrastructure was well done, the hotel near the office was awesome, what else? We managed to get things done code-wise! Even though the list is big some items were proudly erased from the TODO like:

  • Dan started a rewrite of some parts of libsoup with gio and worked on the soup URI loader
  • Xan and Gustavo worked on form authentication saving in WebKitGTK+/Epiphany
  • Xan did some good progress on DOM bindings
  • User-Agent support in Epiphany
  • Page cache control support in WebKitGTK+ was merged by Alex
  • Alex did some work on a11y support for WebKitGTK+
  • Bedhad and Evan worked on Harfbuzz integration (instead of Pango)
  • Reinout built a list of Epiphany regressions to fix
  • Evan and Benjamin worked on improving the build process (size and time)
  • Martin and Cody worked on ARGB windows support for WebKitGTK+
  • Benjamin went on war against crashers
  • and I worked on merging HTML5 video controls and the media tests
  • probably a lot more I didn't catch during all the discussions ;)

Still some work to do though, like for HTML5 audio/video support:

  • on-disk buffering
  • fullscreen view
  • closed captions (this seems very specific to SMIL)
  • pitch control (when scrubbing)
  • enhanced controls UI
  • and still some media tests to fix :)

So thank you to Igalia, Collabora and the GNOME foundation for sponsoring this event!

6503 hits / 0 comments Fri Aug 20 12:58:24 2010 -- By: Philippe Normand

WebKitGTK+ and HTML5 fullscreen video

HTML5 video is really nice and all but one annoying thing is the lack of fullscreen video specification, it is currently up to the User-Agent to allow fullscreen video display.

WebKit allows a fullscreen button in the media controls and Safari can, on user-demand only, switch a video to fullscreen and display nice controls over the video. There's also a webkit-specific DOM API that allow custom media controls to also make use of that feature, as long as it is initiated by a user gesture. Vimeo's HTML5 player uses that feature for instance.

Thanks to the efforts made by Igalia to improve the WebKit GTK+ port and its GStreamer media-player, I have been able to implement support for this fullscreen video display feature. So any application using WebKitGTK+ can now make use of it :)

The way it is done with this first implementation is that a new fullscreen gtk+ window is created and our GStreamer media-player inserts an autovideosink in the pipeline and overlays the video in the window. Some simple controls are supported, the UI is actually similar to Totem's. One improvement we could do in the future would be to allow application to override or customize that simple controls UI.

The nice thing about this is that we of course use the GstXOverlay interface and that it's implemented by the linux, windows and mac os video sinks :) So when other WebKit ports start to use our GStreamer player implementation it will be fairly easy to port the feature and allow more platforms to support fullscreen video display :)

Benjamin also suggested that we could reuse the cairo surface of our WebKit videosink and paint it in a fullscreen GdkWindow. But this should be done only when his Cairo/Pixman patches to enable hardware acceleration land.

So there is room for improvement but I believe this is a first nice step for fullscreen HTML5 video consumption from Epiphany and other WebKitGTK+-based browsers :) Thanks a lot to Gustavo, Sebastian Dröge and Martin for the code-reviews.

4900 hits / 5 comments Fri Aug 20 12:47:26 2010 -- By: Philippe Normand

Bay Area, California!

Writting this post from San Francisco where I am spending some volcanic, work and little sightseeing time :)

Work/Hacking

I initially came here for the first WebKit Contributor Meeting with my Igalia coworkers Alex, Juanjo and Xan. We used the time here to also meet a customer we have in Bay Area and some of us attended ELC and Linux Collab Summit too. I was meant to attend the last day of ELC but we were a bit late asking for it so it was dropped from the long queue of people wanting to attend as well :/

People attending ELC and/or Linux Collab got a free Google Nexus. I was kinda sad to not get one because of that registration issue and Juanjo kindly gave me the one he got. So I will try it for a while, write a little N900 vs NexusOne blog post and probably give the phone back to some Igalian ;). Thanks Juanjo!

The WebKit meeting was interesting. Although I didn't make much talking I attended the session about moving to git, the one about how to deal with experimental features, the WebKit2 one and finally the one about the Media Elements. The last one was interesting for me especially because I work on the MediaPlayer stuff in WebKitGTK+ ;)

This last session motivated me again to work on video fullscreen for WebKitGTK+. I have now a working patch and hope to share some FullscreenController code with the windows port (and mac maybe). The way I did it is the following:

  • create a bin which will serve as video-sink for playbin2
  • link a ghost pad of the bin to a tee
  • in one branch of tee I added a queue and our internal webkit videosink
  • when the user requests fullscreen I create a new branch with a ffmpegcolorspace, queue and autovideosink
  • overlay is handed of to a window created by the fullscreen controller
  • when user exits from fullscreen I remove the branch from the tee.

I can now enter fullscreen by clicking on the fullscreen button of the media controls and leave fullscreen by pressing escape of f. So the next step is to draw some media controls over the video and handle the actions. Not sure what to do with the browser window when fullscreen is activated... hide? pause? Suggestions welcome :) Safari for instance animates the video box so it nicely takes all the screen estate, not sure I can do that with GTK...

Lately I've also been working on astracting some things away from the MediaPlayer backend so it can eventually be reused by other ports. I even started experimenting on mac! More to come on this. So what I needed to fix/abstract:

  • I moved the cairo calls from the paint method to new ImageGstreamer abstractions
  • The libsoup calls in the webkitsrc element have been ifdef'd. The message pausing/resuming needs to be abstracted away.
  • If the underlying application doesn't run on a gmainloop the gstreamer messages need to be processed with a synchronous handler.
  • ports implementing fullscreen need adaptations as well (use overlay when possible, see above).

I'm not yet really proud of all these patches so this seems to appear as teasing-only, sorry for that ;) I will blog about this again when the patches land in trunk.

Tourism

I was supposed to leave SF on the 15th of april but a volcano with a name a french guy like me can't pronounce decided otherwise! Alex, Juanjo and Xan managed to fly back because Madrid airport wasn't closed. So Frank and I went on a little road trip towards Muir Woods and Reyes point. This is an amazing landscape, we even saw a reserve of elephant seals :) In SF we also went to the Golden Gate park and the Japanese park inside, very nice. All the week was the occasion of eating japanese food, burritos, cable-car(ing) and walking endless miles on the hills of SF. Last saturday was Mike's birthday party and I was supposed to leave on sunday. The flight was cancelled for the second time. Mike kindly accepted to let me sleep in the guest room and I worked from a cafe in Oak street.

This time in SF was also a good occation to see other people stranded like Christian, Robert, Philippe (all 3 from Collabora), Marc (fellow fluendo coworker) and some locals like Brandon Lewis, David Shleef.

My next attempt (hopefully the last!) to reach Spain is scheduled for this friday, the Ashing seems somehow to let planes fly (or is it the airlines lobbying over politics?) so I have good hopes this time.

Dude this is the longest post I ever wrote. Thanks for reading (or skipping :)

3771 hits / 4 comments Thu Apr 22 06:13:18 2010 -- By: Philippe Normand

Mirabeau on Maemo

At FOSDEM Frank and I showed the work we did on Mirabeau, a screencast was made few days before FOSDEM and we showed it but I wanted to add some comments and re-arrange some parts of it, so here it is now, re-arranged with PiTiVi :)

(Video here in ogg/theora/vorbis if your browser fails to play it).

This is still work in progress, we have some issues with Telepathy MUC Tubes, I promised Sjoerd from Telepathy fame to create some new bugs in bugzilla. Also the UI itself still needs work, especially the MediaRenderer UI. I will also at some point add a chatroom window.

Oh and we also won a N900 at the XMPP developer contest thanks to this application! Thanks a lot to the XSF and Nokia :)

4087 hits / 3 comments Thu Feb 11 16:20:39 2010 -- By: Philippe Normand

Guess what

http://base-art.net/static/fosdem-2010.png

Arriving friday morning and leaving monday evening! I will do a quick presentation about WebKitGTK+ and a talk with my friend Frank about Mirabeau and personal media networks in the XMPP room.

We will be a whole Igalia gang hanging out there at Fosdem, looking forward socializing around beers :) Oh and don't miss Joaquim and Victor's talks!

4532 hits / 1 comments Fri Jan 29 12:59:03 2010 -- By: Philippe Normand

GStreamer and on-disk videos buffering

A really nice feature every video player using GStreamer and playbin2 should have is media on-disk buffering. Even though it is supported only for Quicktime and Flash videos currently it remains one good improvement of the user experience if you are an avid consumer of Apple trailers and flv :)

Under the hood the magic is in queue2 and uridecodebin but you mostly interface with playbin2. Here is the action plan:

  1. Add the "download" flag to the playbin2 flags property
  2. Upon reception of GST_MESSAGE_BUFFERING messages on the bus, add an idle source to the main loop (for instance)
  3. In that source create a gst_query_new_buffering() query with GST_PERCENT_FORMAT format perform the query to playbin2
  4. Use gst_query_parse_buffering_range() to get the stop value and compute the fill_status value
  5. Notify your UI of the fill level

Additionally you can allow the user to save the buffered media for later off-line consumption :) The media is buffered by queue2 in the tmp folder, the exact file location, temp-location queue2 property, can be retrieved by connecting to the "deep-notify::temp-location" signal of playbin2. You also need to make sure that the temporary file is removed when the user exits from your application, GStreamer doesn't automatically take care of that, as far as I could see.

This is what Totem does, as far as I could understand its code. This is also how I implemented (yet to merge) it in WebKitGTK+:

/static/iron2_buffering-thumb.png

And to provide a simple example I added this feature to the gst-python play.py example, available in a gist after the break!

5568 hits / 4 comments Fri Jan 22 09:51:42 2010 -- By: Philippe Normand

Goodbye Fluendo, hello Igalia!

After more than 3 years at Fluendo it was time for me to change and work on new projects/technologies. Elisa, now known as Moovida, has gone a long way since 2006 and I'm sure the project will continue to evolve nicely :)

At the beginning of the week I started working for Igalia, in the Desktop/Mobile team. I will be working from home but this week I am in La Coruña to know my new co-workers, the great office there and the city :) I am very lucky it seems: even the weather is great so far! This Friday we celebrate the 8 years of Igalia in a nice place, as I heard, good opportunity to meet most of the Igalians, I think most of us will be here excepted Claudio and Xan, at least. I started working on WebKitGtk+ and GStreamer with Xan and the other hackers of the WebKit fame that I don't know yet ;) This is cool, but quite a big change for me after nearly 5 years of Python! But I will keep on hacking in Python, at least on Coherence :)

4851 hits / 4 comments Wed Sep 23 20:29:12 2009 -- By: Philippe Normand

Python and gobject-introspection

I've recently been playing with pygobject and gobject-introspection. There's currently a GSoC project for this, Simon Van Der Linden is working on this, and I must say, progressing fast!

Simon does the work on a pygobject branch and also wrote some patches for glib.

Here's a little g-i Clutter code sample, just to show how easy it is to use the runtime bindings:

import sys
import pygtk
pygtk.require('2.0')

from gi.repository import  Clutter

Clutter.init(sys.argv)

stage = Clutter.Stage()
stage.set_size(200, 200)
stage.set_color(Clutter.Color(0, 0, 0, 255))
stage.show()

Clutter.main()

Pretty self-explanatory, create an empty stage and show it. That's quite cool, this new pygobject version will potentially allow Python developers to directly use libraries like Gtk, GStreamer, Clutter and the like without the need of specific bindings.

I have some more examples in a gist. The animation example doesn't work yet because gi doesn't know how to marshal python callable arguments, but... it's getting there! Many kudos to Simon, keep up the good work!

7267 hits / 5 comments Sat Aug 15 11:56:34 2009 -- By: Philippe Normand

Coherence team at GCDS

I gave a talk about Coherence and Telepathy at Gran Canaria Desktop Summit with Frank on tuesday. It went well, there were about 50 people. I think most of the people got the concept we tried to explain: UPnP devices and services are not bound to local network anymore, thanks to the combination of Coherence and XMPP through Telepathy. The slides should be online soon, will post an update to this post when I know the url ;)

Part of the Coherence gang including Benjamin, Frank and me is here at Las Palmas, feel free to grab us if you have any question. It was also nice to meet Karl Vollmer, the Ampache lead developer :)

So we are quite excited about Mirabeau, work on it will continue during the summer and a first release should happen in september. I'm writing a little howto explaining how to easily try the current (work-in-progress) version of Mirabeau, it will land in the wiki in the coming days ;)

update: Slides are there

5331 hits / 0 comments Thu Jul 9 12:58:30 2009 -- By: Philippe Normand