Monday, August 22, 2011

Pencils down

Today is the GSoC pencils down date. I've created and pushed two new git branches, gsoc2011-gsttranscodebin and gsoc2011-gupnpdlna-integration. These have been rebased upon the latest master commit.

The work I have done this summer boils down to three things:
  • A new GStreamer plugin called "gsttranscodebin", which takes a single profile argument and transcodes it's sink pad to conform to the profile and outputs it on it's source pad. This is available at https://github.com/kmeisthax/gst-transcode.
  • Patches to Rygel to use gsttranscodebin to encode things. They are available here: https://github.com/kmeisthax/rygel/tree/gsoc2011-gsttranscodebin. It's the "gsoc2011-gsttranscodebin" branch.
  • Patches to Rygel to use GUPnP-DLNA to retrieve encoding profiles, obsoleting the current fixed-transcoder classes. They are available here: https://github.com/kmeisthax/rygel/tree/gsoc2011-gupnpdlna-integration. It's the "gsoc2011-gupnpdlna-integration" branch.
I split the Rygel work into two pieces - one involving GUPnP-DLNA and one involving GstTranscodeBin. Since I inevitably need to get GstTranscodeBin into Gstreamer eventually, I need to get in touch with some of the Gstreamer maintainers, including Edward Hervey (creator of decodebin2/encodebin, recommended to me by Zeeshan) - I want to know what they think of the element and if it can be added to Gstreamer eventually.

Asfor the GUPnP-DLNA work, it's mostly done, but there's kind of an issue - now that we have many more encoding profiles you'll also need many more encoder plugins installed, since we don't yet check if we can actually encode a particular profile. I believe the original fixed-transcoders had the same issue, but I've kind of exacerbated the problem. Additionally, MP3 encoding using the GUPnP-DLNA profile breaks the existing transcoding logic as well as GstTranscodeBin (since it's based on the existing transcoding logic). I'm not yet sure if this is an issue with the profiles I get from GUPnP, or how the transcode logic works. I'm going to post this to the appropriate mailing lists later in the week, hopefully when I have that last issue worked out.

Monday, August 8, 2011

Progress report, Aug 01 to 08

Last week, I...
  • ...finished up Rygel.DLNATranscoder
  • ...patched Rygel.TranscodeManager to populate the Transcoder list with profiles from GuPNP-DLnNA
  • ...removed Rygel.MP3Transcoder, Rygel.WMVTranscoder, Rygel.MP2TSTranscoder, Rygel.L16Transcoder
  • ...begun testing
This week, I plan to...
  • ...continue testing
  • ...package up my changes into a patch
  • ...celebrate

Saturday, July 9, 2011

+David

Got Google+, so you can follow me here. Feel free to annoy me with questions while I finish up this next piece of work on Rygel.

(Hint: It involves dynamically grabbing gupnp-dlna's profiles instead of the builtin transcoder classes)

Friday, July 1, 2011

My apologies but if you commented I had no clue

I forgot to enable e-mailed comment notifications until just now, so if I ignored your comments in the past it's not because I'm lazy, it's because the system never told me about them.

GstTranscodeBin is (hopefully) done

I now have transcodebin doing actual transcoding as part of rygel, so I think it's time to actually publicize some git repositories.

If you're wondering what I did over the past few weeks, aside from the annoying delays which kept me from my chair at times... I moved out all the transcoding logic from Rygel into a separeate gstreamer plugin called gst-transcode. The plugin can be spawned as "transcodebin" from the element factory; it provides a sink and a src pad. You also have to set the "profile" property with a GstEncodingProfile just like encodebin. Anything coming in the sink pad gets autoplugged and transcoded, and output on the src pad.

Transcodebin is available on this github repo:
https://github.com/kmeisthax/gst-transcode

There's also a test application in tests called gst-transcodetest which grabs a DLNA profile by name from gupnp-dlna and tries to transcode a file into the target format. Compilation of the test application is disabled by default; since it's not very useful, adds a build-dependancy on gupnp-dlna, and I plan to remove it eventually. If you want to compile it look in the Makefile.am and configure.ac files to see what needs to be uncommented.

It also has debian packaging which I added back before I spent two days switching from Ubuntu to Fedora in search of newer packages, then to Fedora Rawhide to get the bleeding edge. That ordeal is immortalized on my twitter.

Likewise I patched Rygel to use transcodebin; it removes about 50 lines of code from rygel-transcoder.vala. I've also got a github for that here:
https://github.com/kmeisthax/rygel

Master is just a mirror of the gnome git; my patch is in branch gsoc2011-transcoding. I've tested this on a Sony Bluray player, specifically playing an OCRemix album in OGG format live-transcoded to LPCM through Rygel and transcodebin.

There's a known bug; if I do OGG->LPCM through the gst-transcodetest program, autoplugging fails. OGG->MP3 works, and so does Rygel's LPCM transcoder. Since I next plan to replace Rygel's transcoders with a single generic transcoder fed by gupnp-dlna's profiles, I expect this bug to rear it's ugly head when said work is done.

Saturday, May 28, 2011

Project info, IRC reachability, contact info

For people interested in the project, the public page is available here. I'm making some enhancements to Gstreamer's DLNA support as well as moving some transcoding stuff out of rygel and into core. It's based off of a project request on the wiki.

There are multiple ways to contact me, including:

E-Mail! Just decode the following anti-spam mail string:
dcrkid COMMERCIAL-AT yahoo SMALL-LITTLE-DOT-ON-THE-BOTTOM com

Twitter! Follow @Libertardian for spurt-of-the-moment political and gaming rants

IRC! I'm registered on freenode as dwendt and typically lurk in #gstreamer, #gsoc, #ubuntu, and/or #Reddit

Reddi --- Actually, bad idea for me to be on Reddit during this project. Very bad idea. Forget I mentioned it.

Updated for Summer of Code 2011

Alrighty, it's GSoC 2011 time! I'm reviving the blog I used in my GSoC2009 project and should have used for my GSoC2010 project but didn't. This time, however, my project involves the GStreamer people rather than Debian - so hopefully my posts aren't being automatically routed to Planet Debian this time.