I’m glad to announce that I was accepted for one more Google Summer of Code program. I’m going to work with BlueZ again, this year to implement the A2DP sink profile. Full proposal following.
Abstract
This project is to implement the Sink role on BlueZ, according to the A2DP specification v1.2. This role provide means to receive an audio stream coming from an audio Source on the same piconet. It’s very important, and can add several use cases for the Linux bluetooth stack, like Linux to Linux streams, bluetooth microphones support or using a Linux device as bluetooth speakers. It’s also a mandatory feature for an implementation to be full compliant with A2DP v1.2.
Content
Have you worked on a Linux system before?
I’ve been working with Linux since 2002, when I’ve started the Computer Engineering undergrad. In the beginning I just did the school projects on Linux, but since the middle of 2002 it’s my main system. By that time I had Conectiva on my home computer, RedHat on the school, and Slackware on my home router. After a few years I got in touch with Gentoo, and I liked so much the idea that it became my main distro. In addition, I’ve also started working on a project at University of Campinas, to make a Linux distribution for Itautec, a brazilian IT company, which was Gentoo based. Nowadays I’m using Ubuntu in my laptop, because of the speedy install and no need of much tweaking, so I have more time to work with other projects, but I’m confortable using and administrating any distribution.
Have you contributed to a open source project? if yes, please provide the details
My first contribution was a little bit frustrating, since I never got any answer (a two lines patch to python-dialog – http://sourceforge.net/projects/pythondialog/ – to support one dialog that was missing). After that I’ve made some performance improvements in ImageMagick and DevIL using OpenMP, both of them being accepted upstream. I was also accepted and successfully completed a GSoC 08 project with BlueZ to make the bluetooth audio client for PulseAudio. All these successful experiences were outstanding and all of them (now including the never answered patch) were very useful to learn about the community and how to work with open source model. Now I’m looking for a job with open source, and also plan to continue contributing to some projects of my personal interest. Right now I’m following the BlueZ and PulseAudio mailing lists.
What is your educational Qualification (grad/under-grad) ?
I’m a Computer Engineer, majored on University of Campinas (Unicamp), Brazil. I’ve started my master degree on Computer Science studies last year, on the same university, working with visualization of concurrent algorithms. I’ve also been working as a teaching assistant of the Operating Systems course in my university, for two semesters. The last time we proposed to the students to make some changes in a memory filesystem that was developed for them to work on. This activity is giving me a bit more of knowledge on the Linux kernel, that maybe can be helpful to complete this project.
Why do you want to do a project involving Bluetooth/BlueZ ?
I’ve already been a GSoC student with BlueZ and was a very good experience. I’ve worked with the same protocol of this project, so I already have some knowledge on it. The initial motivation to choose BlueZ last year was because it’s something that I use on my daily activities (I have a bluetooth mouse on my notebook and a headset that I use to talk with friends and family on VoIP systems) and because I’m very enthusiastic about wireless devices and mobility. Besides that, I always had interest about network-related stuff.
If your application is accepted will it be a part of your graduation process or it will it be just for hobby?
If I get accepted to this project, it will not be part of my graduation process.
Give us an *estimative* of your schedule (exams period, etc.) and how much time you would be able to dedicate to the project.
The project will be divided into 5 activities. I plan to work around 20h per week with this project, during the whole program. The other 20h of a working week are going to be dedicated to my Master degree program, but it’s flexible enough to allow me some extra hours near deadlines, if needed.
1. Re-read the A2DP specification v1.2 from bluetooth.com (and related specs like AVDTP, GAVDP etc) and understand it’s current implementation. The A2DP Sink role is the dual of the A2DP Source role, with the main difference being the implementation of the “Receive Audio Stream” procedure, described in Section 3.2.2 of the spec, instead of the “Send Audio Stream procedure”. Together with this study of the spec, the code under the audio dir on BlueZ source code will be studied, to learn exactly what’s implemented and which files implement each part.
2. Maybe reorganize some code to enable reuse. If there are some already implemented parts for the Source which the Sink is also going to use (likely the AVDTP signaling procedures), the idea is to use the same implementation to minimize bugs and easy the maintenance.
3. Find out which are the missing parts and procedures to full support the Sink role and implement them.
4. Create the API for clients that want to obtain the audio received by BlueZ and export it via D-Bus, as it already done for the Source profile (which acts as a sink for software clients like media players).
Community Bounding Period (April 20th – May 22nd): Activities 1 and 2 are going to be performed on this period.
Coding Phase I (May 23rd – July 12nd): Most of activity 3 is going to be performed on this period.
Coding Phase II (July 13rd – August 17th): Finish of activity 3 and activity 4 are going to be performed on this period.
Future Work: If there is enough time, or as a future project, I would like to implement a client that uses the bluetooth audio somehow, in order to test the Sink implementation. My first idea is to do so on PulseAudio, as I’ve already worked with it before, but other ideas are also welcome.