<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lu+zero</id>
	<title>MultimediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lu+zero"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/Lu_zero"/>
	<updated>2026-07-11T11:36:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14538</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14538"/>
		<updated>2013-03-30T05:13:20Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* 1st Tier Project Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different ways to provide hardware acceleration wrapping.&lt;br /&gt;
&lt;br /&gt;
One, deprecated, is to make a full decoder and signal its capabilities somehow, the other, called '''hwaccel''', provides some API hooks to integrate the hardware acceleration in the stock decoder. &lt;br /&gt;
&lt;br /&gt;
Currently '''hwaccel''' has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve hwaccel in this regard and add support for more accelerators.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Extend the current implemented support to leverage the new features.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
'''Co-Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be and slows down the compiling time on multicore systems.&lt;br /&gt;
&lt;br /&gt;
The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
'''Co-Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the ASF muxer and demuxer ===&lt;br /&gt;
&lt;br /&gt;
Our current ASF muxer and demuxer were written using reverse engineering when the specification was not yet available. Because of that, they are hard to understand, contain many bugs and do not support the format fully. The goal of this project would be to rewrite those old parts of the ASF muxer and demuxer so that the new code:&lt;br /&gt;
* conforms to the specification;&lt;br /&gt;
* is clear and readable;&lt;br /&gt;
* has less bugs;&lt;br /&gt;
* supports all useful features of the format.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for chapters (called 'markers' in ASF) to the current ASF muxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Support for concatenation in avconv ===&lt;br /&gt;
&lt;br /&gt;
One of the most important features still missing from our multimedia transcoder avconv is proper support for concatenating (joining) media streams. The goals of this project would be to:&lt;br /&gt;
* add support for concatenating input streams when transcoding&lt;br /&gt;
* add support for concatenating outputs of the filtergraphs when transcoding&lt;br /&gt;
* (if time allows) add support for concatenating input streams when doing streamcopy.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for looping of arbitrary input files, to familiarize the student with avconv.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the RealMedia demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current RM support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
Some features (like multirate files) are not supported properly either.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Kostya|Kostya Shishkov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Extend the libavfilter filter collection ===&lt;br /&gt;
Libavfilter, our library for audio and video filtering, is slowly reaching the level of mature and usable code, but the number of filters in it is still very small. The goal of this project would be to find the most useful filters (under appropriate licences) in projects like Avisynth, SoX, ImageMagick, etc. and port them to libavfilter. Depending on the student's experience level, he or she can also write the filters from scratch.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be writing a very simple filter, to make the student familiar with libavfilter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
'''Co-Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== Streaming protocol improvements ===&lt;br /&gt;
&lt;br /&gt;
* Implement support for producing data for Adobe HTTP Dynamic Streaming and MPEG DASH&lt;br /&gt;
* Implement support for receiving the same&lt;br /&gt;
&lt;br /&gt;
Alternatively you can also implement support for another new streaming protocol we currently don't support, or improve the ones we currently support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:mstorsjo|Martin Storsjö]]'''&lt;br /&gt;
&lt;br /&gt;
'''Co-Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Language bindings ===&lt;br /&gt;
&lt;br /&gt;
Provide bindings for non-C language. The languages can be any among Perl, Python, Ruby, Go and such.&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
&lt;br /&gt;
* low-level abstraction with a 1:1 mapping to the C api.&lt;br /&gt;
* high-level abstraction matching the wrapping language idoms.&lt;br /&gt;
* example code leveraging it.&lt;br /&gt;
&lt;br /&gt;
The bindings should be using only the public api.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14496</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14496"/>
		<updated>2013-03-24T13:16:23Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* The Grand Refactoring (working title) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different ways to provide hardware acceleration wrapping.&lt;br /&gt;
&lt;br /&gt;
One, deprecated, is to make a full decoder and signal its capabilities somehow, the other, called '''hwaccel''', provides some API hooks to integrate the hardware acceleration in the stock decoder. &lt;br /&gt;
&lt;br /&gt;
Currently '''hwaccel''' has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve hwaccel in this regard and add support for more accelerators.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Extend the current implemented support to leverage the new features.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be and slows down the compiling time on multicore systems.&lt;br /&gt;
&lt;br /&gt;
The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the ASF muxer and demuxer ===&lt;br /&gt;
&lt;br /&gt;
Our current ASF muxer and demuxer were written using reverse engineering when the specification was not yet available. Because of that, they are hard to understand, contain many bugs and do not support the format fully. The goal of this project would be to rewrite those old parts of the ASF muxer and demuxer so that the new code:&lt;br /&gt;
* conforms to the specification;&lt;br /&gt;
* is clear and readable;&lt;br /&gt;
* has less bugs;&lt;br /&gt;
* supports all useful features of the format.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for chapters (called 'markers' in ASF) to the current ASF muxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Support for concatenation in avconv ===&lt;br /&gt;
&lt;br /&gt;
One of the most important features still missing from our multimedia transcoder avconv is proper support for concatenating (joining) media streams. The goals of this project would be to:&lt;br /&gt;
* add support for concatenating input streams when transcoding&lt;br /&gt;
* add support for concatenating outputs of the filtergraphs when transcoding&lt;br /&gt;
* (if time allows) add support for concatenating input streams when doing streamcopy.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for looping of arbitrary input files, to familiarize the student with avconv.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the RealMedia demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current RM support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
Some features (like multirate files) are not supported properly either.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Kostya|Kostya Shishkov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Extend the libavfilter filter collection ===&lt;br /&gt;
Libavfilter, our library for audio and video filtering, is slowly reaching the level of mature and usable code, but the number of filters in it is still very small. The goal of this project would be to find the most useful filters (under appropriate licences) in projects like Avisynth, SoX, ImageMagick, etc. and port them to libavfilter. Depending on the student's experience level, he or she can also write the filters from scratch.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be writing a very simple filter, to make the student familiar with libavfilter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Language bindings ===&lt;br /&gt;
&lt;br /&gt;
Provide bindings for non-C language. The languages can be any among Perl, Python, Ruby, Go and such.&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
&lt;br /&gt;
* low-level abstraction with a 1:1 mapping to the C api.&lt;br /&gt;
* high-level abstraction matching the wrapping language idoms.&lt;br /&gt;
* example code leveraging it.&lt;br /&gt;
&lt;br /&gt;
The bindings should be using only the public api.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14495</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14495"/>
		<updated>2013-03-24T13:14:26Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* spin off build system into a separate project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different ways to provide hardware acceleration wrapping.&lt;br /&gt;
&lt;br /&gt;
One, deprecated, is to make a full decoder and signal its capabilities somehow, the other, called '''hwaccel''', provides some API hooks to integrate the hardware acceleration in the stock decoder. &lt;br /&gt;
&lt;br /&gt;
Currently '''hwaccel''' has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve hwaccel in this regard and add support for more accelerators.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Extend the current implemented support to leverage the new features.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the ASF muxer and demuxer ===&lt;br /&gt;
&lt;br /&gt;
Our current ASF muxer and demuxer were written using reverse engineering when the specification was not yet available. Because of that, they are hard to understand, contain many bugs and do not support the format fully. The goal of this project would be to rewrite those old parts of the ASF muxer and demuxer so that the new code:&lt;br /&gt;
* conforms to the specification;&lt;br /&gt;
* is clear and readable;&lt;br /&gt;
* has less bugs;&lt;br /&gt;
* supports all useful features of the format.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for chapters (called 'markers' in ASF) to the current ASF muxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Support for concatenation in avconv ===&lt;br /&gt;
&lt;br /&gt;
One of the most important features still missing from our multimedia transcoder avconv is proper support for concatenating (joining) media streams. The goals of this project would be to:&lt;br /&gt;
* add support for concatenating input streams when transcoding&lt;br /&gt;
* add support for concatenating outputs of the filtergraphs when transcoding&lt;br /&gt;
* (if time allows) add support for concatenating input streams when doing streamcopy.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for looping of arbitrary input files, to familiarize the student with avconv.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the RealMedia demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current RM support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
Some features (like multirate files) are not supported properly either.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Kostya|Kostya Shishkov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Extend the libavfilter filter collection ===&lt;br /&gt;
Libavfilter, our library for audio and video filtering, is slowly reaching the level of mature and usable code, but the number of filters in it is still very small. The goal of this project would be to find the most useful filters (under appropriate licences) in projects like Avisynth, SoX, ImageMagick, etc. and port them to libavfilter. Depending on the student's experience level, he or she can also write the filters from scratch.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be writing a very simple filter, to make the student familiar with libavfilter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Language bindings ===&lt;br /&gt;
&lt;br /&gt;
Provide bindings for non-C language. The languages can be any among Perl, Python, Ruby, Go and such.&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
&lt;br /&gt;
* low-level abstraction with a 1:1 mapping to the C api.&lt;br /&gt;
* high-level abstraction matching the wrapping language idoms.&lt;br /&gt;
* example code leveraging it.&lt;br /&gt;
&lt;br /&gt;
The bindings should be using only the public api.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14494</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14494"/>
		<updated>2013-03-24T12:55:32Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Hardware Acceleration API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different ways to provide hardware acceleration wrapping.&lt;br /&gt;
&lt;br /&gt;
One, deprecated, is to make a full decoder and signal its capabilities somehow, the other, called '''hwaccel''', provides some API hooks to integrate the hardware acceleration in the stock decoder. &lt;br /&gt;
&lt;br /&gt;
Currently '''hwaccel''' has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve hwaccel in this regard and add support for more accelerators.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Extend the current implemented support to leverage the new features.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the ASF muxer and demuxer ===&lt;br /&gt;
&lt;br /&gt;
Our current ASF muxer and demuxer were written using reverse engineering when the specification was not yet available. Because of that, they are hard to understand, contain many bugs and do not support the format fully. The goal of this project would be to rewrite those old parts of the ASF muxer and demuxer so that the new code:&lt;br /&gt;
* conforms to the specification;&lt;br /&gt;
* is clear and readable;&lt;br /&gt;
* has less bugs;&lt;br /&gt;
* supports all useful features of the format.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for chapters (called 'markers' in ASF) to the current ASF muxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Support for concatenation in avconv ===&lt;br /&gt;
&lt;br /&gt;
One of the most important features still missing from our multimedia transcoder avconv is proper support for concatenating (joining) media streams. The goals of this project would be to:&lt;br /&gt;
* add support for concatenating input streams when transcoding&lt;br /&gt;
* add support for concatenating outputs of the filtergraphs when transcoding&lt;br /&gt;
* (if time allows) add support for concatenating input streams when doing streamcopy.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be adding support for looping of arbitrary input files, to familiarize the student with avconv.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the RealMedia demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current RM support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
Some features (like multirate files) are not supported properly either.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Kostya|Kostya Shishkov]]'''&lt;br /&gt;
&lt;br /&gt;
=== Extend the libavfilter filter collection ===&lt;br /&gt;
Libavfilter, our library for audio and video filtering, is slowly reaching the level of mature and usable code, but the number of filters in it is still very small. The goal of this project would be to find the most useful filters (under appropriate licences) in projects like Avisynth, SoX, ImageMagick, etc. and port them to libavfilter. Depending on the student's experience level, he or she can also write the filters from scratch.&lt;br /&gt;
&lt;br /&gt;
A qualification task would be writing a very simple filter, to make the student familiar with libavfilter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Language bindings ===&lt;br /&gt;
&lt;br /&gt;
Provide bindings for non-C language. The languages can be any among Perl, Python, Ruby, Go and such.&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
&lt;br /&gt;
* low-level abstraction with a 1:1 mapping to the C api.&lt;br /&gt;
* high-level abstraction matching the wrapping language idoms.&lt;br /&gt;
* example code leveraging it.&lt;br /&gt;
&lt;br /&gt;
The bindings should be using only the public api.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14441</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14441"/>
		<updated>2013-03-16T17:43:28Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Rewrite the asf muxer/demuxer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the asf muxer and demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current asf support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer and muxer.&lt;br /&gt;
&lt;br /&gt;
The [http://msdn.microsoft.com/en-us/library/bb643323.aspx specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Language bindings ===&lt;br /&gt;
&lt;br /&gt;
Provide bindings for non-C language. The languages can be any among Perl, Python, Ruby, Go and such.&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
&lt;br /&gt;
* low-level abstraction with a 1:1 mapping to the C api.&lt;br /&gt;
* high-level abstraction matching the wrapping language idoms.&lt;br /&gt;
* example code leveraging it.&lt;br /&gt;
&lt;br /&gt;
The bindings should be using only the public api.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14440</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14440"/>
		<updated>2013-03-16T17:27:31Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Adobe DNG Decoder (Basic Support) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the asf muxer/demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current asf support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer and muxer.&lt;br /&gt;
&lt;br /&gt;
The [http://msdn.microsoft.com/en-us/library/bb643323.aspx specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14439</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14439"/>
		<updated>2013-03-16T17:27:11Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* On2 VP7 decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the asf muxer/demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current asf support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer and muxer.&lt;br /&gt;
&lt;br /&gt;
The [http://msdn.microsoft.com/en-us/library/bb643323.aspx specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]'''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14438</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14438"/>
		<updated>2013-03-16T17:26:51Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* 2nd Tier Project Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of the following project have a mentor confirmed yet.&lt;br /&gt;
&lt;br /&gt;
=== Rewrite the asf muxer/demuxer ===&lt;br /&gt;
&lt;br /&gt;
The current asf support is workable but it started from early attempts to support the yet to be documented format.&lt;br /&gt;
The project aims to be a full blown rewrite to make a feature complete demuxer and muxer.&lt;br /&gt;
&lt;br /&gt;
The [http://msdn.microsoft.com/en-us/library/bb643323.aspx specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Daniel Kang''' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
ETSI released the [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification].&lt;br /&gt;
Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Benjamin Larsson'''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available [http://tools.ietf.org/html/draft-ietf-codec-opus-11 specification]&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* Handle more than 2 channels&lt;br /&gt;
* (optional) Make sure opus-in-mkv and opus-in-nut work&lt;br /&gt;
&lt;br /&gt;
The initial SILK code had been written as result of the previous attempt to support Opus&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Jruggle|Justin Ruggles]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
avconv gained the ability to listen for incoming rtmp and rtsp connection as result of the previous year project.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD.&lt;br /&gt;
It is found in the following [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf specification]. The task is to find a way of making the official decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: ???'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14437</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14437"/>
		<updated>2013-03-16T17:03:53Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* 1st Tier Project Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]'''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:DonDiego|Diego Biurrun]]'''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of these are confirmed yet, just added here as ideas.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14436</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14436"/>
		<updated>2013-03-16T17:03:20Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Native DVD support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]'''&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of these are confirmed yet, just added here as ideas.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14435</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14435"/>
		<updated>2013-03-16T14:29:41Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* The Grand Refactoring (working title) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
=== The Grand Refactoring (working title) ===&lt;br /&gt;
&lt;br /&gt;
Many parts of the libav codebase are still unnecessarily monolithic. This makes custom builds that only support a subset of the multitude of formats we have larger than they need to be. The goal of this project will be to locate parts that can be separated and refactor the code so that each subpart can be compiled standalone so as to not increase the size of a custom configuration without the part.&lt;br /&gt;
&lt;br /&gt;
A suitable qualification task for this project is picking a simple encoder/decoder pair or some part of dsputil (harder) and splitting it cleanly.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of these are confirmed yet, just added here as ideas.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14362</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14362"/>
		<updated>2013-02-23T12:46:13Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Hardware Acceleration API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. One, deprecated, is to make a full decoder and signal its capabilities somehow, the other integrates in the stock decoder, has some provision for transparent fallback, but lacks a clean way to setup and pass configuration options to it.&lt;br /&gt;
&lt;br /&gt;
The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of these are confirmed yet, just added here as ideas.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14361</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14361"/>
		<updated>2013-02-23T12:40:37Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* VP9 Native Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows the project and has considerable standing in the community. By doing so, you'll learn to operate in an open source project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on the mailing lists as well. Hop on irc.freenode.net, channel #libav-devel, or mail us at libav-devel@libav.org. There, you'll be able to ask around for persons to guide you on projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from Git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of slots we are allotted by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete APIs to provide hardware acceleration wrapping. The project should improve the available abstraction, migrate the currently implemented ones and add more hardware acceleration interfaces.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec).&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port VDPAU to the new API.&lt;br /&gt;
* Implement Freescale VPU support.&lt;br /&gt;
* Implement TI dce support.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings. The project involves providing a baseline&lt;br /&gt;
decoder as first step and optimizing it to be at least as fast as the libvpx one on one of the most used architectures (ARM and x86_64).&lt;br /&gt;
&lt;br /&gt;
[http://tools.ietf.org/html/draft-grange-vp9-bitstream-00 current draft]&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== WebP Lossless Native codec and WebP Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
WebP is a promising image format that could supercede [[JPEG]] and [[PNG]] as common format for web images, it leverages VP8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part.&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (Exceptional praise for producing a good lossy encoder but it is not required.)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Most of the open source support for DVDs is available through libdvdread and libdvdnav. Currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factoring the non-interactive part of into the libav codebase to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;br /&gt;
&lt;br /&gt;
=== Restructuring the MPEG video family of codecs ===&lt;br /&gt;
&lt;br /&gt;
Many encoders and decoders currently use the MpegEncContext structure and its associated API. This structure is a huge monolithic blob which combines the features of all those encoders and decoders, thus making it very fragile and hard to understand.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is splitting out parts of the MpegEncContext API into self-contained structures that would be easier to grasp, while still allowing code reuse where appropriate.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
None of these are confirmed yet, just added here as ideas.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14318</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14318"/>
		<updated>2013-02-12T00:37:54Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* VP9 Native Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings, the project involves providing a baseline&lt;br /&gt;
decoder as first step and optimize it to be at least as fast as the vpx one on one of the most used architectures (arm and x86_64).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Webp Lossless Native codec and webp Lossy decoder ===&lt;br /&gt;
&lt;br /&gt;
The webp is a quite promising image format that could superceed [[JPEG]] and [[PNG]] as common format for web images, it leverages vp8 for lossy&lt;br /&gt;
encoding and uses a relatively simple original format for the lossless part&lt;br /&gt;
&lt;br /&gt;
The project is split in a number of easy tasks, such as writing a decoder for both the lossy and the lossless mode and a much harder task that is providing a good encoder for the lossless part, at least. (exceptional praise for producing a good lossy encoder but it is not required).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Currently most of the opensource support for DVD is available through the use of libdvdread and libdvdnav, currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factor it in the libav codebase the non interactive part of it to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14317</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14317"/>
		<updated>2013-02-12T00:25:09Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Hardware Acceleration API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings, the project involves providing a baseline&lt;br /&gt;
decoder as first step and optimize it to be at least as fast as the vpx one on one of the most used architectures (arm and x86_64).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Currently most of the opensource support for DVD is available through the use of libdvdread and libdvdnav, currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factor it in the libav codebase the non interactive part of it to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14316</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14316"/>
		<updated>2013-02-12T00:24:53Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* VP9 Native Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings, the project involves providing a baseline&lt;br /&gt;
decoder as first step and optimize it to be at least as fast as the vpx one on one of the most used architectures (arm and x86_64).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]'''&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Currently most of the opensource support for DVD is available through the use of libdvdread and libdvdnav, currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factor it in the libav codebase the non interactive part of it to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14315</id>
		<title>User:Lu zero</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14315"/>
		<updated>2013-02-12T00:24:14Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Luca Barbato is a Gentoo developer that sometimes works on [http://videolan.org VLC] and [[Libav]].&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14314</id>
		<title>User:Lu zero</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14314"/>
		<updated>2013-02-12T00:23:59Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Luca Barbato is a Gentoo developer that sometimes works on [VLC http://videolan.org] and [[Libav]].&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14313</id>
		<title>User:Lu zero</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=User:Lu_zero&amp;diff=14313"/>
		<updated>2013-02-12T00:23:31Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Luca Barbato is a Gentoo developer that sometimes works on [[VLC]] and [[Libav]].&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14312</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14312"/>
		<updated>2013-02-12T00:22:31Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== VP9 Native Decoder ===&lt;br /&gt;
&lt;br /&gt;
The WebM team is refining the evolution of their VP8 codec using a number of additional tools and tunings, the project involves providing a baseline&lt;br /&gt;
decoder as first step and optimize it to be at least as fast as the vpx one on one of the most used architectures (arm and x86_64).&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Native DVD support ===&lt;br /&gt;
&lt;br /&gt;
Currently most of the opensource support for DVD is available through the use of libdvdread and libdvdnav, currently there is some effort to unify them&lt;br /&gt;
in a single library (libdvd5). An additional step would be factor it in the libav codebase the non interactive part of it to leverage even more code and leave as stand alone library the parts that require some kind of interaction.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:flameeyes|Diego Pettenò]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14311</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14311"/>
		<updated>2013-02-12T00:11:42Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14310</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013&amp;diff=14310"/>
		<updated>2013-02-12T00:08:36Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=NUT&amp;diff=14210</id>
		<title>NUT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=NUT&amp;diff=14210"/>
		<updated>2012-10-27T15:01:59Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: nut&lt;br /&gt;
* Specification: http://ffmpeg.org/~michael/nut.txt&lt;br /&gt;
* git repository: git://git.ffmpeg.org/nut&lt;br /&gt;
&lt;br /&gt;
NUT is a container format under construction by [[MPlayer]], [[FFmpeg]] and [[Libav]] developers. Its main goals are&lt;br /&gt;
* Simplicity: the format is simple to parse in code and easy to implement&lt;br /&gt;
* Flexibility: able to encapsulate many types of audio, video, and subtitle codecs&lt;br /&gt;
* Resilience: error-resistant while maintaining the smallest possible overhead&lt;br /&gt;
&lt;br /&gt;
== NUT seeking algo in libnut ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Binary search and linear interpolation ===&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Go to beginning of file if first syncpoint has not been found, and then go to EOF and search backward to find last syncpoint.&lt;br /&gt;
Pick the closest possible syncpoints for requested pts from syncpoint cache, one higher and one lower. If requested pts is lower than first syncpoint or higher than last syncpoint, then seek to either of those syncpoints and end seek.&lt;br /&gt;
&lt;br /&gt;
Binary search is ended when the entire region between the 2 syncpoints picked has been scanned. Which could even be before it has begun thanks to syncpoint cache.&lt;br /&gt;
&lt;br /&gt;
==== Guess position ====&lt;br /&gt;
Best results have been achieved by combining both linear interpolation and binary search, giving most of the weight to interpolation.&lt;br /&gt;
&lt;br /&gt;
;hi, hi_pd: file position and timestamp of the top edge of the binary search.&lt;br /&gt;
;lo, lo_pd: file position and timestamp of the bottom edge of the binary search.&lt;br /&gt;
;time_pos: Requested pts.&lt;br /&gt;
;guess: beginning of linear search for syncpoint.&lt;br /&gt;
&lt;br /&gt;
 #define INTERPOLATE_WEIGHT (19./20)&lt;br /&gt;
 if (hi - lo &amp;amp;lt; nut-&amp;amp;gt;max_distance*2) guess = lo + 16;&lt;br /&gt;
 else { // linear interpolation&lt;br /&gt;
     double a = (double)(hi - lo) / (hi_pd - lo_pd);&lt;br /&gt;
     guess = lo + a * (time_pos - lo_pd);&lt;br /&gt;
     guess = guess * INTERPOLATE_WEIGHT + (lo+hi)/2 * (1 - INTERPOLATE_WEIGHT);&lt;br /&gt;
     if (hi - guess &amp;amp;lt; nut-&amp;amp;gt;max_distance*2) guess = hi - nut-&amp;amp;gt;max_distance*2; //(lo + hi)/2;&lt;br /&gt;
 }&lt;br /&gt;
 if (guess &amp;amp;lt; lo + 16) guess = lo + 16;&lt;br /&gt;
&lt;br /&gt;
The first conditional prevents too much recursing when the distance is already low. The last conditional prevents an infinite loop of syncpoint search constantly finding ''lo'' and achieving nothing.&lt;br /&gt;
&lt;br /&gt;
==== Binary search ====&lt;br /&gt;
Now, find a syncpoint, bounded between ''guess'' and ''hi''. If it has a timestamp higher than requested pts, then replace ''hi'' and ''hi_pd'', otherwise replace ''lo'' and ''lo_pd''.&lt;br /&gt;
If a syncpoint was not found between ''guess'' and ''hi'', then, if ''guess'' is smaller or equal to ''lo + 16'', then you have scanned the entire area between ''lo'' and ''hi'', and your binary search is done. Otherwise, replace ''hi'' with ''guess'' and repeat the binary search.&lt;br /&gt;
&lt;br /&gt;
After finding the 2 closest syncpoints bounding your requested pts, the bounds of linear are search are:&lt;br /&gt;
&lt;br /&gt;
 *start = lo_s.pos - (lo_s.back_ptr * 16 + 15);&lt;br /&gt;
 *end = hi_s.pos;&lt;br /&gt;
 *stopper = hi_s;&lt;br /&gt;
&lt;br /&gt;
''stopper'' is used later to end linear search prematurely. Note that it is the '''top''' edge of binary search, meaning, it has a timestamp higher than requested pts.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Linear search ===&lt;br /&gt;
&lt;br /&gt;
==== Bounds of linear search ====&lt;br /&gt;
Linear search of course ends at ''end'', however, it can end earlier:&lt;br /&gt;
* When you find a frame of any stream, with a dts higher than requested pts.&lt;br /&gt;
* When you find a frame for '''all''' active streams with a pts higher than requested pts.&lt;br /&gt;
* When you find a syncpoint immediately following the syncpoint pointed to by ''stopper'''s back_ptr, (from here on this syncpoint will be called ''stopper_syncpoint'') '''and''' all streams are active.&lt;br /&gt;
* When you reach ''stopper_syncpoint'', and you have not found a keyframe for any '''non'''-active between ''stopper''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s back_ptr and ''stopper_syncpoint'', with a pts lower than ''stopper.timestamp''. The reason for this is that ''stopper'' did not point because to ''stopper_syncpoint'' can only be because of active stream keyframes, and not non-active ones.&lt;br /&gt;
* When you find a keyframe for all '''non'''-active streams after ''stopper_syncpoint'' with a pts lower than ''stopper.timestamp'', which had a keyframe in the region in the previous condition. The logic is:&lt;br /&gt;
** ''stopper.timestamp'' is higher than requested pts.&lt;br /&gt;
** ''stopper_syncpoint'' is '''not''' the syncpoint pointed to by ''stopper.back_ptr'', but the one immediately following.&lt;br /&gt;
** If there was a keyframe for every non active stream after ''stopper_syncpoint'', with a pts lower than ''stopper.timestamp'', then the reason ''stopper'' does not point to ''stopper_syncpoint'' must be that there are no keyframes for '''active''' streams with a pts lower than ''stopper.timestamp'' after ''stopper_syncpoint''.&lt;br /&gt;
** There might be more keyframes in the region with a pts higher than ''stopper.timestamp'', but those are irrelevant because they are higher than requested pts.&lt;br /&gt;
&lt;br /&gt;
The last 3 conditions can be phrased differently:&lt;br /&gt;
* When saying keyframes, only keyframes with a pts lower than ''stopper.timestamp'' are intended. Any other keyframes are irrelevant.&lt;br /&gt;
* The region ''stopper.back_ptr'' to ''stopper_syncpoint'' has a set of keyframes between it. These keyframes are the ones responsible for ''stopper'' pointing to ''stopper.back_ptr'' and not ''stopper_syncpoint''.&lt;br /&gt;
* If all streams are active, then it's impossible for there to be better keyframes for '''all''' active streams between ''stopper_syncpoint'' to the end of the linear search, because if there was, ''stopper.back_ptr'' would point there.&lt;br /&gt;
* If some streams are inactive, but none of them have a keyframe in the region specified above, then the keyframes responsible for ''stopper'' pointing to ''stopper.back_ptr'' are only from active streams, so again it is impossible there is a better position later in the linear search.&lt;br /&gt;
* If some streams are inactive, and some of them '''do''' have a keyframe in the region specified above, then those keyframes are ''possibly'' responsible for ''stopper'' pointing to ''stopper.back_ptr''. However, if we find more keyframes of those same inactive streams '''after''' the region, then they had nothing to do with ''stopper.back_ptr'', and again the condition is met.&lt;br /&gt;
&lt;br /&gt;
==== Linear search implementation ====&lt;br /&gt;
&lt;br /&gt;
# Start at ''start''.&lt;br /&gt;
# Search for syncpoint. If it is further than ''start + 15'', then the file is errored, and you can start playing immediately from this syncpoint.&lt;br /&gt;
# Perform full demuxing, buffering everything read. If you encounter any NUT error during demuxing, seek back to the syncpoint after ''start'' and end seek.&lt;br /&gt;
# On every syncpoint, flush the buffer and cache the syncpoint position.&lt;br /&gt;
#* If this syncpoint is ''stopper_syncpoint'', then do not flush the buffer, as it would be possible the linear search would end immediatelty afterwards and a second underlying seek would not be necessary.&lt;br /&gt;
# When finding keyframe of active stream with pts lower than requested pts, store position of keyframe. Discard previous value.&lt;br /&gt;
# End linear search as necessary by bounds given above.&lt;br /&gt;
# Pick the lowest value from positions of keyframes for active streams. This is the final position.&lt;br /&gt;
# Seek to closest syncpoint before the final position, preform a minimal demuxing until final position (to get proper last_pts context across all streams).&lt;br /&gt;
#* With luck this seek will not need an underlying seek, if you have not flushed the buffer since the requested position.&lt;br /&gt;
#* In most common case, ''stopper.back_ptr'' points to same syncpoint as the start of the linear search, as both syncpoints point to the same rare video keyframe.&lt;br /&gt;
#* If only video stream is active and the only non active stream is audio, you will most likely end your linear search immediately after ''stopper_syncpoint'' by finding an audio keyframe. Afterwards you will rewind right back to ''start'', and, since buffer hasn't been flushed, this will not need an underlying seek.&lt;br /&gt;
&lt;br /&gt;
=== Index ===&lt;br /&gt;
With index, binary search step is skipped, and a much more limited linear search used, between two immediate syncpoints. The syncpoint picked is the highest possible one that has a keyframe for each active stream past the syncpoint with a pts lower than requested pts. The end of the linear search is the syncpoint immediately following.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Index ===&lt;br /&gt;
Create the index in the same manner as creating the index in the muxer, remembering keyframes and EOR at syncpoint positions.&lt;br /&gt;
With one big difference - dynamic index can have gaps, thanks to seeking. Every syncpiont entry in the dynamic index has a flag indicating if it has a &amp;amp;quot;unresearched region&amp;amp;quot; gap from last syncpoint.&lt;br /&gt;
&lt;br /&gt;
In seeking, dynamic index is used in the same manner as complete index. However, when deciding a syncpoint, the entire range of the syncpoint picked until the first syncpoint with a pts higher than requested is checked for having been already researched. If a &amp;amp;quot;hole&amp;amp;quot; is found anywhere in this range, dynamic index is disregarded and full binary search is performed.&lt;br /&gt;
&lt;br /&gt;
=== End of Relevance (EOR) ===&lt;br /&gt;
Behavior with linear search:&lt;br /&gt;
* Treat EOR frames same as keyframes. Seeing an EOR frame for an active stream causes the stream to be ignored until the next keyframe of same stream.&lt;br /&gt;
* If all active streams are EOR by end of linear search, just use start of linear search as final seeking position.&lt;br /&gt;
&lt;br /&gt;
For index:&lt;br /&gt;
* When picking the correct syncpoint to start linear search, ignore streams which have EOR with pts lower than requested pts and no keyframe with pts lower than requested pts.&lt;br /&gt;
* If all active streams are EOR, pick the syncpoint immediately before the syncpoint with the last EOR across all streams with pts lower than requested pts.&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=NUT&amp;diff=14209</id>
		<title>NUT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=NUT&amp;diff=14209"/>
		<updated>2012-10-27T15:01:47Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: nut&lt;br /&gt;
* Specification: http://ffmpeg.org/~michael/nut.txt&lt;br /&gt;
* git repository: git://git.ffmpeg.org/nut&lt;br /&gt;
&lt;br /&gt;
NUT is a container format under construction by [[MPlayer]], [[FFmpeg]] and [[Libav]] developers. Its main goals are&lt;br /&gt;
* Simplicity: the format is simple to parse in code and easy to implement&lt;br /&gt;
* Flexibility: able to encapsulate many types of audio, video, and subtitle codecs&lt;br /&gt;
* Resilience: error-resistant while maintaining the smallest possible overhead&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NUT seeking algo in libnut ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Binary search and linear interpolation ===&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Go to beginning of file if first syncpoint has not been found, and then go to EOF and search backward to find last syncpoint.&lt;br /&gt;
Pick the closest possible syncpoints for requested pts from syncpoint cache, one higher and one lower. If requested pts is lower than first syncpoint or higher than last syncpoint, then seek to either of those syncpoints and end seek.&lt;br /&gt;
&lt;br /&gt;
Binary search is ended when the entire region between the 2 syncpoints picked has been scanned. Which could even be before it has begun thanks to syncpoint cache.&lt;br /&gt;
&lt;br /&gt;
==== Guess position ====&lt;br /&gt;
Best results have been achieved by combining both linear interpolation and binary search, giving most of the weight to interpolation.&lt;br /&gt;
&lt;br /&gt;
;hi, hi_pd: file position and timestamp of the top edge of the binary search.&lt;br /&gt;
;lo, lo_pd: file position and timestamp of the bottom edge of the binary search.&lt;br /&gt;
;time_pos: Requested pts.&lt;br /&gt;
;guess: beginning of linear search for syncpoint.&lt;br /&gt;
&lt;br /&gt;
 #define INTERPOLATE_WEIGHT (19./20)&lt;br /&gt;
 if (hi - lo &amp;amp;lt; nut-&amp;amp;gt;max_distance*2) guess = lo + 16;&lt;br /&gt;
 else { // linear interpolation&lt;br /&gt;
     double a = (double)(hi - lo) / (hi_pd - lo_pd);&lt;br /&gt;
     guess = lo + a * (time_pos - lo_pd);&lt;br /&gt;
     guess = guess * INTERPOLATE_WEIGHT + (lo+hi)/2 * (1 - INTERPOLATE_WEIGHT);&lt;br /&gt;
     if (hi - guess &amp;amp;lt; nut-&amp;amp;gt;max_distance*2) guess = hi - nut-&amp;amp;gt;max_distance*2; //(lo + hi)/2;&lt;br /&gt;
 }&lt;br /&gt;
 if (guess &amp;amp;lt; lo + 16) guess = lo + 16;&lt;br /&gt;
&lt;br /&gt;
The first conditional prevents too much recursing when the distance is already low. The last conditional prevents an infinite loop of syncpoint search constantly finding ''lo'' and achieving nothing.&lt;br /&gt;
&lt;br /&gt;
==== Binary search ====&lt;br /&gt;
Now, find a syncpoint, bounded between ''guess'' and ''hi''. If it has a timestamp higher than requested pts, then replace ''hi'' and ''hi_pd'', otherwise replace ''lo'' and ''lo_pd''.&lt;br /&gt;
If a syncpoint was not found between ''guess'' and ''hi'', then, if ''guess'' is smaller or equal to ''lo + 16'', then you have scanned the entire area between ''lo'' and ''hi'', and your binary search is done. Otherwise, replace ''hi'' with ''guess'' and repeat the binary search.&lt;br /&gt;
&lt;br /&gt;
After finding the 2 closest syncpoints bounding your requested pts, the bounds of linear are search are:&lt;br /&gt;
&lt;br /&gt;
 *start = lo_s.pos - (lo_s.back_ptr * 16 + 15);&lt;br /&gt;
 *end = hi_s.pos;&lt;br /&gt;
 *stopper = hi_s;&lt;br /&gt;
&lt;br /&gt;
''stopper'' is used later to end linear search prematurely. Note that it is the '''top''' edge of binary search, meaning, it has a timestamp higher than requested pts.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Linear search ===&lt;br /&gt;
&lt;br /&gt;
==== Bounds of linear search ====&lt;br /&gt;
Linear search of course ends at ''end'', however, it can end earlier:&lt;br /&gt;
* When you find a frame of any stream, with a dts higher than requested pts.&lt;br /&gt;
* When you find a frame for '''all''' active streams with a pts higher than requested pts.&lt;br /&gt;
* When you find a syncpoint immediately following the syncpoint pointed to by ''stopper'''s back_ptr, (from here on this syncpoint will be called ''stopper_syncpoint'') '''and''' all streams are active.&lt;br /&gt;
* When you reach ''stopper_syncpoint'', and you have not found a keyframe for any '''non'''-active between ''stopper''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s back_ptr and ''stopper_syncpoint'', with a pts lower than ''stopper.timestamp''. The reason for this is that ''stopper'' did not point because to ''stopper_syncpoint'' can only be because of active stream keyframes, and not non-active ones.&lt;br /&gt;
* When you find a keyframe for all '''non'''-active streams after ''stopper_syncpoint'' with a pts lower than ''stopper.timestamp'', which had a keyframe in the region in the previous condition. The logic is:&lt;br /&gt;
** ''stopper.timestamp'' is higher than requested pts.&lt;br /&gt;
** ''stopper_syncpoint'' is '''not''' the syncpoint pointed to by ''stopper.back_ptr'', but the one immediately following.&lt;br /&gt;
** If there was a keyframe for every non active stream after ''stopper_syncpoint'', with a pts lower than ''stopper.timestamp'', then the reason ''stopper'' does not point to ''stopper_syncpoint'' must be that there are no keyframes for '''active''' streams with a pts lower than ''stopper.timestamp'' after ''stopper_syncpoint''.&lt;br /&gt;
** There might be more keyframes in the region with a pts higher than ''stopper.timestamp'', but those are irrelevant because they are higher than requested pts.&lt;br /&gt;
&lt;br /&gt;
The last 3 conditions can be phrased differently:&lt;br /&gt;
* When saying keyframes, only keyframes with a pts lower than ''stopper.timestamp'' are intended. Any other keyframes are irrelevant.&lt;br /&gt;
* The region ''stopper.back_ptr'' to ''stopper_syncpoint'' has a set of keyframes between it. These keyframes are the ones responsible for ''stopper'' pointing to ''stopper.back_ptr'' and not ''stopper_syncpoint''.&lt;br /&gt;
* If all streams are active, then it's impossible for there to be better keyframes for '''all''' active streams between ''stopper_syncpoint'' to the end of the linear search, because if there was, ''stopper.back_ptr'' would point there.&lt;br /&gt;
* If some streams are inactive, but none of them have a keyframe in the region specified above, then the keyframes responsible for ''stopper'' pointing to ''stopper.back_ptr'' are only from active streams, so again it is impossible there is a better position later in the linear search.&lt;br /&gt;
* If some streams are inactive, and some of them '''do''' have a keyframe in the region specified above, then those keyframes are ''possibly'' responsible for ''stopper'' pointing to ''stopper.back_ptr''. However, if we find more keyframes of those same inactive streams '''after''' the region, then they had nothing to do with ''stopper.back_ptr'', and again the condition is met.&lt;br /&gt;
&lt;br /&gt;
==== Linear search implementation ====&lt;br /&gt;
&lt;br /&gt;
# Start at ''start''.&lt;br /&gt;
# Search for syncpoint. If it is further than ''start + 15'', then the file is errored, and you can start playing immediately from this syncpoint.&lt;br /&gt;
# Perform full demuxing, buffering everything read. If you encounter any NUT error during demuxing, seek back to the syncpoint after ''start'' and end seek.&lt;br /&gt;
# On every syncpoint, flush the buffer and cache the syncpoint position.&lt;br /&gt;
#* If this syncpoint is ''stopper_syncpoint'', then do not flush the buffer, as it would be possible the linear search would end immediatelty afterwards and a second underlying seek would not be necessary.&lt;br /&gt;
# When finding keyframe of active stream with pts lower than requested pts, store position of keyframe. Discard previous value.&lt;br /&gt;
# End linear search as necessary by bounds given above.&lt;br /&gt;
# Pick the lowest value from positions of keyframes for active streams. This is the final position.&lt;br /&gt;
# Seek to closest syncpoint before the final position, preform a minimal demuxing until final position (to get proper last_pts context across all streams).&lt;br /&gt;
#* With luck this seek will not need an underlying seek, if you have not flushed the buffer since the requested position.&lt;br /&gt;
#* In most common case, ''stopper.back_ptr'' points to same syncpoint as the start of the linear search, as both syncpoints point to the same rare video keyframe.&lt;br /&gt;
#* If only video stream is active and the only non active stream is audio, you will most likely end your linear search immediately after ''stopper_syncpoint'' by finding an audio keyframe. Afterwards you will rewind right back to ''start'', and, since buffer hasn't been flushed, this will not need an underlying seek.&lt;br /&gt;
&lt;br /&gt;
=== Index ===&lt;br /&gt;
With index, binary search step is skipped, and a much more limited linear search used, between two immediate syncpoints. The syncpoint picked is the highest possible one that has a keyframe for each active stream past the syncpoint with a pts lower than requested pts. The end of the linear search is the syncpoint immediately following.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Index ===&lt;br /&gt;
Create the index in the same manner as creating the index in the muxer, remembering keyframes and EOR at syncpoint positions.&lt;br /&gt;
With one big difference - dynamic index can have gaps, thanks to seeking. Every syncpiont entry in the dynamic index has a flag indicating if it has a &amp;amp;quot;unresearched region&amp;amp;quot; gap from last syncpoint.&lt;br /&gt;
&lt;br /&gt;
In seeking, dynamic index is used in the same manner as complete index. However, when deciding a syncpoint, the entire range of the syncpoint picked until the first syncpoint with a pts higher than requested is checked for having been already researched. If a &amp;amp;quot;hole&amp;amp;quot; is found anywhere in this range, dynamic index is disregarded and full binary search is performed.&lt;br /&gt;
&lt;br /&gt;
=== End of Relevance (EOR) ===&lt;br /&gt;
Behavior with linear search:&lt;br /&gt;
* Treat EOR frames same as keyframes. Seeing an EOR frame for an active stream causes the stream to be ignored until the next keyframe of same stream.&lt;br /&gt;
* If all active streams are EOR by end of linear search, just use start of linear search as final seeking position.&lt;br /&gt;
&lt;br /&gt;
For index:&lt;br /&gt;
* When picking the correct syncpoint to start linear search, ignore streams which have EOR with pts lower than requested pts and no keyframe with pts lower than requested pts.&lt;br /&gt;
* If all active streams are EOR, pick the syncpoint immediately before the syncpoint with the last EOR across all streams with pts lower than requested pts.&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14208</id>
		<title>FFV1</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14208"/>
		<updated>2012-10-27T14:54:04Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: FFV1&lt;br /&gt;
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html&lt;br /&gt;
&lt;br /&gt;
The FFV1 video codec is a simple and efficient lossless intra-frame only codec. &lt;br /&gt;
&lt;br /&gt;
Multiple version of the codec are available. ([[User:Lu zero|lu_zero]] Describe only version 2?)&lt;br /&gt;
&lt;br /&gt;
= Bitstream =&lt;br /&gt;
&lt;br /&gt;
== Conventions ==&lt;br /&gt;
&lt;br /&gt;
([[User:Lu zero|lu_zero]] Put a table with the description symbol and such)&lt;br /&gt;
&lt;br /&gt;
== Bitstream structure ==&lt;br /&gt;
&lt;br /&gt;
FFV1 consts of a global header and frames. Frames are structured in header and slices.&lt;br /&gt;
The headers store information regarding encoding type, pixel format and slice geometry.&lt;br /&gt;
Depending on the version most of it is stored in the global header or in the per-frame header.&lt;br /&gt;
&lt;br /&gt;
=== Global Header ===&lt;br /&gt;
&lt;br /&gt;
Version 1 does not have a global header, from version 2 the following field compose the global header.&lt;br /&gt;
&lt;br /&gt;
([[User:Lu zero|lu_zero]] Make a table)&lt;br /&gt;
&lt;br /&gt;
* version&lt;br /&gt;
* minor version &lt;br /&gt;
&lt;br /&gt;
* coder type &lt;br /&gt;
&lt;br /&gt;
* state transition table&lt;br /&gt;
&lt;br /&gt;
* colorspace type&lt;br /&gt;
&lt;br /&gt;
* bits per sample&lt;br /&gt;
&lt;br /&gt;
* chroma_planes&lt;br /&gt;
&lt;br /&gt;
* horizontal subsampling&lt;br /&gt;
* vertical subsampling  &lt;br /&gt;
&lt;br /&gt;
* alpha plane presence&lt;br /&gt;
&lt;br /&gt;
* number of horizontal slices&lt;br /&gt;
* number of vertical slices&lt;br /&gt;
&lt;br /&gt;
* quantization tables&lt;br /&gt;
&lt;br /&gt;
* error correction&lt;br /&gt;
&lt;br /&gt;
* cyclic redundancy check&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Each frame is composed by a small header and the frame data in slices.&lt;br /&gt;
Version 0 and 1 use a larger per frame header, version 2 and later store&lt;br /&gt;
only the initial 1bit Range Coded keyframe flag.&lt;br /&gt;
Depending on the version the slice data provides additional information,&lt;br /&gt;
a specific quantization table and a redundancy check.&lt;br /&gt;
&lt;br /&gt;
==== Frame Header ====&lt;br /&gt;
&lt;br /&gt;
Version 0 and 1 use a large per frame header, version 2 and later store&lt;br /&gt;
only the initial 1bit Range Coded keyframe flag.&lt;br /&gt;
&lt;br /&gt;
==== Slice ====&lt;br /&gt;
&lt;br /&gt;
Version 2 slice has the following structure&lt;br /&gt;
&lt;br /&gt;
= Encoding =&lt;br /&gt;
&lt;br /&gt;
== Encoding modes ==&lt;br /&gt;
&lt;br /&gt;
=== Range coding ===&lt;br /&gt;
&lt;br /&gt;
=== Huffman coding ===&lt;br /&gt;
&lt;br /&gt;
== Frame Encoding ==&lt;br /&gt;
&lt;br /&gt;
=== Colorspace ===&lt;br /&gt;
&lt;br /&gt;
=== Prediction ===&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
= Common usage =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14206</id>
		<title>FFV1</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14206"/>
		<updated>2012-10-19T12:38:45Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: FFV1&lt;br /&gt;
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html&lt;br /&gt;
&lt;br /&gt;
The FFV1 video codec is a simple and efficient lossless intra-frame only codec. &lt;br /&gt;
&lt;br /&gt;
Multiple version of the codec are available. ([[User:Lu zero|lu_zero]] Describe only version 2?)&lt;br /&gt;
&lt;br /&gt;
== Bitstream structure ==&lt;br /&gt;
&lt;br /&gt;
=== Global Header ===&lt;br /&gt;
&lt;br /&gt;
Version 1 does not have a global header, from version 2 the following field compose the global header.&lt;br /&gt;
&lt;br /&gt;
* version&lt;br /&gt;
* minor version &lt;br /&gt;
&lt;br /&gt;
* coder type &lt;br /&gt;
&lt;br /&gt;
* state transition table&lt;br /&gt;
&lt;br /&gt;
* colorspace type&lt;br /&gt;
&lt;br /&gt;
* bits per sample&lt;br /&gt;
&lt;br /&gt;
* chroma_planes&lt;br /&gt;
&lt;br /&gt;
* horizontal subsampling&lt;br /&gt;
* vertical subsampling  &lt;br /&gt;
&lt;br /&gt;
* alpha plane presence&lt;br /&gt;
&lt;br /&gt;
* number of horizontal slices&lt;br /&gt;
* number of vertical slices&lt;br /&gt;
&lt;br /&gt;
* quantization tables&lt;br /&gt;
&lt;br /&gt;
* error correction&lt;br /&gt;
&lt;br /&gt;
* cyclic redundancy check&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Each frame is composed by a small header and the frame data in slices.&lt;br /&gt;
Version 0 and 1 use a larger per frame header, version 2 and later store&lt;br /&gt;
only the initial 1bit Range Coded keyframe flag.&lt;br /&gt;
Depending on the version the slice data provides additional information,&lt;br /&gt;
a specific quantization table and a redundancy check.&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
&lt;br /&gt;
Version 0 and 1 use a large per frame header, version 2 and later store&lt;br /&gt;
only the initial 1bit Range Coded keyframe flag.&lt;br /&gt;
&lt;br /&gt;
==== Slice ====&lt;br /&gt;
&lt;br /&gt;
Version 2 slice has the following structure&lt;br /&gt;
&lt;br /&gt;
== Frame Encoding ==&lt;br /&gt;
&lt;br /&gt;
=== Prediction ===&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
=== Colorspace ===&lt;br /&gt;
&lt;br /&gt;
=== Value encoding modes ===&lt;br /&gt;
&lt;br /&gt;
==== Range coding ====&lt;br /&gt;
&lt;br /&gt;
==== Huffman coding ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14205</id>
		<title>FFV1</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14205"/>
		<updated>2012-10-19T12:32:13Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Frame */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: FFV1&lt;br /&gt;
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html&lt;br /&gt;
&lt;br /&gt;
The FFV1 video codec is a simple and efficient lossless intra-frame only codec. &lt;br /&gt;
&lt;br /&gt;
== Bitstream structure ==&lt;br /&gt;
&lt;br /&gt;
=== Global Header ===&lt;br /&gt;
&lt;br /&gt;
Version 1 does not have a global header, from version 2 the following field compose the global header.&lt;br /&gt;
&lt;br /&gt;
* version&lt;br /&gt;
* minor version &lt;br /&gt;
&lt;br /&gt;
* coder type &lt;br /&gt;
&lt;br /&gt;
* state transition table&lt;br /&gt;
&lt;br /&gt;
* colorspace type&lt;br /&gt;
&lt;br /&gt;
* bits per sample&lt;br /&gt;
&lt;br /&gt;
* chroma_planes&lt;br /&gt;
&lt;br /&gt;
* horizontal subsampling&lt;br /&gt;
* vertical subsampling  &lt;br /&gt;
&lt;br /&gt;
* alpha plane presence&lt;br /&gt;
&lt;br /&gt;
* number of horizontal slices&lt;br /&gt;
* number of vertical slices&lt;br /&gt;
&lt;br /&gt;
* quantization tables&lt;br /&gt;
&lt;br /&gt;
* error correction&lt;br /&gt;
&lt;br /&gt;
* cyclic redundancy check&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
Each frame is composed by a small header and the frame data in slices&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
&lt;br /&gt;
===== Version 1 =====&lt;br /&gt;
Version 0 and 1 use only the per frame header defined as following.&lt;br /&gt;
&lt;br /&gt;
===== Version 2 =====&lt;br /&gt;
Version 2 and later store only the initial 1bit Range Coded keyframe flag.&lt;br /&gt;
&lt;br /&gt;
==== Slice ====&lt;br /&gt;
&lt;br /&gt;
== Frame Encoding ==&lt;br /&gt;
&lt;br /&gt;
=== Prediction ===&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
=== Colorspace ===&lt;br /&gt;
&lt;br /&gt;
=== Value encoding modes ===&lt;br /&gt;
&lt;br /&gt;
==== Range coding ====&lt;br /&gt;
&lt;br /&gt;
==== Huffman coding ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14204</id>
		<title>FFV1</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14204"/>
		<updated>2012-10-19T12:24:14Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Global Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: FFV1&lt;br /&gt;
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html&lt;br /&gt;
&lt;br /&gt;
The FFV1 video codec is a simple and efficient lossless intra-frame only codec. &lt;br /&gt;
&lt;br /&gt;
== Bitstream structure ==&lt;br /&gt;
&lt;br /&gt;
=== Global Header ===&lt;br /&gt;
&lt;br /&gt;
Version 1 does not have a global header, from version 2 the following field compose the global header.&lt;br /&gt;
&lt;br /&gt;
* version&lt;br /&gt;
* minor version &lt;br /&gt;
&lt;br /&gt;
* coder type &lt;br /&gt;
&lt;br /&gt;
* state transition table&lt;br /&gt;
&lt;br /&gt;
* colorspace type&lt;br /&gt;
&lt;br /&gt;
* bits per sample&lt;br /&gt;
&lt;br /&gt;
* chroma_planes&lt;br /&gt;
&lt;br /&gt;
* horizontal subsampling&lt;br /&gt;
* vertical subsampling  &lt;br /&gt;
&lt;br /&gt;
* alpha plane presence&lt;br /&gt;
&lt;br /&gt;
* number of horizontal slices&lt;br /&gt;
* number of vertical slices&lt;br /&gt;
&lt;br /&gt;
* quantization tables&lt;br /&gt;
&lt;br /&gt;
* error correction&lt;br /&gt;
&lt;br /&gt;
* cyclic redundancy check&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
&lt;br /&gt;
==== Slice ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Frame Encoding ==&lt;br /&gt;
&lt;br /&gt;
=== Prediction ===&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
=== Colorspace ===&lt;br /&gt;
&lt;br /&gt;
=== Value encoding modes ===&lt;br /&gt;
&lt;br /&gt;
==== Range coding ====&lt;br /&gt;
&lt;br /&gt;
==== Huffman coding ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14203</id>
		<title>FFV1</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFV1&amp;diff=14203"/>
		<updated>2012-10-19T12:16:56Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: FFV1&lt;br /&gt;
* Technical Description: http://www.ffmpeg.org/~michael/ffv1.html&lt;br /&gt;
&lt;br /&gt;
The FFV1 video codec is a simple and efficient lossless intra-frame only codec. &lt;br /&gt;
&lt;br /&gt;
== Bitstream structure ==&lt;br /&gt;
&lt;br /&gt;
=== Global Header ===&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
&lt;br /&gt;
==== Slice ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Frame Encoding ==&lt;br /&gt;
&lt;br /&gt;
=== Prediction ===&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
=== Colorspace ===&lt;br /&gt;
&lt;br /&gt;
=== Value encoding modes ===&lt;br /&gt;
&lt;br /&gt;
==== Range coding ====&lt;br /&gt;
&lt;br /&gt;
==== Huffman coding ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=14023</id>
		<title>Libav Summer Of Code 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=14023"/>
		<updated>2012-03-30T18:57:31Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Swscale Cleanup and Additions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== Assembly Unit Testing Framework ===&lt;br /&gt;
* Libav has a lot of assembly and not enough tests for it. Your job is to write a unit testing framework for assembly.&lt;br /&gt;
* The framework should work across all supported architectures and operating systems.&lt;br /&gt;
* The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).&lt;br /&gt;
* The framework should be able to test functions in isolation.&lt;br /&gt;
* x264's checkasm can be used as a reference.&lt;br /&gt;
* The qualification task will be to implement at least one unit test and have an idea of how to do the rest.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; daniel.d.kang@gmail.com -- ping me on IRC and email me).&lt;br /&gt;
&lt;br /&gt;
=== HEVC/H265 decoder ===&lt;br /&gt;
&lt;br /&gt;
* HEVC is the next-generation video standard from the MPEG standards committee. Your job is to write a decoder that can playback HEVC files.&lt;br /&gt;
* It does not need to be SIMD-optimized, but preferably has relevant functions separated in DSP contexts so they're easy to optimize later on.&lt;br /&gt;
* This task will depend on the current standardisation status of HEVC. Final publication is in 2013 but there may be parts which will not change much anyway.&lt;br /&gt;
* Draft spec: http://www.itscj.ipsj.or.jp/sc29/open/29view/29n12612c.htm&lt;br /&gt;
* HM (draft reference decoder) git mirror: http://hevc.kw.bbc.co.uk/git/w/jctvc-hm.git&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Ronald_S._Bultje|Ronald S. Bultje]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opus Decoder ===&lt;br /&gt;
&lt;br /&gt;
Implement an independent Opus decoder using the publicly-available specification at:&lt;br /&gt;
http://tools.ietf.org/html/draft-ietf-codec-opus-11&lt;br /&gt;
&lt;br /&gt;
* The reference source code should only be used as a normative document reference when required (i.e. this should not just be a port of libopus)&lt;br /&gt;
* Fully support Ogg/Opus mapping: https://wiki.xiph.org/OggOpus&lt;br /&gt;
* Handle CELT, SILK, and Hybrid modes (including transitions)&lt;br /&gt;
* (optional) Handle more than 2 channels&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adobe DNG Decoder (Basic Support) ===&lt;br /&gt;
&lt;br /&gt;
Adobe Digital Negative (DNG) is an attempt at a universal file format for raw camera images. Most camera manufacturers have their own proprietary raw image format. Adobe provides tools for converting these to DNG with minimal or no loss of information for more reliable long-term support in a format with an open specification.&lt;br /&gt;
&lt;br /&gt;
The project goal would be to add features required for basic support of DNG files. Some of these include:&lt;br /&gt;
* test/improve TIFF and LJPEG 16-bit decoding support&lt;br /&gt;
* implement both variants of JPEG-in-TIFF in the TIFF decoder&lt;br /&gt;
* add basic handling for Bayer CFA pixel format(s), including demosaicing&lt;br /&gt;
* conversion from camera colorspace to RGB&lt;br /&gt;
* export of DNG/TIFF/Exif metadata&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Digital_Negative Wikipedia Article]&lt;br /&gt;
* [http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec.pdf Specification]&lt;br /&gt;
* DNG samples can be created from other raw formats using the free [http://www.adobe.com/products/photoshop/extend.displayTab2.html DNG Converter] program&lt;br /&gt;
* A good place to find raw camera samples is http://www.imaging-resource.com&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Jruggle|Justin Ruggles]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RTMP[E|S|T|TE] protocol implementation ===&lt;br /&gt;
&lt;br /&gt;
Currently librtmp is required for RTMPE, RTMPS, RTMPT, RTMPTE. The goal of this project is to implement these protocol variants natively in libavformat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:mstorsjo|Martin Storsjö]], [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== Swscale Cleanup and Additions ===&lt;br /&gt;
&lt;br /&gt;
Libswscale is an open source library for colourspace conversion. However, it requires significant cleanup to allow&lt;br /&gt;
it to support modern features. Knowledge of x86 assembly is preferred, though it can be learnt as part of GSOC.&lt;br /&gt;
&lt;br /&gt;
* Support for more interleaved colourspaces. This is useful because interleaved chroma provides improved cache coherency and would form the basis for future optimisations in libav's decoders.&lt;br /&gt;
* Support for the vast number of packed pixel formats (e.g r210, v210). Many are currently implemented as decoders but it is agreed that all uses of such formats are effectively colourspace conversions, they should be included in swscale. This task will involve collaborating with the student of &amp;quot;Adobe DNG Decoder&amp;quot; (if applicable) to rewrite the pixel format headers to support more complex pixel formats.&lt;br /&gt;
* Inline asm to yasm conversion&lt;br /&gt;
* RGB work (todo: expand this)&lt;br /&gt;
* Bayer layouts&lt;br /&gt;
* Other general cleanup&lt;br /&gt;
&lt;br /&gt;
''Mentor: Kieran Kunhya (kierank)''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
=== DTS-LBR decoder ===&lt;br /&gt;
&lt;br /&gt;
This is the DTS equivalent to E-AC3 but not technically related to DTS/DTS-HD. It is found in the following specification: http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). The task is to find a way of making the official&lt;br /&gt;
decoder decode just the LBR stream (and not mix it into the main audio) and use that to verify decoder compliance of the decoder you wrote.&lt;br /&gt;
The spec may be incomplete or require parts to be reverse engineered from the binary.&lt;br /&gt;
&lt;br /&gt;
''Mentor: ???''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=13878</id>
		<title>Libav Summer Of Code 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=13878"/>
		<updated>2012-02-17T18:05:34Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* 1st Tier Project Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
:Please detail the deadlines for applying and being a student/mentor.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Ask about the FFmpeg/Libav fork as a first conversation subject. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== HEVC/H265 decoder ===&lt;br /&gt;
&lt;br /&gt;
* HEVC is the next-generation video standard from the MPEG standards committee. Your job is to write a decoder that can playback HEVC files.&lt;br /&gt;
* It does not need to be SIMD-optimized, but preferably has relevant functions separated in DSP contexts so they're easy to optimize later on.&lt;br /&gt;
* This task will depend on the current standardisation status of HEVC. Final publication is in 2013 but there may be parts which will not change much anyway.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Ronald_S._Bultje|Ronald S. Bultje]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Justin Ruggles''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RTMP[E|S|T|TE] protocol implementation ===&lt;br /&gt;
&lt;br /&gt;
Currently librtmp is required for RTMPE, RTMPS, RTMPT, RTMPTE. The goal of this project is to implement these protocol variants natively in libavformat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:mstorsjo|Martin Storsjö]], [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
=== Hardware Acceleration API ===&lt;br /&gt;
&lt;br /&gt;
Libav has two different and incomplete api to provide hardware acceleration wrapping, the project should provide a better abstraction and migrate the currently implemented ones and additional provide more.&lt;br /&gt;
&lt;br /&gt;
* Draft the API (that will require knowledge of libavcodec)&lt;br /&gt;
* Port vaapi/hwaccel to the new API.&lt;br /&gt;
* Port vdpau to the new API&lt;br /&gt;
* Implement Freescale VPU support&lt;br /&gt;
* Implement TI dce support&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
&lt;br /&gt;
Libav needs a better system to serve streams, the current codebase had a number of design defect showing its age. The new avserver should be written from scratch, leveraging the knowledge piled up.&lt;br /&gt;
&lt;br /&gt;
The implementation will be incrementally complex and possibly modular.&lt;br /&gt;
&lt;br /&gt;
* Implement support to rtsp record/announce&lt;br /&gt;
* Expose RTMP and RTSP specific API (so the server won't have to use private calls)&lt;br /&gt;
* Write a simple rtsp, http, rtmp redirector (listen for publish/announce and rebroadcast the received streams)&lt;br /&gt;
* Add the capability to serve on-demand content reading from a single path&lt;br /&gt;
&lt;br /&gt;
Ideally the first implementation can be made using a poll/event loop and then moved to use threads.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier (need mentor) Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
=== AACS implementation ===&lt;br /&gt;
* this task is to get libbluray integrated and working with as many discs as possible.&lt;br /&gt;
* Add the ability to encode and decode using Advanced Access Content System.&lt;br /&gt;
* Specifications: http://www.aacsla.com/specifications/&lt;br /&gt;
* existing implementation e.g. DumpHD: http://forum.doom9.org/showthread.php?t=123111&lt;br /&gt;
* Most parts (BD-J, MKB, title key generation) probably do not belong in libavcodec/libavformat, this should be discussed with us before submitting an application&lt;br /&gt;
** possible solution: only implement &amp;quot;lowest&amp;quot; level (decode given the correct title key) but implement CSS en- and decryption as secondary goal&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=13877</id>
		<title>Libav Summer Of Code 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2012&amp;diff=13877"/>
		<updated>2012-02-17T17:49:24Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* RTMP[E|S|T|TE] protocol implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How it works ==&lt;br /&gt;
&lt;br /&gt;
Google's Summer of Code program is simple: you (the student) work on a project, full-time, during the whole summer, and you get assistance (advice, mentoring) from a seasoned Libav developer who knows his way around the project and has considerable standing in the community. By doing so, you'll learn to operate in an opensource project, you'll get relevant coding experience, and you'll have a chance at earning money while doing fun stuff during the summer. So, you need a project, a mentor, do a qualification task (see below) so we can quickly assess how good a candidate we feel you'll be for the program, and then you can apply.&lt;br /&gt;
&lt;br /&gt;
:Please detail the deadlines for applying and being a student/mentor.&lt;br /&gt;
&lt;br /&gt;
=== Selecting a project ===&lt;br /&gt;
Below, you'll find two lists of projects:&lt;br /&gt;
* Projects with a mentor&lt;br /&gt;
* Projects without a mentor&lt;br /&gt;
If you choose a project with a mentor, talk to that mentor (see below) and select a suitable qualification task. Once completed, you're eligible for participating in our Summer of Code program. If you choose a project without a mentor, your first job is to find a mentor (see below). Then, once you've found a mentor, continue as before. If you don't like any of the projects, you're free to define your own project and find a mentor as mentioned before (see below for caveats).&lt;br /&gt;
&lt;br /&gt;
=== Contacting developers/mentors ===&lt;br /&gt;
Once you've found a project (with or without mentor), start talking to the developers of the Libav project. We can often be found on IRC, and you can talk to us on mailinglists also. Hop on irc.freenode.net channel #libav-devel, or talk to us on libav-devel@libav.org. Ask about the FFmpeg/Libav fork as a first conversation subject. Here, you'll be able to ask around for mentors for projects without a mentor if you need to. If you're trying to define your own project, explain (with reasonable amount of detail) what you intend to achieve and why you think your project should be in our Summer of Code program. Once you've found a mentor, you're good to start your qualification task.&lt;br /&gt;
&lt;br /&gt;
Note that the self-selected mentor needs to have considerable standing in the community to be eligible for mentoring. Likewise, if you choose to define your own Summer of Code project, some community members of considerable standing need to vouch for your project.&lt;br /&gt;
&lt;br /&gt;
=== Your qualification task ===&lt;br /&gt;
The goal of a qualification task is to see if the mentor and student feel that, together, they will be able to finish the project of their choice. More specifically, the mentor will want to test whether the student has the skills and work ethics to complete a large coding project in a limited amount of time. The student will want to make sure that the mentor provides (useful) assistance when necessary. Therefore, students should select a mentor and a Summer of Code project before starting their work on a qualification task. The qualification task is often (but not necessarily) related to the selected project. For example, if your project will be to reverse engineer a new video codec, the qualification task may be to write a partial bitstream parser for that codec. If your project is to write a muxer for a container format, the qualification task may be to write the code to write the stream header.&lt;br /&gt;
&lt;br /&gt;
There will be a second qualification task for every student: Pick a file of moderate size and reformat it in proper K&amp;amp;R style. The goal of this task is twofold: First it familiarizes students with the style that they will have to write their code in, second it demonstrates that students are able to submit patches from git and go through our review process.&lt;br /&gt;
&lt;br /&gt;
=== Applying ===&lt;br /&gt;
While you're working on your qualification task, apply at http://www.google-melange.com/. The degree (and detail) with which you've finished your qualification task will determine how likely your project is to be selected. In the past few years, students that completely finished their qualification task always got selected as Summer of Code students, but that may vary depending on the number of spots we get assigned by Google, and the number of students that apply.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.&lt;br /&gt;
&lt;br /&gt;
=== HEVC/H265 decoder ===&lt;br /&gt;
&lt;br /&gt;
* HEVC is the next-generation video standard from the MPEG standards committee. Your job is to write a decoder that can playback HEVC files.&lt;br /&gt;
* It does not need to be SIMD-optimized, but preferably has relevant functions separated in DSP contexts so they're easy to optimize later on.&lt;br /&gt;
* This task will depend on the current standardisation status of HEVC. Final publication is in 2013 but there may be parts which will not change much anyway.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Ronald_S._Bultje|Ronald S. Bultje]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifcations (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf). Your job is to complete the existing decoder with the following features.&lt;br /&gt;
&lt;br /&gt;
 (1) Add support for mixed Core + DTS-HD stream structure&lt;br /&gt;
     (DtsCoreFrame+DtsHdFrame+DtsCoreFrame+DtsHdFrame+...), used by Blu-Ray main&lt;br /&gt;
     and commentary tracks.&lt;br /&gt;
 (2) Add support for XXCh extension (6.1 and 7.1 channels).&lt;br /&gt;
 (3) Add support for X96 extension (96khz).&lt;br /&gt;
 (4) Add support for XLL extension (lossless).&lt;br /&gt;
 (5) Add support for a pure DTS-HD stream structure&lt;br /&gt;
     (DtsHdFrame+DtsHdFrame+DtsHdFrame+...), used by Blu-Ray PiP tracks.&lt;br /&gt;
 (6) Add support for XBR extension (extra bitrate).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS Roundup ===&lt;br /&gt;
&lt;br /&gt;
This task is to update and enhance the existing ALS decoder as well as integrate&lt;br /&gt;
and enhance the rudimentary encoder found at:&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
Possible features are:&lt;br /&gt;
&lt;br /&gt;
* implement rls-lms in the decoder&lt;br /&gt;
* do correct channel layout/sort handling in the decoder&lt;br /&gt;
* update to current master&lt;br /&gt;
* use codec private options&lt;br /&gt;
* implement encode2(), setting pts and duration&lt;br /&gt;
* document options and examples in encoders.texi&lt;br /&gt;
* come up with a good set of encoding tests for FATE&lt;br /&gt;
* implement mcc/channel sort in the encoder&lt;br /&gt;
* implement rls-lms in the encoder&lt;br /&gt;
* implement float support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: Justin Ruggles''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== On2 VP7 decoder ===&lt;br /&gt;
&lt;br /&gt;
VP7 is a DCT-based video codec. At the moment, it seems to lack a reference implementation, but we do have a spec and may take hint from libavcodec's VP8 and VP6 decoder and libvpx. MPlayer can decode VP7 by loading a binary. To begin working on the project, one has to setup a reference decoder against which to compare our output. This can be done by either writing a wrapper for the binary or (maybe) hacking libvpx itself.&lt;br /&gt;
&lt;br /&gt;
You might want to discuss with us how and where to start. Drop by on IRC if you need help. It is not as difficult as it sounds.&lt;br /&gt;
&lt;br /&gt;
* [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf Specification]&lt;br /&gt;
* [http://samples.libav.org/V-codecs/VP7/ Samples]&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RTMP[E|S|T|TE] protocol implementation ===&lt;br /&gt;
&lt;br /&gt;
Currently librtmp is required for RTMPE, RTMPS, RTMPT, RTMPTE. The goal of this project is to implement these protocol variants natively in libavformat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:mstorsjo|Martin Storsjö]], [[User:lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
=== spin off build system into a separate project ===&lt;br /&gt;
&lt;br /&gt;
Our build system is neat enough to make into a more general solution to be reused by other projects.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to achieve exactly that. Intermediate steps will be reading, understanding and documenting the current build system, refactoring parts that can be generalized further and finally making a prototype implementation for libpostproc.&lt;br /&gt;
&lt;br /&gt;
You will require skills in POSIX shell, GNU Make and a firm command of English.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:DonDiego|Diego Biurrun]]''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier (need mentor) Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
=== AACS implementation ===&lt;br /&gt;
* this task is to get libbluray integrated and working with as many discs as possible.&lt;br /&gt;
* Add the ability to encode and decode using Advanced Access Content System.&lt;br /&gt;
* Specifications: http://www.aacsla.com/specifications/&lt;br /&gt;
* existing implementation e.g. DumpHD: http://forum.doom9.org/showthread.php?t=123111&lt;br /&gt;
* Most parts (BD-J, MKB, title key generation) probably do not belong in libavcodec/libavformat, this should be discussed with us before submitting an application&lt;br /&gt;
** possible solution: only implement &amp;quot;lowest&amp;quot; level (decode given the correct title key) but implement CSS en- and decryption as secondary goal&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libavfilter_Shortcomings&amp;diff=13735</id>
		<title>Libavfilter Shortcomings</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libavfilter_Shortcomings&amp;diff=13735"/>
		<updated>2011-12-04T19:53:48Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here a list of Libavfilter shortcomings that should be addressed:&lt;br /&gt;
&lt;br /&gt;
* No error reporting in the callbacks&lt;br /&gt;
* No support for reconfiguration&lt;br /&gt;
* No way to provide a filter help with parameters&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavcodec_HOWTO&amp;diff=13717</id>
		<title>Libav libavcodec HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavcodec_HOWTO&amp;diff=13717"/>
		<updated>2011-11-16T02:43:41Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
: ''This page will hold information on how libavcodec is structured an how to add demuxer and protocols to it''&lt;br /&gt;
: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Codec structure ==&lt;br /&gt;
&lt;br /&gt;
== Introducing a new codec ==&lt;br /&gt;
&lt;br /&gt;
=== libavcodec/Makefile ===&lt;br /&gt;
&lt;br /&gt;
=== libavcodec/allcodecs.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Work In Progress]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13716</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13716"/>
		<updated>2011-11-16T02:43:25Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''This page will hold information on how libavformat is structured an how to add demuxer and protocols to it''&lt;br /&gt;
: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
Libavformat provides means to retrieve codec data and stream metadata from container formats and network streams.&lt;br /&gt;
&lt;br /&gt;
Demuxers let the application access or store the codec data and metadata within a container format providing at least timing information.&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
In general (TODO: make a diagram out of it)&lt;br /&gt;
&lt;br /&gt;
Protocol -&amp;gt; Demuxer -&amp;gt; Encoded data with timing information (video frames, audio samples, timed metadata) -&amp;gt; Decoders -&amp;gt; Raw data with timing information -&amp;gt; Output&lt;br /&gt;
&lt;br /&gt;
Input -&amp;gt; Raw data with timing information -&amp;gt; Encoders -&amp;gt; Coded data with timing information -&amp;gt; Muxer -&amp;gt; Protocol&lt;br /&gt;
&lt;br /&gt;
== Demuxer structure ==&lt;br /&gt;
&lt;br /&gt;
== Protocol structure ==&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer or a new protocol ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer or the new protocol  you have to edit '''libavformat/allformats.c''' and '''libavformat/Makefile'''.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter contains the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use use directly the protocol name, so for a protocol named '''name''', '''name'''.c.&lt;br /&gt;
If the protocol is tightly bound to a specific demuxer or could be mismatched is advised to use '''name'''proto.c (e.g. rtmpproto.c)&lt;br /&gt;
&lt;br /&gt;
Add&lt;br /&gt;
 OBJS-$(CONFIG_NAME_PROTOCOL)        += nameproto.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a protoco:&lt;br /&gt;
 REGISTER_PROTOCOL(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_protocol to the available protocols.&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Work In Progress]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13715</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13715"/>
		<updated>2011-11-16T02:34:25Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
: ''This page will hold information on how libavformat is structured an how to add demuxer and protocols to it''&lt;br /&gt;
: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Demuxer structure ==&lt;br /&gt;
&lt;br /&gt;
== Protocol structure ==&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer or a new protocol ==&lt;br /&gt;
&lt;br /&gt;
A demuxer let the application access the codec data and metadata stored within a container, a muxer let you store codec data and metadata using the container format chosen, a protocol provides an I/O abstraction to network or system storage.&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit '''libavformat/allformats.c''' and '''libavformat/Makefile'''.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use use directly the protocol name, so for a protocol named '''name''', '''name'''.c.&lt;br /&gt;
If the protocol is tightly bound to a specific demuxer or could be mismatched is advised to use '''name'''proto.c (e.g. rtmpproto.c)&lt;br /&gt;
&lt;br /&gt;
Add&lt;br /&gt;
 OBJS-$(CONFIG_NAME_PROTOCOL)        += nameproto.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a protoco:&lt;br /&gt;
 REGISTER_PROTOCOL(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_protocol to the available protocols.&lt;br /&gt;
&lt;br /&gt;
== Introducing a new protocol ==&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
 &lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Work In Progress]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13714</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13714"/>
		<updated>2011-11-16T02:33:14Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Demuxer structure ==&lt;br /&gt;
&lt;br /&gt;
== Protocol structure ==&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer or a new protocol ==&lt;br /&gt;
&lt;br /&gt;
A demuxer let the application access the codec data and metadata stored within a container, a muxer let you store codec data and metadata using the container format chosen, a protocol provides an I/O abstraction to network or system storage.&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit '''libavformat/allformats.c''' and '''libavformat/Makefile'''.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use use directly the protocol name, so for a protocol named '''name''', '''name'''.c.&lt;br /&gt;
If the protocol is tightly bound to a specific demuxer or could be mismatched is advised to use '''name'''proto.c (e.g. rtmpproto.c)&lt;br /&gt;
&lt;br /&gt;
Add&lt;br /&gt;
 OBJS-$(CONFIG_NAME_PROTOCOL)        += nameproto.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
==== Demuxer specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
==== Protocol specific ====&lt;br /&gt;
&lt;br /&gt;
In order to add a protoco:&lt;br /&gt;
 REGISTER_PROTOCOL(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will add ff_'''name'''_protocol to the available protocols.&lt;br /&gt;
&lt;br /&gt;
== Introducing a new protocol ==&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
 &lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Work In Progress]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13713</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13713"/>
		<updated>2011-11-16T02:18:52Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer ==&lt;br /&gt;
&lt;br /&gt;
A demuxer let the application access the codec data and metadata stored within a container, a muxer let you store codec data and metadata using the container format chosen.&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit '''libavformat/allformats.c''' and '''libavformat/Makefile'''.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Introducing a new protocol ==&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
 &lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Work In Progress]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13712</id>
		<title>Libav</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13712"/>
		<updated>2011-11-16T02:15:02Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Libav is a complete, cross-platform solution to record, convert and stream audio and video.&lt;br /&gt;
&lt;br /&gt;
Libav includes the [[libavcodec]] audio/video codec library, a decoder/encoder codec-suit that forms the basis of most free and open source software multimedia programs.&lt;br /&gt;
&lt;br /&gt;
Libav also contains [[libavformat]], a library for multimedia container formats and [[libavfilter]] for video and audio filtering, [[libswscale]] for colorspace conversion and software scaling.&lt;br /&gt;
&lt;br /&gt;
Among the tools provided [[avplay]] is a simple media player, [[avconv]] is extensive tool to capture, reencode/remux and stream multimedia contents, [[avprobe]] is a quite simple information extractor.&lt;br /&gt;
&lt;br /&gt;
==About the Libav project==&lt;br /&gt;
Libav is a fork of the [[FFmpeg]] project and while it doesn't share the same development practices it shares the same aims.&lt;br /&gt;
&lt;br /&gt;
Libav is developed mostly under unix-like systems, but it can be compiled under most operating systems, including Microsoft Windows. The code is released adopting a seasonal major release cadence, with point releases provided when the need arises or monthly. Security releases are provided for the past 2 mayor releases and the current.&lt;br /&gt;
Libav is free software, released under the GNU Lesser General Public License or GNU General Public License (depending on which sub-libraries one would include).&lt;br /&gt;
&lt;br /&gt;
== Libav Components ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
* ''[[avconv]]'' is a command line tool to convert multimedia streams from a format to another. It supports direct capturing from hardware device and network sources and allow streaming over the network as well.&lt;br /&gt;
* ''[[acserver]]'' is a barebone [[Hypertext Transfer Protocol|HTTP]] ([[Real Time Streaming Protocol|RTSP]] and [[Real Time Messaging Protocol|RTMP]] is being developed) multimedia streaming server for live broadcasts. Time shifting of live broadcast is also supported.&lt;br /&gt;
* ''[[avplay]]'' is a simple media player based on [[Simple DirectMedia Layer|SDL]] and on the FFmpeg libraries.&lt;br /&gt;
* ''[[qt-faststart]]'' is a [[MOV]] atoms reorderer useful to reformat quickly ISO Media streams so the codec information are on the start of the file instead of the end.&lt;br /&gt;
&lt;br /&gt;
=== Libraries ===&lt;br /&gt;
* ''[[libavcodec]]'' is a library containing all the FFmpeg audio/video encoders and decoders. Most codecs were developed from scratch to ensure best performance and high code reusability.&lt;br /&gt;
* ''[[libavformat]]'' is a library containing demuxers and muxers for audio/video container formats. &lt;br /&gt;
* ''[[libavutil]]'' is a helper library containing routines common to different parts of FFmpeg.&lt;br /&gt;
* ''[[libswscale]]'' is a library containing video [http://en.wikipedia.org/wiki/Image_scaling image scaling] routines.&lt;br /&gt;
* ''[[libavfilter]]'' is in development and is an API and library for video and audio filtering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Api compatibility==&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[FFmpeg/Libav Summer Of Code In Space]]&lt;br /&gt;
*[[FFmpeg Wishlist]]&lt;br /&gt;
*[[:Category:Libav Tutorials|Libav Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://libav.org/ official website]&lt;br /&gt;
* [http://git.libav.org/ main repository]&lt;br /&gt;
* [https://github.com/libav Libav on github]&lt;br /&gt;
* [http://wiki.videolan.org/GCodeIn_2011 Google Code In with VideoLan]&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;br /&gt;
[[Category:Multimedia Projects]]&lt;br /&gt;
[[Category:Multimedia Programs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13711</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13711"/>
		<updated>2011-11-15T03:26:57Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* Introducing a new demuxer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer ==&lt;br /&gt;
&lt;br /&gt;
A demuxer let the application access the codec data and metadata stored within a container, a muxer let you store codec data and metadata using the container format chosen.&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit '''libavformat/allformats.c''' and '''libavformat/Makefile'''.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Introducing a new protocol ==&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
 &lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13710</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13710"/>
		<updated>2011-11-15T03:24:59Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Introducing a new protocol ==&lt;br /&gt;
&lt;br /&gt;
Protocols let you access container formats through any kind of storage or delivery system, being that a filesystem access (e.g. pipe, file), a low level network protocol (tcp, udp) or a application level protocol (rtmp, http, tls)&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
 &lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13709</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13709"/>
		<updated>2011-11-15T03:21:43Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* wiring in the demuxer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== Introducing a new demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13708</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13708"/>
		<updated>2011-11-15T03:21:05Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* libavformat/allformats.c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== wiring in the demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, '''name''')&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_'''name'''_demuxer or/and ff_'''name'''_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13707</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13707"/>
		<updated>2011-11-15T03:20:04Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* libavformat/Makefile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== wiring in the demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use, for a format named '''name''', '''name'''enc.c for muxer code and '''name'''dec.c for demuxer code, common code should go in '''name'''.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(DEMUXERNAME, demuxername)&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(MUXERNAME, muxername)&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, name)&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_name_demuxer or/and ff_name_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_demuxer_HOWTO&amp;diff=13706</id>
		<title>Libav demuxer HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_demuxer_HOWTO&amp;diff=13706"/>
		<updated>2011-11-15T03:17:46Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: Libav demuxer HOWTO moved to Libav libavformat HOWTO: Broaden the scope of the howto a little&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Libav libavformat HOWTO]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13705</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13705"/>
		<updated>2011-11-15T03:17:46Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: Libav demuxer HOWTO moved to Libav libavformat HOWTO: Broaden the scope of the howto a little&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== wiring in the demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use 'name'enc.c for muxer code and 'name'dec.c for demuxer code,&lt;br /&gt;
common code should go in name.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(DEMUXERNAME, demuxername)&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(MUXERNAME, muxername)&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, name)&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_name_demuxer or/and ff_name_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13704</id>
		<title>Libav libavformat HOWTO</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav_libavformat_HOWTO&amp;diff=13704"/>
		<updated>2011-11-15T03:16:58Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''please make this page more complete if you can, thanks''&lt;br /&gt;
&lt;br /&gt;
== wiring in the demuxer ==&lt;br /&gt;
&lt;br /&gt;
In order to make available the new demuxer you have to edit libavformat/allformats.c and libavformat/Makefile.&lt;br /&gt;
The former holds a list of available demuxers and protocol and is parsed by configure to generate build system&lt;br /&gt;
variables for it, the latter keeps the actual build directives.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/Makefile ===&lt;br /&gt;
&lt;br /&gt;
The convention regarding the file structure is to use 'name'enc.c for muxer code and 'name'dec.c for demuxer code,&lt;br /&gt;
common code should go in name.c&lt;br /&gt;
&lt;br /&gt;
Add &lt;br /&gt;
 OBJS-$(CONFIG_NAME_MUXER)      += nameenc.o name.o&lt;br /&gt;
 OBJS-$(CONFIG_NAME_DEMUXER)    += namedec.o name.o&lt;br /&gt;
&lt;br /&gt;
to the Makefile in order to build the additional code.&lt;br /&gt;
&lt;br /&gt;
=== libavformat/allformats.c ===&lt;br /&gt;
&lt;br /&gt;
In order to add a demuxer:&lt;br /&gt;
 REGISTER_DEMUXER(DEMUXERNAME, demuxername)&lt;br /&gt;
&lt;br /&gt;
In order to add a muxer:&lt;br /&gt;
 REGISTER_MUXER(MUXERNAME, muxername)&lt;br /&gt;
&lt;br /&gt;
In order to add muxer and demuxer in a single line:&lt;br /&gt;
 REGISTER_MUXDEMU(NAME, name)&lt;br /&gt;
&lt;br /&gt;
The macro will register ff_name_demuxer or/and ff_name_muxer to the available formats.&lt;br /&gt;
&lt;br /&gt;
Modifying allformats.c will trigger a build system warning:&lt;br /&gt;
&lt;br /&gt;
 '''Run configure in the top level directory and make clean, as config.h will be automatically modified'''.&lt;br /&gt;
&lt;br /&gt;
It is advised to run:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make configure&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
In order to build the new code. Make sure you properly edited Makefile and allformats.c .&lt;br /&gt;
&lt;br /&gt;
== Example code ==&lt;br /&gt;
&lt;br /&gt;
This section is merely an overview; please look at an actual demuxer for a more in depth and up to date example.&lt;br /&gt;
libavformat/avformat.h shows the different structure of a muxer (AVOutputFormat) and a demuxer (AVInputFormat)&lt;br /&gt;
&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13703</id>
		<title>Libav</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13703"/>
		<updated>2011-11-14T02:40:20Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Libav is a complete, cross-platform solution to record, convert and stream audio and video.&lt;br /&gt;
&lt;br /&gt;
Libav includes the [[libavcodec]] audio/video codec library, a decoder/encoder codec-suit that forms the basis of most free and open source software multimedia programs.&lt;br /&gt;
&lt;br /&gt;
Libav also contains [[libavformat]], a library for multimedia container formats and [[libavfilter]] for video and audio filtering, [[libswscale]] for colorspace conversion and software scaling.&lt;br /&gt;
&lt;br /&gt;
Among the tools provided [[avplay]] is a simple media player, [[avconv]] is extensive tool to capture, reencode/remux and stream multimedia contents, [[avprobe]] is a quite simple information extractor.&lt;br /&gt;
&lt;br /&gt;
==About the Libav project==&lt;br /&gt;
Libav is a fork of the [[FFmpeg]] project and while it doesn't share the same development practices it shares the same aims.&lt;br /&gt;
&lt;br /&gt;
Libav is developed mostly under unix-like systems, but it can be compiled under most operating systems, including Microsoft Windows. The code is released adopting a seasonal major release cadence, with point releases provided when the need arises or monthly. Security releases are provided for the past 2 mayor releases and the current.&lt;br /&gt;
Libav is free software, released under the GNU Lesser General Public License or GNU General Public License (depending on which sub-libraries one would include).&lt;br /&gt;
&lt;br /&gt;
==Api compatibility==&lt;br /&gt;
WIP&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[FFmpeg/Libav Summer Of Code In Space]]&lt;br /&gt;
*[[FFmpeg Wishlist]]&lt;br /&gt;
*[[:Category:Libav Tutorials|Libav Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://libav.org/ official website]&lt;br /&gt;
* [http://git.libav.org/ main repository]&lt;br /&gt;
* [https://github.com/libav Libav on github]&lt;br /&gt;
* [http://wiki.videolan.org/GCodeIn_2011 Google Code In with VideoLan]&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;br /&gt;
[[Category:Multimedia Projects]]&lt;br /&gt;
[[Category:Multimedia Programs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13702</id>
		<title>Libav</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13702"/>
		<updated>2011-11-14T02:38:55Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Libav is a complete, cross-platform solution to record, convert and stream audio and video.&lt;br /&gt;
&lt;br /&gt;
Libav includes the [[libavcodec]] audio/video codec library, a decoder/encoder codec-suit that forms the basis of most free and open source software multimedia programs.&lt;br /&gt;
&lt;br /&gt;
Libav also contains [[libavformat]], a library for multimedia container formats and [[libavfilter]] for video and audio filtering, [[libswscale]] for colorspace conversion and software scaling.&lt;br /&gt;
&lt;br /&gt;
Among the tools provided [[avplay]] is a simple media player, [[avconv]] is extensive tool to capture, reencode/remux and stream multimedia contents, [[avprobe]] is a quite simple information extractor.&lt;br /&gt;
&lt;br /&gt;
==About the Libav project==&lt;br /&gt;
Libav is a fork of the [[FFmpeg]] project and while it doesn't share the same development practices it shares the same aims.&lt;br /&gt;
&lt;br /&gt;
Libav is developed mostly under unix-like systems, but it can be compiled under most operating systems, including Microsoft Windows. The code is released adopting a seasonal major release cadence, with point releases provided when the need arises or monthly. Security releases are provided for the past 2 mayor releases and the current.&lt;br /&gt;
Libav is free software, released under the GNU Lesser General Public License or GNU General Public License (depending on which sub-libraries one would include).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[FFmpeg/Libav Summer Of Code In Space]]&lt;br /&gt;
*[[FFmpeg Wishlist]]&lt;br /&gt;
*[[:Category:Libav Tutorials|Libav Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://libav.org/ official website]&lt;br /&gt;
* [http://git.libav.org/ main repository]&lt;br /&gt;
* [https://github.com/libav Libav on github]&lt;br /&gt;
* [http://wiki.videolan.org/GCodeIn_2011 Google Code In with VideoLan]&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;br /&gt;
[[Category:Multimedia Projects]]&lt;br /&gt;
[[Category:Multimedia Programs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13701</id>
		<title>Libav</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Libav&amp;diff=13701"/>
		<updated>2011-11-14T02:28:02Z</updated>

		<summary type="html">&lt;p&gt;Lu zero: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Libav is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library.&lt;br /&gt;
&lt;br /&gt;
Libav is a fork of the [[FFmpeg]] project.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://libav.org/ official website]&lt;br /&gt;
* [http://git.libav.org/ main repository]&lt;br /&gt;
* [https://github.com/libav Libav on github]&lt;br /&gt;
* [http://wiki.videolan.org/GCodeIn_2011 Google Code In with VideoLan]&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;br /&gt;
[[Category:Multimedia Projects]]&lt;br /&gt;
[[Category:Multimedia Programs]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>
	</entry>
</feed>