<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki.multimedia.cx/skins/common/feed.css"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.multimedia.cx/index.php?title=Special:Newpages&amp;feed=atom</id>
		<title>MultimediaWiki - New pages [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.multimedia.cx/index.php?title=Special:Newpages&amp;feed=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Special:Newpages"/>
		<updated>2013-06-18T04:33:23Z</updated>
		<subtitle>From MultimediaWiki</subtitle>
		<generator>MediaWiki 1.6.10</generator>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_bug_testing</id>
		<title>FFmpeg bug testing</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_bug_testing"/>
				<updated>2013-04-09T16:22:10Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this document will try to explain the process used by bugtesters and developers to find and fix bugs in ffmpeg.&lt;br /&gt;
&lt;br /&gt;
the process could be used in the future to automate bug testing. or find holes in our FATE coverage.&lt;br /&gt;
&lt;br /&gt;
= example 1 - bug 2414 - wmv2 decoding artifacts =&lt;br /&gt;
*https://ffmpeg.org/trac/ffmpeg/ticket/2414&lt;br /&gt;
*sample: http://samples.ffmpeg.org/asf-wmv/wmv2decerror-short.asf&lt;br /&gt;
&lt;br /&gt;
== initial process ==&lt;br /&gt;
#check if the official decoder/program handles the sample. it could be a broken file.&lt;br /&gt;
##mplayer -vc wmvdmo sample&lt;br /&gt;
#test sample with latest ffplay/ffmpeg.&lt;br /&gt;
##sometimes its already fixed.&lt;br /&gt;
##make sure its not an ffplay-only bug by also testing with ffmpeg.&lt;br /&gt;
#check with old version of ffmpeg to see if it is a regression bug.&lt;br /&gt;
#check if its a demuxer problem by testing with the ffmpeg/mplayer demuxer and official decoder.&lt;br /&gt;
##to test ffmpeg demuxer - mplayer -demuxer lavf -vc wmvdmo&lt;br /&gt;
##to test mplayer demuxer - mplayer -demuxer asf -vc wmvdmo&lt;br /&gt;
&lt;br /&gt;
now that we know its not a demuxer problem, we can move onto debugging the decoder.&lt;br /&gt;
&lt;br /&gt;
=== advanced codec debugging ===&lt;br /&gt;
#test if codec cpu optimizations are not binary identical to the c-version of the codec&lt;br /&gt;
##use ffmpeg -cpuflags 0 , ffmpeg has to be compiled with runtime cpu detection for this to work.&lt;br /&gt;
#test if codec asm version is not binary identical to the c-version of the codec&lt;br /&gt;
## recompile ffmpeg with --disable-asm&lt;br /&gt;
&lt;br /&gt;
since codec also reports &amp;quot;dc overflow&amp;quot; error, check what the decoder does when it encounters this error. it is ffmpeg policy to report these errors, but also to continue decoding, in an effort to play as much of a file as possible.&lt;br /&gt;
&lt;br /&gt;
in this case, msmpeg4dec.c , when encountering a dc overflow error, would return -1.&lt;br /&gt;
#try commenting out this in the source code, recompile, and test your changes to see if the picture changes for the better.&lt;br /&gt;
&lt;br /&gt;
== testing for regressions ==&lt;br /&gt;
#run make fate to check for any regressions in the code&lt;br /&gt;
#test variety of samples relating to the code that has changed. make sure they decode visually and/or framemd5 identical.&lt;br /&gt;
&lt;br /&gt;
== results and conclusion ==&lt;br /&gt;
there seems to be no way to switch asm optimizations on or off at runtime. its useful to have a seperate ffmpeg binary compiled with --disable-asm to test with.&lt;br /&gt;
&lt;br /&gt;
ffmpeg should have some tests to make sure the various arch, asm and cpu optimizations of each codec are binary identical where possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= required programs for bug testing =&lt;br /&gt;
bug testers should have the following installed:&lt;br /&gt;
#latest git ffmpeg binary with asm and cpu runtime detection enabled&lt;br /&gt;
#latest git ffmpeg binary with --disable-asm and cpu runtime detection&lt;br /&gt;
#older version ffmpeg binaries with and without asm&lt;br /&gt;
#official 3rd party players&lt;br /&gt;
##realplayer&lt;br /&gt;
##quicktime&lt;br /&gt;
##windows media player&lt;br /&gt;
#mplayer version with binary codec support&lt;br /&gt;
#vlc&lt;/div&gt;</summary>
		<author><name>Compn</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=MO3</id>
		<title>MO3</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=MO3"/>
				<updated>2013-02-25T20:12:05Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* created by Ian Luck (http://www.un4seen.com/)&lt;br /&gt;
* Amiga / PC modules with lossless, MP3 or OGG compression&lt;br /&gt;
* (un)official specifications and open source decoder : http://lclevy.free.fr/mo3/&lt;/div&gt;</summary>
		<author><name>Lclevy</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013"/>
				<updated>2013-02-22T05:52:50Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* Introduction */ simplify note about project not accepted status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ffmpeg-logo-gsoc.jpg]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
FFmpeg is the universal multimedia toolkit: a complete, cross-platform solution to record, convert, filter and stream audio and video. It includes libavcodec - the leading audio/video codec library.&lt;br /&gt;
&lt;br /&gt;
[https://developers.google.com/open-source/soc/ Google Summer of Code (GSoC)] is a program that offers students stipends to write code for open source projects. Through the guidance of mentors, students gain valuable experience interacting with and coding for open source projects like FFmpeg. Additionally, the project and its users benefit from code created from students who often continue contributing as developers. FFmpeg participated to several past editions ([[FFmpeg Summer Of Code 2006|2006]], [[FFmpeg Summer Of Code 2007|2007]], [[FFmpeg Summer Of Code 2008|2008]], [[FFmpeg Summer Of Code 2009|2009]], [[FFmpeg Summer Of Code 2010|2010]], and [[FFmpeg / Libav Summer Of Code 2011|2011]]), and we are looking forward to being involved this year. &lt;br /&gt;
&lt;br /&gt;
This is our ideas page for [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Google Summer of Code 2013].&lt;br /&gt;
&lt;br /&gt;
'''FFmpeg has not been accepted this year''', so if you want to do any of the qualification tasks and projects, they are just for fun.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
0. '''Get to know FFmpeg.''' If you are a student and interested in contributing to an FFmpeg GSoC project it is recommended to start by subscribing to the [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel] mailing-list, visiting our IRC channels (''#ffmpeg-devel'' and ''#ffmpeg''), and exploring the codebase and the development workflow. Feel free to [[#Contacting_FFmpeg|contact us]] if you have any questions.&lt;br /&gt;
&lt;br /&gt;
1. '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentors have already volunteered. Unmentored projects are additional ideas that you may consider, but you will have to contact us to find a mentor. You may also propose your own project that may be a better match for your interest and skill level.&lt;br /&gt;
&lt;br /&gt;
2. '''Contact us.''' If you find a project that you are interested in then get in touch with the community and let us know. In case you want to work on a qualification task, you should ask the appointed mentors so that the task can be claimed.&lt;br /&gt;
&lt;br /&gt;
3. '''Apply.''' Student proposal period begins April 22, 2013 at 19:00 UTC and ends May 3rd at 19:00 UTC. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page#2._What_is_the_program_timeline GSoC timeline] for additional information.&lt;br /&gt;
&lt;br /&gt;
=== Qualification Tasks ===&lt;br /&gt;
&lt;br /&gt;
In order to get accepted you will be requested to complete a small task in the area you want to contribute. FFmpeg GSoC projects can be challenging, and a qualification task will show us that you are motivated and have the potential to finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the appointed mentors for assistance on getting a related qualification task or if you want to propose your own. See a list of [[Small FFmpeg Tasks]] or browse the [https://ffmpeg.org/trac/ffmpeg FFmpeg Bug Tracker] for qualification task ideas.&lt;br /&gt;
&lt;br /&gt;
=== Contacting FFmpeg ===&lt;br /&gt;
&lt;br /&gt;
If you have questions or comments feel free to contact us via our mailing list, IRC channel, or e-mail one of the FFmpeg GSoC admins:&lt;br /&gt;
&lt;br /&gt;
* '''Mailing-list:''' [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel]&lt;br /&gt;
* '''IRC:''' ''#ffmpeg-devel'' on Freenode&lt;br /&gt;
* '''FFmpeg GSoC Admins:''' [[User:Stefanosa|Stefano Sabatini]] and [[User:Llogan|Lou Logan]]&lt;br /&gt;
&lt;br /&gt;
You can also contact a mentor directly if you have questions specifically related to one of the projects listed on this page.&lt;br /&gt;
&lt;br /&gt;
= Mentored Projects =&lt;br /&gt;
&lt;br /&gt;
This section lists well-defined projects that have one or more available mentors. If you are new to FFmpeg, and have relatively little experience with multimedia, you should favor a mentored project rather than propose your own. Contact the appointed mentor(s) to get more information about the project and the requested qualification task.&lt;br /&gt;
&lt;br /&gt;
== H.264 Multiview Video Coding (MVC) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:Mmspg-epfl-ch-double-camera.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' MVC samples exist and the codec is used on Blu-ray media, but FFmpeg is missing a decoder. Since this project also consists of some changes in the current architecture, it is especially important that this project is discussed on the [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel mailing list].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Create MVC decoder and add a test for the FFmpeg Automated Testing Environment (FATE).&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Perform work that demonstrates understanding of MVC and that is a subpart of the whole MVC implementation.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' Kieran Kunhya (''kierank'' on IRC)&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:Animated PNG example bouncing beach ball.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* APNG demuxer&lt;br /&gt;
** implement robust probing:&lt;br /&gt;
*** PNG images are not misdetected as APNG animations&lt;br /&gt;
*** APNG animations are not misdetected as PNG images&lt;br /&gt;
** splits stream into sensible packets (so they can be easily reused in APNG muxer)&lt;br /&gt;
** survives fuzzing (zzuf)&lt;br /&gt;
** add FATE coverage, coverage should be at least 70%&lt;br /&gt;
** test code under valgrind so no invalid reads/writes happen&lt;br /&gt;
&lt;br /&gt;
* APNG decoder&lt;br /&gt;
** use existing PNG decoder code (write decoder in same file)&lt;br /&gt;
** implement parsing of all APNG chunks (acTL, fcTL, fdAT)&lt;br /&gt;
** error handling&lt;br /&gt;
** survives fuzzing (zzuf) &lt;br /&gt;
** add test for FATE, coverage should be at least 75%&lt;br /&gt;
** CRC checksum validation&lt;br /&gt;
** test code under valgrind so no invalid reads/writes happen&lt;br /&gt;
&lt;br /&gt;
* APNG muxer &amp;amp;&amp;amp; APNG encoder&lt;br /&gt;
** use existing PNG encoder code (write encoder in same file)&lt;br /&gt;
** write compliant files, make sure they play correctly in major web browsers that support APNG&lt;br /&gt;
** add test for FATE&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe &amp;amp; image demuxer&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' on IRC)&lt;br /&gt;
&lt;br /&gt;
== Misc Libavfilter extension ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:Lavfi-gsoc-filter-vintage-illustration.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Libavfilter is the FFmpeg filtering library. It currently supports audio and video filtering and generation support. This work may focus on porting, fixing, extending, or writing new audio and video filters from scratch. &lt;br /&gt;
&lt;br /&gt;
Candidate filters for porting may be the remaining MPlayer filters currently supported through the mp wrapper, libaf MPlayer filters, and filters from other frameworks (e.g. mjpegtools, transcode, avisynth, virtualdub, etc.). In case of mp ports, the student should verify that the new filter produces the same output and is not slower.&lt;br /&gt;
&lt;br /&gt;
Some ideas for more filters:&lt;br /&gt;
* a frequency filtering domain filter relying on the FFT utils in libavcodec&lt;br /&gt;
* a controller filter which allows to send commands to other filters (e.g. to adjust volume, contrast, etc.), e.g. like the sendcmd filter but through an interactive GUI&lt;br /&gt;
* a lua scripting filter, which allows to implement filtering custom logic in lua&lt;br /&gt;
&lt;br /&gt;
For more ideas check:&lt;br /&gt;
[https://ffmpeg.org/trac/ffmpeg/query?status=new&amp;amp;status=open&amp;amp;status=reopened&amp;amp;component=avfilter&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=component&amp;amp;col=version&amp;amp;order=priority trac libavfilter tickets].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design when required.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems. Some background on DSP and image/sound processing techniques would be a bonus but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' write or port one or more filters&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' on IRC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg has been working on improving its subtitles support recently, notably by adding the support for various text subtitles and various hardsubbing (burning the subtitles onto the video) facilities. While the theme may sound relatively simple compared to audio/video signal processing, the project carries an historical burden not easy to deal with, and introduces various issues very specific to its sparse form.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Subtitles-sensei.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Add support for new subtitles formats. Example: a demuxer for .SUP files, just like VobSub but for Blu-Ray, or a VobSub muxer.&lt;br /&gt;
* Improve text subtitles decoders. Typically, this can be supporting advanced markup features in SAMI or WebVTT.&lt;br /&gt;
* Update the API to get rid of the clumsy internal text representation of styles&lt;br /&gt;
* Proper integration of subtitles into libavfilter. This is the ultimate goal, as it will notably allow a complete subtitles rendering for applications such as ffplay.&lt;br /&gt;
* BONUS: if everything goes well, the student will be allowed to add basic support for teletext&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems. Some background in fansubbing area (notably ASS experience) would be a bonus but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' write one subtitles demuxer and decoder (for example support for Spruce subtitles format). This is in order to make sure the subtitles chain is understood.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Nicolas George (''Cigaes'' on IRC)&lt;br /&gt;
&lt;br /&gt;
== Postproc optimizations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:PostProc.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains libpostproc, which is used to postprocess 8x8 DCT-MC based video and images (jpeg, mpeg-1/2/4, H.263 among others). The code though has been written a long time ago and its SIMD optimizations need to be updated to what modern CPUs support (AVX2 and SSE2+).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Convert all gcc inline asm in libpostproc to YASM.&lt;br /&gt;
* Restructure the code so that it works with block sizes compatible with modern SIMD.&lt;br /&gt;
* Add Integer SSE2 and AVX2 optimizations for each existing MMX/MMX2/3dnow optimization in libpostproc.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, good x86 assembly coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' convert 1 or 2 MMX2 functions to SSE2 and AVX2.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' on IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayer RGB colorspaces ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:350px-Bayer_pattern_on_sensor.svg.png ]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Several image and video format store pixels using Bayer-pattern colorspaces. Supporting these format would broaden FFmpeg's applicability to RAW still and video photography processing.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Rebase existing patches&lt;br /&gt;
* Implement high quality bayer transformations in libswscale (plain C)&lt;br /&gt;
* Add bayer formats to the libavutil pixfmt enumeration routines&lt;br /&gt;
* SIMD optimizations of the libswscale transformations&lt;br /&gt;
* Complete PhotoCINE demuxer to support Bayer format; (or another format of your choosing)&lt;br /&gt;
&lt;br /&gt;
Optional goodies:&lt;br /&gt;
* Extend TIFF decoder to support DNG-Bayer format&lt;br /&gt;
* Support a popular proprietary camera format (many to choose from; see dcraw project)&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites''': C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task''': Implement a simple and working Bayer-&amp;gt;RGB transform in libswscale&lt;br /&gt;
&lt;br /&gt;
'''Mentor''': [[User:Suxen_drol|Peter Ross]] (''pross-au'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor''': [[User:Michael|Michael Niedermayer]] (''michaelni'' on IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPEG-4 ALS encoder ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;http://upload.wikimedia.org/wikipedia/commons/e/e9/ATunes.png&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[http://commons.wikimedia.org/wiki/File%3AATunes.png]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' &lt;br /&gt;
A MPEG-4 ALS decoder was implemented several years ago but an encoder is still missing in the official codebase. A rudimentary encoder has already been written and is available on [https://github.com/justinruggles/FFmpeg-alsenc.git github]. For this project, that encoder is first to be updated to fit into the current codebase of FFmpeg and to be tested for conformance using the [http://www.nue.tu-berlin.de/menue/forschung/projekte/beendete_projekte/mpeg-4_audio_lossless_coding_als/parameter/en/#230252 reference codec and specifications]. Second, the encoder is to be brought through the usual reviewing process to hit the codebase at the end of the project.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' &lt;br /&gt;
&lt;br /&gt;
* Update the existing encoder to fit into the current codebase.&lt;br /&gt;
* Ensure conformance of the encoder by verifying using the reference codec and generate a test case for FATE.&lt;br /&gt;
* Ensure the FFmpeg decoder processes all generated files without warnings.&lt;br /&gt;
* Enhance the rudimentary feature set of the encoder.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems. A certain interest in audio coding and/or knowledge about the FFmpeg codebase could be beneficial.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add floating point support to MPEG-4 ALS decoder&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' on IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hardware Acceleration (hwaccel) API v2 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:Hardware.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg supports hardware accelerated decoding through the internal hwacel API. Currently supported system hardware acceleration APIs are VA-API (Linux), DXVA2 (Windows) and VDA (MacOS X). However, the current approach requires client applications to allocate the underlying resources (e.g. hardware surfaces and context) themselves, and handing them over to FFmpeg. This incurs a few limitations: this is not scalable to new codecs, i.e. this requires new tokens for each newly supported codec; this incurs extra work in the client application, which tends to be duplicated over several client applications; and this prevents efficient fallback to software decoding mode if the hardware cannot handle a particular codec specification.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to revamp the FFmpeg Hardware Acceleration API so that hardware resources are allocated and managed in the library, thus requiring the client application to only provide a single hardware context/device handle; provide a way to fallback early to software decoding mode if the underlying hardware won't be able to handle the bitstream; and make it possible to select a hardware accelerator by ID and not polluting the PixelFormats namespace.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* FFmpeg core library (libavcodec):&lt;br /&gt;
** Core API extensions and improvements&lt;br /&gt;
*** Add open/close hooks in a way that is backwards compatible with hwaccel v1 enabled applications&lt;br /&gt;
*** Add new tokens describing hardware accelerators&lt;br /&gt;
*** Add new flags exposing HW capabilities like download/upload&lt;br /&gt;
*** Investigate the benefits or impacts to provide a global map/unmap capability to FFmpeg video buffers&lt;br /&gt;
** Port hwaccels to v2 infrastructure&lt;br /&gt;
*** Port VA-API decoders to v2 infrastructure&lt;br /&gt;
*** Validate that VA-API decoders still work with existing applications supporting hwaccel v1&lt;br /&gt;
*** Provide download capability through ''vaGetImage()''&lt;br /&gt;
*** Validate that ffplay can support this feature with minor changes, and definitely no change to the existing SDL renderer&lt;br /&gt;
*** Port VDPAU decoders to hwaccel v2 (optional), and investigate ways to preserve compatibility with older applications&lt;br /&gt;
&lt;br /&gt;
* FFmpeg applications:&lt;br /&gt;
** Integrate hardware acceleration into ffplay&lt;br /&gt;
*** Create a video-output (VO) infrastructure to ffplay&lt;br /&gt;
*** Port the SDL renderer to the new VO infrastructure&lt;br /&gt;
*** Add support for VA-API: VA renderer through ''vaPutSurface()'', add -hwaccel option to select &amp;quot;vaapi&amp;quot; renderer&lt;br /&gt;
*** Add support for VDPAU (optional): VDPAU renderer through ''VdpPresentationQueueDisplay()''&lt;br /&gt;
** Integrate hardware acceleration into ffmpeg&lt;br /&gt;
*** Add support for VA-API: use the VA/DRM API for headless (no-X display) decoding, use libudev to determine the device to use&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems, hardware supporting VA-API.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the Hardware Acceleration (hwaccel) API, or to its related users. e.g. port VDPAU acceleration to use hwaccel, add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Hendrik Leppkes (''nevcairiel'' on IRC) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hardware Accelerated Video Encoding with VA-API ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg already supports hardware accelerated decoding for multiple codecs but still lacks support for hardware accelerated encoding. The aim of the project is to add support for encoding with VA-API specifically, while keeping a generic enough approach in mind so that other hardware accelerators (TI-DSP, CUDA?) could be supported as well. This means that new ''hwaccel'' hooks are needed and two operational modes are possible: either ''(i)'' driver or hardware pack headers themselves, or ''(ii)'' lattitude is left to perform this task at the FFmpeg library level.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Allow MPEG-2 and H.264 encoding with VA-API, while supporting variable bitrate (VBR) by default, and allowing alternate methods like constant bitrate (CBR) or constant QP (CQP) where appropriate or requested.&lt;br /&gt;
* MPEG-2 encoding:&lt;br /&gt;
** Add basic encoding with I/P frames (handle the ''-g'' option)&lt;br /&gt;
** Add support for B frames (handle the ''-bf'' option)&lt;br /&gt;
** Add support for constant bitrate (CBR, i.e. ''maxrate == bitrate'' and ''bufsize'' set)&lt;br /&gt;
** (Optionally) add support for interlaced contents&lt;br /&gt;
* H.264 encoding:&lt;br /&gt;
** Add basic encoding with I/P frames (handle the ''-g'' option)&lt;br /&gt;
** Add support for B frames (handle the ''-bf'' option)&lt;br /&gt;
** Add support for constant bitrate (CBR, i.e. ''maxrate == bitrate'' and ''bufsize'' set)&lt;br /&gt;
** Add support for constant QP (CQP, i.e. handle the ''-cqp'' option)&lt;br /&gt;
** Add support for more than one reference frame, while providing/using API to query the hardware capabilities&lt;br /&gt;
** Work on HRD conformance. May require to write an independent tool to assess that&lt;br /&gt;
** (Optionally) add configurability of the motion estimatation method to use. Define new types for HW accelerated encoding with at least two levels/hints for the accelerator.&lt;br /&gt;
* FFmpeg applications:&lt;br /&gt;
** Define common hwaccel interface for encoding&lt;br /&gt;
** Add initial support for hardware accelerated encoding to the ''ffmpeg'' application&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems, hardware supporting VA-API for encoding.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the Hardware Acceleration (hwaccel) API, or to its related users. e.g. port VDPAU acceleration to use hwaccel, add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Tushar Gohad&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AAC Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains an AAC encoder and decoder, both of them can be improved in various ways. This is enough work for more than one GSoC project, so one part of your submission would be to define on which task exactly you want to work.&lt;br /&gt;
* AAC LD decoder&lt;br /&gt;
* AAC BSAC decoder: This has already been started, but the existing decoder still fails on many samples&lt;br /&gt;
* AAC SSR decoder&lt;br /&gt;
* AAC 960/120 MDCT window&lt;br /&gt;
* AAC multi-channel encoding&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' See the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head or fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' on IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DTS / DCA Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder.&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://ffmpeg.org/trac/ffmpeg/ticket/1920 #1920]&lt;br /&gt;
** Add support for X96 extension (96khz)&lt;br /&gt;
** Add support for XLL extension (lossless)&lt;br /&gt;
** Add support for pure DTS-HD streams that do not contain a DTS core&lt;br /&gt;
** Add support for multiple assets&lt;br /&gt;
** Add support for LBR extension&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan'' on IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' on IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Unmentored Projects =&lt;br /&gt;
&lt;br /&gt;
This is a list of projects that students are encouraged to consider if a mentored project is unavailable or not within the students skill or interests. The student will have to find a mentor for the project. A student can also [[#Your_Own_Idea|propose their own project]].&lt;br /&gt;
&lt;br /&gt;
== glplay ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatleft&amp;quot;&amp;gt;[[Image:Opengl_logo.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The SDL library that is used by FFplay has some deficiencies, adding OpenGL output to FFplay should allow for better performance (and less bugs at least for some hardware / driver combinations). This could be a new application (glplay), but it is probably simpler to extend ffplay to use OpenGL. You can use code from MPlayer's OpenGL vo module which may be relicensed under the LGPL.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBD Backup: Reimar Döffinger&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TrueHD encoder ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg currently does not support encoding to one of the lossless audio formats used on Bluray discs. This task consists of implementing a TrueHD encoder that allows to losslessly encode audio to play it on hardware devices capable of TrueHD decoding.&lt;br /&gt;
&lt;br /&gt;
== Opus decoder ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;[[Image:Opus.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Opus decoding is currently supported through the external libopus library&lt;br /&gt;
* Write a native decoder, continue working on the existing unfinished implementation&lt;br /&gt;
A possible qualification task is to port the existing incomplete decoder to current git head and improve it to show that you are capable of working on this task.&lt;br /&gt;
&lt;br /&gt;
== VC-1 interlaced ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The FFmpeg VC-1 decoder has improved over the years, but many samples are still not decoded bit-exact and real-world interlaced streams typically show artefacts.&lt;br /&gt;
* Implement missing interlace features&lt;br /&gt;
* Make more reference samples bit-exact&lt;br /&gt;
As a qualification task, you should try to find a bug in the current decoder implementation and fix it.&lt;br /&gt;
&lt;br /&gt;
== JPEG 2000 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatleft&amp;quot;&amp;gt;[[Image:Jpeg2000.jpg]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains an experimental native JPEG 2000 encoder and decoder. Both are missing many features, see also the FFmpeg bug tracker for some unsupported samples.&lt;br /&gt;
Work on an issue (for example from the bug tracker) as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VP7 ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Not many [http://samples.mplayerhq.hu/V-codecs/VP7/ VP7 samples] are in the wild, but no open-source decoder exists although a [http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf specification] exists. Write a decoder that reuses as much as possible of existing FFmpeg code: it is likely that functions of the existing decoders for On2-based formats will be useful.&lt;br /&gt;
&lt;br /&gt;
== VP8L ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' [[VP8L]] is a lossless format used in WebP. There is no support for this in FFmpeg.&lt;br /&gt;
&lt;br /&gt;
== Your own idea ==&lt;br /&gt;
&lt;br /&gt;
A student can propose a project. Ideas can also be found by browsing bugs and feature requests on our [https://ffmpeg.org/trac/ffmpeg/ bug tracker]. The work should last the majority of the GSoC duration, the task must be approved by the developers, and a mentor must be assigned.&lt;br /&gt;
&lt;br /&gt;
Students can discuss an idea in the [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel mailing-list], the #ffmpeg-devel IRC channel, or contact the FFmpeg GSoC admins [[User:Stefanosa|Stefano Sabatini]] or [[User:Llogan|Lou Logan]] for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Llogan</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Otrkey</id>
		<title>Otrkey</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Otrkey"/>
				<updated>2013-02-14T02:17:28Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Website: http://www.onlinetvrecorder.com/&lt;br /&gt;
* Samples: http://otr.datenkeller.at/  http://otr.dwolp.de/&lt;br /&gt;
* (public domain?) Decoder: http://pyropeter.github.com/otrtool/&lt;br /&gt;
&lt;br /&gt;
.otrkey files are encrypted video files from the onlinetvrecorder website.&lt;br /&gt;
the files are publically available, but require a key to decrypt them.&lt;br /&gt;
&lt;br /&gt;
similar to wmv drm, it stores a key inside the file and requires a second key from the website.&lt;br /&gt;
&lt;br /&gt;
A gpu brute force cracker may be able to decrypt such files.&lt;/div&gt;</summary>
		<author><name>Compn</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013</id>
		<title>Libav Summer Of Code 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav_Summer_Of_Code_2013"/>
				<updated>2013-02-12T00:08:36Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* 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>http://wiki.multimedia.cx/index.php?title=VP9</id>
		<title>VP9</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=VP9"/>
				<updated>2013-01-29T07:42:14Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: initial information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP90&lt;br /&gt;
* Description: ???&lt;br /&gt;
* Code : http://git.chromium.org/gitweb/?p=webm/libvpx.git;a=summary&lt;br /&gt;
* Samples: ???&lt;br /&gt;
&lt;br /&gt;
VP9 is an open and royalty free video compression standard being developed by Google. VP9 had earlier development names of Next Gen Open Video (NGOV) and VP-Next. VP9 is a successor to VP8.&lt;br /&gt;
&lt;br /&gt;
A test (not pretending to be scientific or reliable) from 17th January 2013 is present in the discussion thread&lt;br /&gt;
http://forum.doom9.org/showthread.php?p=1610941&lt;/div&gt;</summary>
		<author><name>R1</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Daala</id>
		<title>Daala</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Daala"/>
				<updated>2013-01-29T07:28:02Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: initial information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: ?&lt;br /&gt;
* Description: https://wiki.xiph.org/Daala&lt;br /&gt;
* Code in progress : git clone https://git.xiph.org/daala.git&lt;br /&gt;
* Samples: none yet&lt;br /&gt;
&lt;br /&gt;
Daala is the current working name of a next generation video codec. The effort is a collaboration between Mozilla Foundation, Xiph.Org Foundation and other contributors.&lt;br /&gt;
&lt;br /&gt;
The goal of the project is to provide a free to implement, use and distribute digital media format and reference implementation with technical performance superior to h.265.&lt;br /&gt;
&lt;br /&gt;
The development suffered at the end of 2012 due to the developers being involved in short term [[Opus]]-related activities. The availability of [[VP9]] since January 2013 also may influence the amount of resources being allotted to Daala.&lt;/div&gt;</summary>
		<author><name>R1</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Dalet_Digital_Media_Solutions</id>
		<title>Dalet Digital Media Solutions</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Dalet_Digital_Media_Solutions"/>
				<updated>2013-01-09T06:16:50Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Website: http://www.dalet.com/&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimedia-related Companies]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=AJA_Kona_10-bit_RGB_Codec</id>
		<title>AJA Kona 10-bit RGB Codec</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=AJA_Kona_10-bit_RGB_Codec"/>
				<updated>2013-01-08T07:02:53Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCCs: R10k, R10g&lt;br /&gt;
* Company: [[AJA Video Systems]]&lt;br /&gt;
&lt;br /&gt;
This is a raw 10-bit RGB video codec. Each red, green, and blue color component is 10 bits wide. RGB pixels contain 30 bits of information and are stored in 32-bit blocks (so there are 2 unused bits). Each group of 32 bits is laid out as:&lt;br /&gt;
&lt;br /&gt;
 rrrrrrrr rrgggggg ggggbbbb bbbbbbxx&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Intermediate Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Internet_Engineering_Task_Force</id>
		<title>Internet Engineering Task Force</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Internet_Engineering_Task_Force"/>
				<updated>2013-01-03T06:11:27Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: more standards; formatting reorg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Website: http://www.ietf.org/&lt;br /&gt;
&lt;br /&gt;
The Internet Engineering Task Force (IETF) is responsible for developing internet standards. The IETF publishes standards for a variety of multimedia technologies:&lt;br /&gt;
&lt;br /&gt;
* RFC 3533: [[Ogg]] Container Format&lt;br /&gt;
* RFC 6716: [[Opus]] Audio Codec&lt;br /&gt;
* RFC 3550: [[RTP]]&lt;br /&gt;
* RFC 5215: [[RTP]] Payload Format for [[Vorbis]] Encoded Audio&lt;br /&gt;
* RFC 2326: [[RTSP]]&lt;br /&gt;
* RFC 6386: [[VP8]] Video Codec&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimedia-related Companies]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Bink_Video_2</id>
		<title>Bink Video 2</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Bink_Video_2"/>
				<updated>2012-11-17T14:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: it's missing, obviously&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: KB2d (in [[Bink Container]])&lt;br /&gt;
* Company: [[RAD Game Tools]]&lt;br /&gt;
* Samples: ''ADD ME''&lt;br /&gt;
&lt;br /&gt;
Bink Video 2 is a successor to [[Bink Video]].&lt;br /&gt;
&lt;br /&gt;
(De)Compression details are presently unknown.&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=VP8L</id>
		<title>VP8L</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=VP8L"/>
				<updated>2012-10-29T01:49:49Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Company: [[Google]]&lt;br /&gt;
* Specification: https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification&lt;br /&gt;
* Sample implementation: https://code.google.com/p/webm/source/browse/src/dec/vp8l.c?repo=libwebp&amp;amp;r=2fc130157767e529fedd42fad0c70c13804058ab&lt;br /&gt;
&lt;br /&gt;
From Google's [[WebP]] page: &amp;quot;Lossless WebP compression uses already seen image fragments in order to exactly reconstruct new pixels. It can also use a local palette if no interesting match is found. This palette is continuously updated to re-use recent colors. This compression mode is named &amp;quot;VP8L&amp;quot; and shares some common features with the so-called LZ77 compression algorithm.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Alex</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=MUSICompress</id>
		<title>MUSICompress</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=MUSICompress"/>
				<updated>2012-10-29T01:16:27Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: mcp&lt;br /&gt;
* Company: Soundspace Audio&lt;br /&gt;
* Homepage: [http://members.aol.com/sndspace Soundspace]&lt;br /&gt;
* [https://groups.google.com/forum/?fromgroups=#!topic/comp.music.research/uCu3xAi2k7o Introductory letter from author]&lt;br /&gt;
* Publication: A. Wegener, “MUSICompress: Lossless, lowMIPS audio compression in software and hardware”, in Proc. Int. Conf. Signal Processing  Applications and Technology, San Diego, CA,  USA, 1997 September 14-17.&lt;br /&gt;
&lt;br /&gt;
Implementation also called WaveZip.&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]] &lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Alex</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Sonarc</id>
		<title>Sonarc</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Sonarc"/>
				<updated>2012-10-29T01:06:11Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Description: [http://www.speech.cs.cmu.edu/comp.speech/Section3/Software/sonarc.html Sonarc]&lt;br /&gt;
&lt;br /&gt;
[[Category: Audio Codecs]]&lt;br /&gt;
[[Category: Lossless Audio Codecs]]&lt;br /&gt;
[[Category: Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Alex</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=WavArc</id>
		<title>WavArc</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=WavArc"/>
				<updated>2012-10-29T01:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Description: [http://www.firstpr.com.au/audiocomp/lossless/wavarc/ WavArc]&lt;br /&gt;
&lt;br /&gt;
[[Category: Audio Codecs]]&lt;br /&gt;
[[Category: Lossless Audio Codecs]]&lt;br /&gt;
[[Category: Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Alex</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Opus</id>
		<title>Opus</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Opus"/>
				<updated>2012-09-14T18:08:07Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Company: [[Xiph]], IETF&lt;br /&gt;
* Extension: .opus&lt;br /&gt;
* Specification (codec): https://tools.ietf.org/html/rfc6716&lt;br /&gt;
* Specification (Ogg encapsulation): https://tools.ietf.org/html/draft-terriberry-oggopus-01&lt;br /&gt;
* Reference implementation: http://www.opus-codec.org/downloads/&lt;br /&gt;
&lt;br /&gt;
Open standard for low-latency, scalable lossy audio coding based on the speech-oriented [[SILK]] codec and the low-latency [[CELT]] codec. Opus can transition between a linear prediction codec at low bitrates and a transform codec at high bitrates and supports a hybrid mode for a small bitrate range. Opus defaults to a latency that's 1/10th that of earlier music codecs (20ms vs. 200ms), making it possible for use in VoIP, and yet performs better in listening tests.&lt;br /&gt;
&lt;br /&gt;
Note that Opus does not seem to perform better than [[CELT]] for music at bitrates over 75 kbit (http://www.hydrogenaudio.org/forums/index.php?showtopic=97913&amp;amp;st=0). This means that the unconditional merge of [[CELT]] into Opus doubled the complexity (both code size and CPU usage) even for applications which do not benefit from the addition.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.opus-codec.org/&lt;br /&gt;
* https://wiki.xiph.org/OpusFAQ&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:MDCT Audio Codecs]]&lt;br /&gt;
[[Category:Vocoders]]&lt;br /&gt;
[[Category:Multichannel Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Fatbag</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Xact</id>
		<title>Xact</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Xact"/>
				<updated>2012-08-17T04:29:07Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: It's also a Multimedia API, I guess&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: xwb, xsb, xgs&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Website: http://msdn.microsoft.com/en-us/library/bb174772.aspx&lt;br /&gt;
* Wikipedia article: https://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool&lt;br /&gt;
&lt;br /&gt;
Cross-platform Audio Creation Tool (XACT) is a audio framework released as part of the DirectX SDK.&lt;br /&gt;
&lt;br /&gt;
Distributed XACT projects consist of three file formats:&lt;br /&gt;
&lt;br /&gt;
== Wave Banks (.xwb) ==&lt;br /&gt;
A file format containing a collection of waves&lt;br /&gt;
* Waves - the raw wave data in [[Microsoft Wave|WAV]], [[Audio Interchange File Format|AIFF]], [[Windows Media Audio 9|WMA]], [[Microsoft xWMA|xWMA]] or [[XMA]] formats&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [http://aluigi.altervista.org/papers.htm#unxwb unxwb]&lt;br /&gt;
* [https://github.com/mono/MonoGame/blob/develop3d/MonoGame.Framework/Audio/WaveBank.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
== Sound Banks (.xsb) ==&lt;br /&gt;
A collection of sounds and cues&lt;br /&gt;
&lt;br /&gt;
* Sounds - a sound has one or more waves together with properties like volume and pitch. Sounds are made up of tracks.&lt;br /&gt;
** Tracks - tracks are made up of events E.g. the simplest track has a Play Wave event&lt;br /&gt;
** Events - various actions that take place within a track. Actions include: Play, Stop, Set Volume, Set Pitch etc.&lt;br /&gt;
* Cues - a cue is used in code to trigger sounds. Each cue is made up of one or more sounds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sturct SoundBank {&lt;br /&gt;
    struct SoundBankHeader header;&lt;br /&gt;
&lt;br /&gt;
    struct WaveBankNameTableEntry[header.numWaveBanks] wavebankNames;&lt;br /&gt;
    struct SoundEntry[header.numSounds] sounds;&lt;br /&gt;
    struct SimpleCueEntry[header.numSimpleCues] simpleCues;&lt;br /&gt;
    struct ComplexCueEntry[header.numComplexCues] complexCues;&lt;br /&gt;
&lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct SoundBankHeader {&lt;br /&gt;
    uint32_t magic; //               &amp;quot;SDBK&amp;quot;&lt;br /&gt;
    uint16_t toolVersion; //         0x2E&lt;br /&gt;
    uint16_t formatVersion; //       0x2B&lt;br /&gt;
    uint16_t crc; //      fcs16 checksum of all following data&lt;br /&gt;
    uint32_t lastModifiedLow;&lt;br /&gt;
    uint32_t lastModifiedHigh;&lt;br /&gt;
    uint8_t platform; //0x12         ??&lt;br /&gt;
    uint16_t numSimpleCues; //0x13&lt;br /&gt;
    uint16_t numComplexCues; //0x15&lt;br /&gt;
    uint16_t unkn3; //0x17&lt;br /&gt;
    uint16_t numTotalCues; //0x19    ??&lt;br /&gt;
    uint8_t numWaveBanks; //0x1b&lt;br /&gt;
    uint16_t numSounds; //0x1c&lt;br /&gt;
    uint32_t cueNameTableLen; //0x1e&lt;br /&gt;
    &lt;br /&gt;
    uint32_t simpleCuesOffset; //0x22&lt;br /&gt;
    uint32_t complexCuesOffset; //0x26&lt;br /&gt;
    uint32_t cueNamesOffset; //0x2a&lt;br /&gt;
    uint32_t unknOffset; //0x2e&lt;br /&gt;
    uint32_t variationTablesOffset; //0x32&lt;br /&gt;
    uint32_t unknOffset2; //0x36&lt;br /&gt;
    uint32_t waveBankNameTableOffset; //0x3a&lt;br /&gt;
    uint32_t cueNameHashTableOffset; //0x3e    16-bit hashes each&lt;br /&gt;
    uint32_t cueNameHashValsOffset; //0x42&lt;br /&gt;
    uint32_t soundsOffset; //0x46&lt;br /&gt;
    &lt;br /&gt;
    char name[64];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct WaveBankNameTableEntry {&lt;br /&gt;
    char name[64];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundEntry {&lt;br /&gt;
    uint8_t flags; //0x0&lt;br /&gt;
    uint16_t category; //0x1      ???&lt;br /&gt;
    uint8_t unkn2; //0x3&lt;br /&gt;
    uint16_t volume; //0x4 maybe pitch&lt;br /&gt;
    uint8_t unkn3; //0x6&lt;br /&gt;
    uint16_t entryLength; //0x7&lt;br /&gt;
    &lt;br /&gt;
    if flags 1 (complex sound):&lt;br /&gt;
        //&amp;quot;clips&amp;quot;&lt;br /&gt;
        uint8_t numClips; //0x9&lt;br /&gt;
    else:&lt;br /&gt;
        uint16_t trackIndex; //0x9&lt;br /&gt;
        uint8_t waveBankIndex; //0x11&lt;br /&gt;
&lt;br /&gt;
    if flags in 2/4/8:&lt;br /&gt;
        uint16_t extraLen; //0x12&lt;br /&gt;
        //then a rpc table for each flag&lt;br /&gt;
    if flags in 16:&lt;br /&gt;
        uint16_t extraLen; //0x12     7&lt;br /&gt;
&lt;br /&gt;
        //dsp preset table&lt;br /&gt;
         uint8_t num;&lt;br /&gt;
         uint32_t unkn[num];&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    if flags 1:&lt;br /&gt;
        struct {&lt;br /&gt;
            uint8_t unkn;&lt;br /&gt;
            uint32_t clipOffset;&lt;br /&gt;
            uint32_t unkn2;&lt;br /&gt;
        }[numClips]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundClip {&lt;br /&gt;
    uint8_t numEvents;&lt;br /&gt;
    struct ClipEvent[numEvents];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct ClipEvent {&lt;br /&gt;
    uint32_t eventInfo; //event id in lower 5 bits&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 1, size 16&lt;br /&gt;
struct EventPlayWave : ClipEvent {&lt;br /&gt;
    char unkn[4]; //0x4&lt;br /&gt;
    uint16_t trackIndex; //0x8&lt;br /&gt;
    uint8_t waveBank; //0xa&lt;br /&gt;
    uint8_t unkn; //0xb&lt;br /&gt;
    uint16_t unkn2; //0xc&lt;br /&gt;
    uint16_t unkn3; //0xe&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//event id 3, size at least 13&lt;br /&gt;
struct EventPlayWaveVariation : ClipEvent {&lt;br /&gt;
    char unkn[5];&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    int16_t unkn3;&lt;br /&gt;
&lt;br /&gt;
    struct VariationTable; ///wtf!?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 4, size 40&lt;br /&gt;
struct EventPlayWavePitchVolumeFilterVariation : EventPlayWave {&lt;br /&gt;
    struct PitchVolumeFilterVariation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct PitchVolumeFilterVariation {&lt;br /&gt;
    int16_t unkn;&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    uint8_t unkn4;&lt;br /&gt;
    float unkn5;&lt;br /&gt;
    float unkn6;&lt;br /&gt;
    float unkn7;&lt;br /&gt;
    float unkn8;&lt;br /&gt;
    uint16_t flags;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct SimpleCueEntry { //cue that maps straight to a sound&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t soundOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//size 15&lt;br /&gt;
struct ComplexCueEntry {&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t variationTableOffset;&lt;br /&gt;
    uint32_t transitionTableOffset;&lt;br /&gt;
    struct InstanceLimit;&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
struct InstanceLimit {&lt;br /&gt;
    uint32_t unkn;&lt;br /&gt;
    uint8_t unkn2;&lt;br /&gt;
    uint8_t unkn3; //dono if here or in ComplexCueEntry&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum VariationTableType {&lt;br /&gt;
    Wave,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    CompactWave&lt;br /&gt;
}&lt;br /&gt;
struct VariationTable {&lt;br /&gt;
    uint32_t flags;&lt;br /&gt;
        //numEnties in lower 16 bits&lt;br /&gt;
        //flags in upper 16 bits&lt;br /&gt;
        //      -table type in bits 3,4,5&lt;br /&gt;
    uint8_t unkn;&lt;br /&gt;
    uint16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    &lt;br /&gt;
    table 0:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
    &lt;br /&gt;
    table 1:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 2:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 3:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset; //?&lt;br /&gt;
        float weightMin;&lt;br /&gt;
        float weightMax;&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 4:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct CueNameHashVal {&lt;br /&gt;
    uint32_t nameOffset;&lt;br /&gt;
    uint16_t unkn;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Settings (.xgs) ==&lt;br /&gt;
Defines rules and settings for sounds. &lt;br /&gt;
&lt;br /&gt;
* Categories - sounds can be assigned to a category (only one each) that specifies certain rules like number of instances along with settings like volume. You could create a category for the sounds of one character in your game so they all have the same volume. There are three predefined categories: global, default and Music.&lt;br /&gt;
* Variables - these can be defined in the design stage and then referenced by the programmer in code to control Run-Time Parameter Controls&lt;br /&gt;
** Run-Time Parameter Controls - also known as 'sliders'. These allow the control of sound parameters as the sound plays. For example they could be used to control the pitch of a car engine sound so as the accelerator is pressed the pitch is changed&lt;br /&gt;
* DSP Effect Path Presets (DSPs) - allow effects like reverb to be applied to sounds &lt;br /&gt;
* Compression Presets - compression can be applied to waves or wave banks&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [https://github.com/espes/MonoGame/blob/develop3d/MonoGame.Framework/Audio/AudioEngine.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Multimedia APIs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Micronas_SC4</id>
		<title>Micronas SC4</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Micronas_SC4"/>
				<updated>2012-07-25T19:22:43Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Codec ID: 0x350&lt;br /&gt;
* Samples: http://samples.libav.org/A-codecs/Micronas%20SC4/&lt;br /&gt;
&lt;br /&gt;
This is a simple speech codec supporting 32000, 16000, 11025 and 8000 Hz sampling rates.&lt;br /&gt;
&lt;br /&gt;
It uses adaptive 6-point filtering and 1-5 or 30-byte blocks (interleaved in case of stereo).&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Kostya</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_In_Space_2012</id>
		<title>FFmpeg Summer Of Code In Space 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_In_Space_2012"/>
				<updated>2012-07-05T20:06:00Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* [[Libavfilter]] misc extensions */ Remove concatenat, it has been already integrated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ESA Summer of Code in Space 2012 (SOCIS 2012) is a program run by the European Space Agency. It aims at offering student developers stipends to write code for various space-related open source software projects. For more information read the page:&lt;br /&gt;
&lt;br /&gt;
http://sophia.estec.esa.int/socis2012/&lt;br /&gt;
&lt;br /&gt;
FFmpeg has been accepted in the SOCIS 2012 program:&lt;br /&gt;
&lt;br /&gt;
http://sophia.estec.esa.int/socis2012/?q=node/13&lt;br /&gt;
&lt;br /&gt;
and has been allocated one slot for one student/task.&lt;br /&gt;
&lt;br /&gt;
If you want to apply as a student please read these documents:&lt;br /&gt;
* http://sophia.estec.esa.int/socis2012/?q=faq&lt;br /&gt;
* http://sophia.estec.esa.int/socis2012/?q=tos&lt;br /&gt;
* http://sophia.estec.esa.int/socis2012/?q=student_agreement&lt;br /&gt;
* http://sophia.estec.esa.int/socis2012/timeline&lt;br /&gt;
&lt;br /&gt;
'''Candidate students application deadline is on 27/07 (11am UTC).'''&lt;br /&gt;
&lt;br /&gt;
The FFmpeg administrator for SOCIS 2012 is Stefano Sabatini (&amp;lt;stefasab@gmail.com&amp;gt;, saste on IRC), and Michael Niedermayer (&amp;lt;michaelni@gmx.at&amp;gt;, michaelni on IRC) is the backup administrator. Please contact them if you have any related questions.&lt;br /&gt;
&lt;br /&gt;
== Qualification tasks ==&lt;br /&gt;
&lt;br /&gt;
For us to consider your application for SOCIS we require a completed qualification task. Many Summer-of-Code projects (in the list below) have specific qualification tasks. These tasks are meant to make you familiar with the code that you will be working with, are at approximately the same difficulty level as the actual Summer-of-Code project itself (just a lot smaller), and often already provide you with a jumpstart into your Summer-of-Code project. We suggest the following order of events:&lt;br /&gt;
* First, select a Summer-of-Code project (either from the list below, but in some cases you may also come up with your own)&lt;br /&gt;
* Second, discuss this project with the person that will mentor it. If a mentor is listed, talk to him on IRC, via email or so. If no mentor is listed, find one by emailing the FFmpeg-devel mailinglist.&lt;br /&gt;
* With your mentor, discuss the most appropriate qualification task for your Summer-of-Code project.&lt;br /&gt;
If no specific qualification task is listed for your project of interest, you can discuss with your mentor to choose a task from the [[Small FFmpeg Tasks|Small Tasks list]] or the [[Interesting Patches|Interesting Patches list]] instead. If your prospective mentor agrees, please send an email to the FFmpeg-devel mailing list to inform that you are working on it (to avoid duplicated work). The qualification task is considered completed when your patch is accepted to the main Git tree.&lt;br /&gt;
&lt;br /&gt;
Before posting to the FFmpeg-devel mailing list, make sure you read and understand our netiquette guidelines, especially avoid top-posting and thread-hijacking. You should also be familiar with the diff, patch and git programs.&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;
=== [[Libavfilter]] misc extensions ===&lt;br /&gt;
&lt;br /&gt;
Libavfilter is the FFmpeg filtering library. It currently supports audio and video filtering and generation support.&lt;br /&gt;
&lt;br /&gt;
The task would consist of writing or porting audio and video filters and eventually fix/extend libavfilter API and design.&lt;br /&gt;
&lt;br /&gt;
Prerequisites: good C coding skills, familiarity with git/source code control systems, having some background on DSP and image/sound processing techniques would be a bonus but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
Qualification task: a port or an implementation from scratch of one or more filters.&lt;br /&gt;
&lt;br /&gt;
The following list shows some ideas and objectives which could be pursued during the task. The effective task objectives will be discussed with the student, according to his/her interests and background.&lt;br /&gt;
&lt;br /&gt;
* Port  missing filters from MPlayer (remember to ask the authors of the original filter if it is ok to release them under the LGPL)&lt;br /&gt;
* Framework: implement dynamic-reconfiguration of the filterchain, for supporting dynamic size/format changes&lt;br /&gt;
* Port filters from other frameworks (mjpeg-tools, effectv, frei0r, virtualdub, vlc, etc...).&lt;br /&gt;
* Write wrappers for more image processing libraries and filtering frameworks (libgimp, libgraphicsmagic, weed), extend the libopencv wrapper for supporting more filters (this may need implemented float image support in libswscale)&lt;br /&gt;
* Write more filters (possibly starting from already posted filters which for a reason or another were never committed, e.g. fish, eval, posterize, elbg/posterize etc.)&lt;br /&gt;
* Write a frequency domain transform filter and inverse frequency domain transform using the DSP utils in libavcodec&lt;br /&gt;
* Write a Matlab/Octave/SAGE scripting wrapper (assuming it can be done)&lt;br /&gt;
* Add metadata injection in the filtergraph&lt;br /&gt;
* Fix [https://ffmpeg.org/trac/ffmpeg/query?status=new&amp;amp;status=open&amp;amp;status=reopened&amp;amp;component=avfilter&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=component&amp;amp;col=version&amp;amp;order=priority libavfilter trac tickets]&lt;br /&gt;
&lt;br /&gt;
''Mentor: Stefano Sabatini - saste in IRC (possibly with a backup mentor)''&lt;br /&gt;
&lt;br /&gt;
=== [[Error concealment]] improvements ===&lt;br /&gt;
&lt;br /&gt;
When data is damaged beyond the capabilities of forward error correction codes or when it was damaged where there is no error correction like due to failing storage devices / RAM. Then when decoding/viewing the data error concealment can be applied to fill in lost areas. FFmpeg currently supports moderately advanced error concealment for most popular video codecs but lacks it for all image formats. This task is to add high quality error concealment to the image decoders where it's possible and improve resynchronization of the image decoders in light of data errors.&lt;br /&gt;
&lt;br /&gt;
As qualification task, at least one image decoder's error concealment capabilities need to be significantly improved.&lt;br /&gt;
&lt;br /&gt;
Prerequisites: good C coding skills, familiarity with git/source code control systems, having some background on DSP and image/sound processing techniques would be a bonus but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Michael Niedermayer - michaelni in IRC (possibly with a backup mentor)''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
These proposals lack of a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Finish GSoC projects from previous years ===&lt;br /&gt;
&lt;br /&gt;
Some projects are lingering in the dark unfinished. They should be picked up and made ready for inclusion. These projects are potentially less involved than starting from scratch, but also more useful for FFmpeg since the probability that the projects get finished should be higher. If some of them are deemed too easy, they could be combined.&lt;br /&gt;
&lt;br /&gt;
For the current status of all GSoC projects up to date, see [[FFmpeg Summer Of Code]].&lt;br /&gt;
&lt;br /&gt;
=== Forward Error Correction ===&lt;br /&gt;
&lt;br /&gt;
Add FEC to libavutil.&lt;br /&gt;
* RTP FEC, standardised as SMPTE 2022M (Possibly the same as Pro-MPEG FEC) - (not 100% sure if this is for all types of RTP or just some)&lt;br /&gt;
* MPEG-TS 16 bytes extra - (not sure where this is standardised - in DVB perhaps?)&lt;br /&gt;
&lt;br /&gt;
I (michaelni) am happy to help mentor this but i don't volunteer as primary mentor.&lt;br /&gt;
&lt;br /&gt;
=== Automatic image classification ===&lt;br /&gt;
&lt;br /&gt;
Research existing literature about image classification and implement the best algorithms in libavfilter with the purpose of allowing autonomous classification of images in terms of containing unexpected, interesting features or simply significant temporal changes. This would allow a probe to quicker and automatically detect interesting things or changes to image and transmit to earth.&lt;br /&gt;
&lt;br /&gt;
I (michaelni) am happy to help mentor this but i don't volunteer as primary mentor.&lt;br /&gt;
&lt;br /&gt;
=== libavfilter star scanner ===&lt;br /&gt;
&lt;br /&gt;
Write a libavfilter that determines from a image of a random patch of the sky / a bunch of stars the exact orientation of the camera.&lt;br /&gt;
&lt;br /&gt;
I (michaelni) am happy to help mentor this but i don't volunteer as primary mentor.&lt;/div&gt;</summary>
		<author><name>Stefanosa</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=TechSmith_Screen_Capture_Codec_2</id>
		<title>TechSmith Screen Capture Codec 2</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=TechSmith_Screen_Capture_Codec_2"/>
				<updated>2012-07-03T19:12:05Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* Frame format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCC: TSC2&lt;br /&gt;
* Company: [[TechSmith]]&lt;br /&gt;
&lt;br /&gt;
This codec was developed by TechSmith and used in their screen capturing products.&lt;br /&gt;
&lt;br /&gt;
== Frame format ==&lt;br /&gt;
&lt;br /&gt;
This codec operates on 16x8 macroblocks.&lt;br /&gt;
&lt;br /&gt;
  0 - frame type (1- coded, 0 - skip frame)&lt;br /&gt;
  1 - quantiser1 (0-12)&lt;br /&gt;
  2 - quantiser2 (0-12)&lt;br /&gt;
  3 - ???&lt;br /&gt;
  [macroblock properties]&lt;br /&gt;
  [macroblock slices]&lt;br /&gt;
&lt;br /&gt;
Macroblock properties:&lt;br /&gt;
&lt;br /&gt;
  4 bytes LE - chunk size&lt;br /&gt;
  rest       - RLE-coded mode in bytes in form (val &amp;lt;&amp;lt; 6) | (count)&lt;br /&gt;
&lt;br /&gt;
Macroblock slices begin with slice size. If the first byte is odd, then it's the full size. Otherwise read whole 32-bit word and divide it by two in order to obtain real macroblock data size.&lt;br /&gt;
&lt;br /&gt;
Mode meaning: 0/3 - skip block, 1 - select quantiser1, 2 - select quantiser2&lt;br /&gt;
&lt;br /&gt;
Macroblocks encode series of 4x4 DCT blocks (4x2), one component after another.&lt;br /&gt;
&lt;br /&gt;
Block format:&lt;br /&gt;
&lt;br /&gt;
  DC - 8 bits for the first block, or VLC (for the difference from the previous DC)&lt;br /&gt;
  number of AC coefficients - VLC&lt;br /&gt;
  [AC coefficients] - VLC, bottom 4 bits - skip value, top 8 bits - AC value&lt;br /&gt;
&lt;br /&gt;
Scan order is zigzag:&lt;br /&gt;
&lt;br /&gt;
  0  2  3  9&lt;br /&gt;
  1  4  8 10&lt;br /&gt;
  5  7 11 14&lt;br /&gt;
  6 12 13 15&lt;br /&gt;
&lt;br /&gt;
Quantisation:&lt;br /&gt;
&lt;br /&gt;
  Q0 Q1 Q0 Q1&lt;br /&gt;
  Q1 Q2 Q1 Q2&lt;br /&gt;
  Q0 Q1 Q0 Q1&lt;br /&gt;
  Q1 Q2 Q1 Q2&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
  Q0 = 4 * round(quant * 327.68)&lt;br /&gt;
  Q1 = 4 * round(quant / 5 * 16384 * 0.1313064328597225) // about 4 * round(quant * 430.265)&lt;br /&gt;
  Q2 = 4 * round(quant * 32768 * 0.1313064328597225^2 ) // about 4 * round(quant * 564.966)&lt;br /&gt;
&lt;br /&gt;
Unquantising:&lt;br /&gt;
&lt;br /&gt;
  val = (quant * (qval &amp;lt;&amp;lt; 6) + 0x10000) &amp;gt;&amp;gt; 17&lt;br /&gt;
&lt;br /&gt;
IDCT matrix:&lt;br /&gt;
&lt;br /&gt;
  5  5  5  2&lt;br /&gt;
  5  2 -5 -5&lt;br /&gt;
  5 -2 -5  5&lt;br /&gt;
  5 -5  5 -2&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Screen Capture Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Kostya</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=PCoIP</id>
		<title>PCoIP</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=PCoIP"/>
				<updated>2012-06-25T14:56:44Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Company: [[Teradici]]&lt;br /&gt;
*Description: http://teradici.com/pcoip/pcoip-technology.php&lt;br /&gt;
&lt;br /&gt;
PCoIP is a real-time Audio/Video/Keyboard/Mouse/USB streaming protocol intended for remote desktop access to physical and virtual machines. It exists primarily in the form of a Terradici hardware encoder/decoder ASIC that may be integrated into graphics cards and thin-clients. A software implementation exists within recent versions of the VMware View Agent and VMware View Client products. According to the website, ''PCoIP protocol continuously analyzes and decomposes image elements – graphics, text, icons, photographs, video, etc – and compresses them with the right codec for each and every pixel.''&lt;br /&gt;
&lt;br /&gt;
= Management Channel (MGMT) =&lt;br /&gt;
&lt;br /&gt;
The management channel establishes a PCoIP session between the client and server. The channel is created when the client connects to the server via SSL on port 4172. Existing PCoIP clients and servers perform validation of the SSL keys against the PCoIP Root Certificate Authority (see below). The channel is closed following negotiation of the data channel parameters. Parameters are listed below.&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
Existing server implementations check that the remote client's certificate is signed by the PCoIP Root Certificate Authority.&lt;br /&gt;
&lt;br /&gt;
=== PCoIP Certificate Authority Key ===&lt;br /&gt;
 //FIXME: Public key&lt;br /&gt;
 //FIXME: Private key&lt;br /&gt;
&lt;br /&gt;
=== PCoIP Client Key (libpcoip_client) ===&lt;br /&gt;
 //FIXME: Public key&lt;br /&gt;
 //FIXME: Private key&lt;br /&gt;
&lt;br /&gt;
== Message Format ==&lt;br /&gt;
Each MGMT message consists of a 64-bit header followed by list of chunks. The first chunk is always the 'ssig' chunk, which identifies the purpose of the message.&lt;br /&gt;
&lt;br /&gt;
=== Header Record ===&lt;br /&gt;
    uint64_t  size;   Packet size excluding this header (bytes)&lt;br /&gt;
=== Chunk Record ===&lt;br /&gt;
    uint32_t  tag;    FourCC code&lt;br /&gt;
    uint32_t  size;   Chunk data size (bytes)&lt;br /&gt;
    var       data;   Chunk data&lt;br /&gt;
&lt;br /&gt;
== General FourCC Codes ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| ssig || 4      || Purpose || 0=Invite, 1=Invite Ok, 2=Not Acceptable, 3=Ack, 4=Bye, 5=Bye Ok, 6=Ping, 7=Pong&lt;br /&gt;
|-&lt;br /&gt;
| byec || 4      || Bye reason ||&lt;br /&gt;
|-&lt;br /&gt;
| psec || 4      || security type || Integer; 0=NULL, 1=AES-128-GCM, 2=AES-256-GCM, 3=Salsa20-256-round12&lt;br /&gt;
|-&lt;br /&gt;
| 1key || 16     || AES 128 key ||&lt;br /&gt;
|-&lt;br /&gt;
| 1slt || 4      ||  AES 128 salt ||&lt;br /&gt;
|-&lt;br /&gt;
| 1spi || 4      || AES 128 spi ||&lt;br /&gt;
|-&lt;br /&gt;
| 2key || 32     || AES 256 key ||&lt;br /&gt;
|-&lt;br /&gt;
| 2slt || 4      || AES 256 salt ||&lt;br /&gt;
|-&lt;br /&gt;
| 2spi || 4      || AES 256 spi ||&lt;br /&gt;
|-&lt;br /&gt;
| s12k || 32     || Salsa20-256-round12 key ||&lt;br /&gt;
|-&lt;br /&gt;
| s12s || 4      || Salsa20-256-round12 salt ||&lt;br /&gt;
|-&lt;br /&gt;
| s12t || 4      || Salsa20-256-round12 spi ||&lt;br /&gt;
|-&lt;br /&gt;
| cipa || &amp;lt;= 255 || Connection IP address ||&lt;br /&gt;
|-&lt;br /&gt;
| cmac || 6      || Connection MAC address ||&lt;br /&gt;
|-&lt;br /&gt;
| cpri || 4      || Connection PRI address ||&lt;br /&gt;
|-&lt;br /&gt;
| ctag || &amp;lt;= 127 || Connection tag || VMware View Client 'token'&lt;br /&gt;
|-&lt;br /&gt;
| cprt || 2      || Connection port || Integer&lt;br /&gt;
|-&lt;br /&gt;
| pca1 || 32     || AES-128-GCM key ||&lt;br /&gt;
|-&lt;br /&gt;
| pca2 || 48     || AES-256-GCM key ||&lt;br /&gt;
|-&lt;br /&gt;
| pcs2 || 48     || Salsa20-256-round12 key ||&lt;br /&gt;
|-&lt;br /&gt;
| penc || &amp;lt;= 64  || PCoIP encoding || Array of bytes, where 0=pcoip_data_1, 1=pcoip_data_2&lt;br /&gt;
|-&lt;br /&gt;
| pcap || &amp;lt;= 64  || PCoIP encapsulation || Array of bytes, where 0=IP, 1=UDP, 2=TCP&lt;br /&gt;
|-&lt;br /&gt;
| pclr || 1      || Cleartext transport header supported || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| psak || 1      || Selective ACK supported || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| plnk || 4      || PCoIP link rate || Integer; BPS&lt;br /&gt;
|-&lt;br /&gt;
| pmtu || 4      || MTU size || Integer&lt;br /&gt;
|-&lt;br /&gt;
| pprf || &amp;lt;= 96  || PCoIP packet preference || Array of 3-byte records&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Media FourCC Codes ==&lt;br /&gt;
&lt;br /&gt;
When describing a specific media type (e.g. Audio), the following common chunks are present, followed by chunks specific to the media.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| mtyp || 4      || Media type || 0=USB, 1=Audio, 2=Video, 3=DDC, 4=KMP, 5=VChan&lt;br /&gt;
|-&lt;br /&gt;
| menc || var    || Media encoding || (Media specific)&lt;br /&gt;
|-&lt;br /&gt;
| menb || 4      || Media || Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
Media Encoding:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! Value !! Encoding&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OHCI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || EHCI&lt;br /&gt;
|-&lt;br /&gt;
| 3 || URB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FourCCs:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| usbb || 4 || Client paramter version ||&lt;br /&gt;
|-&lt;br /&gt;
| usbp || 4 || Plugin version ||&lt;br /&gt;
|-&lt;br /&gt;
| usbc || 4 || Number of channels ||&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
Media Encoding:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! Value !! Codec || Frequency || Channels&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ADPCM         || 48000 || Stereo&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ADPCM         || 8000  || Mono&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ADPCM         || 16000 || Mono&lt;br /&gt;
|-&lt;br /&gt;
| 4 || PCM 16-bit LE || 48000 || Stereo&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM 16-bit LE || 48000 || Mono&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FourCCs:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| audf || &amp;lt;= 100 || FEC mode || array of byes, where 0=FEC Mode 1&lt;br /&gt;
|-&lt;br /&gt;
| audi || 4      || Audio input || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| audy || 4      || Standy mode ||&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
Media Encoding:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! Value !! Encoding&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Video 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Video 2&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Video 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FourCCs:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| vidt || 4      || Topology caching || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidn || 4      || Max number of displays ||&lt;br /&gt;
|-&lt;br /&gt;
| vidv || 4      || Vertical extended motion || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidh || 4      || Horizontal extended motion || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidp || 4      || SACK || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidl ||        || ? (deprecated) ||&lt;br /&gt;
|-&lt;br /&gt;
| vidb || 4      || Image cache size ||&lt;br /&gt;
|-&lt;br /&gt;
| vidu || 4      || User config || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidy || 4      || Standby mode || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidm || 4      || Monitor power saving || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| vidC || 4      || ? ||&lt;br /&gt;
|-&lt;br /&gt;
| viCA || 4      || ? ||&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== DDC ===&lt;br /&gt;
Always media encoding value 0&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| ddce || 4      || Asynchronous EDID Update || Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KMP ===&lt;br /&gt;
Always media encoding value 0&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| kmpa || &amp;lt;= 100 || Auto repeat modes || array of bytes, where 0=client auto repeat&lt;br /&gt;
|-&lt;br /&gt;
| kmpb || &amp;lt;= 100 || Pointer shape bitmap types || array of bytes, where 0=alpha, 1=color, 2=xor, 3=compressed alpha, 4=compressed color, 5=compressed xor&lt;br /&gt;
|-&lt;br /&gt;
| kmpc || 4      || Pointer shape caches ||&lt;br /&gt;
|-&lt;br /&gt;
| kmpx || 4      || Pointer shape cache size ||&lt;br /&gt;
|-&lt;br /&gt;
| kmps || 4      || Pointer shape max size || (x,y)&lt;br /&gt;
|-&lt;br /&gt;
| kmpf || 4      || Pointer fadeout || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| kmpl || 4      || Multiple locale || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| kmpu || 4      || Unicode key || Boolean&lt;br /&gt;
|-&lt;br /&gt;
| kmpk || 4      || Key block || Boolean&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VChan ===&lt;br /&gt;
Always media encoding value 0&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! FourCC !! Length (Bytes) !! Name || Data type&lt;br /&gt;
|-&lt;br /&gt;
| vchc || 4      || Number of channels ||&lt;br /&gt;
|-&lt;br /&gt;
| vchs || 4      || Buffer size ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Key Exchange Obfuscation ==&lt;br /&gt;
&lt;br /&gt;
PCoIP supports an optional method to obfuscate the the key exchange with the management channel. Obfuscation is achieved by xoring the client and server keys with values derived from a shared secret. The shared secret is communicated to the client and server via the [http://code.google.com/p/vmware-view-open-client/downloads/detail?name=VMware-view-client-protocol-spec-4.5.0-GA.pdf VMware View Client Protocol]. The shared secret is called the ''reservation_vcs_tag'' or ''PCoIP token''. The shared secret also contains a unique connection identifier called the ''reservation_ssig_tag'' or ''connection tag''. This is exchanged over the management channel via the 'ctag' chunk.&lt;br /&gt;
&lt;br /&gt;
  if (reservation_vcs_tag starts with &amp;quot;SCS1&amp;quot; &amp;amp;&amp;amp; strlen(reservation_vcs_tag) &amp;gt;= 104) {&lt;br /&gt;
    server key xor value = decodebase64(reservation_vcs_tag[4..47])&lt;br /&gt;
    client key xor value = decodebase64(reservation_vcs_tag[48..91])&lt;br /&gt;
    reservation_ssig_tag = reservation_vcs_tag[92..]&lt;br /&gt;
  } else {&lt;br /&gt;
    //server and client keys are exchanged verbatim&lt;br /&gt;
    reservation_ssig_tag = reservation_vcs_tag&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Data Channel (DATA) =&lt;br /&gt;
&lt;br /&gt;
The data channel exists to exchange encrypted data packets between the client and server. The channel is configured by the 'pcap' and 'penc' parameters negotiated in the MGMT channel. The following subsections relate to the (UDP, pcoip_data_2) configuration. In the default configuration, UDP messages are sent from client-to-server on UDP port 4172, and sent from the server-to-client on UDP port 50002. The network address and port are specified via the '''cipa''' and '''cprt''' chunks in the management channel.&lt;br /&gt;
&lt;br /&gt;
== Encrypted Data Packet ==&lt;br /&gt;
&lt;br /&gt;
PCoIP supports Salsa20/12, AES-128 and AES-256 encryption algorithms. Different algorithm and key may be used in each directions of the channel. Each encrypted data packet is sent as a UDP datagram and (when decrypted) contains a single data message. Note that each encryption algorithm uses a different packet format, but the resulting plaintext message is the same format.&lt;br /&gt;
&lt;br /&gt;
=== Salsa20/12 Encapsulated Packet ===&lt;br /&gt;
&lt;br /&gt;
A reference Salsa20/12 algorithm can be found here: http://cr.yp.to/snuffle/salsa20/ref/salsa20.c. Note the final four bytes of the plaintext data message is always equal to 0xDEADBEEF. These bytes are not considered part of the data message.&lt;br /&gt;
&lt;br /&gt;
  uint32_t    spi;          Unique indicator&lt;br /&gt;
  uint32_t    serial;       Packet serial number, starts at zero&lt;br /&gt;
  uint8_t     iv[8];        Crypto IV&lt;br /&gt;
  variable    payload[]     Ciphertext message&lt;br /&gt;
&lt;br /&gt;
=== AES-128 Encapsulation Packet ===&lt;br /&gt;
&lt;br /&gt;
 //FIXME: Document&lt;br /&gt;
&lt;br /&gt;
=== AES-256 Encapsulation Packet ===&lt;br /&gt;
&lt;br /&gt;
 //FIXME: Document&lt;br /&gt;
&lt;br /&gt;
= Data Message Format =&lt;br /&gt;
Data message consist of a header followed by message-specific body.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
  uint8_t   type;         Message type (see table below)&lt;br /&gt;
  uint8_t   unknown[3];&lt;br /&gt;
  uint16_t  serial_no;    Serial number; separate serial numbers maintained for each message type&lt;br /&gt;
&lt;br /&gt;
== Packet Type ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! Packet Type !! Name || Description || Source(s)&lt;br /&gt;
|-&lt;br /&gt;
| 2  || IMG || Video Channel || Server&lt;br /&gt;
|-&lt;br /&gt;
| 6  || ?   || Redirection services || Client,Server&lt;br /&gt;
|-&lt;br /&gt;
| 8  || DDC || Display Data Channel || Client,Server&lt;br /&gt;
|-&lt;br /&gt;
| 9  || ?   || || Client,Server&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?   || || Client,Server&lt;br /&gt;
|-&lt;br /&gt;
| 12 || HDA || Audio Channel || Client,Server&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Container_Formats]]&lt;br /&gt;
[[Category:Undiscovered Codecs]]&lt;/div&gt;</summary>
		<author><name>Suxen drol</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=UBB</id>
		<title>UBB</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=UBB"/>
				<updated>2012-04-15T17:21:10Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension:  ubb , sometimes hnm&lt;br /&gt;
* Company: [[CRYO Interactive Entertainment]]&lt;br /&gt;
* Samples: '''ADD ME'''&lt;br /&gt;
&lt;br /&gt;
UBB2 is another generation of FMV format developed by Cryo. It is an improved version of [[HNM4]] format. While general container format remains the same, video encoding is slightly improved.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
Remains the same as was used in [[HNM4]]. Following parts has changed:&lt;br /&gt;
* File signature is &amp;quot;UBB2&amp;quot; now.&lt;br /&gt;
* Video chunk has &amp;quot;IV&amp;quot; TwoCC.&lt;br /&gt;
&lt;br /&gt;
== Video Compression ==&lt;br /&gt;
The video frame is encoded in a series of horizontal colums of variable width and height. However, columns height (and some of their coding properties) may only change at the beginning of new line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Encoded stream consist of column copy mode bytes:&lt;br /&gt;
 bits:&lt;br /&gt;
      7 - swap rows/columns&lt;br /&gt;
      6 - vertical reverse&lt;br /&gt;
      5 - horizontal reverse&lt;br /&gt;
   4..0 - column width index (table lookup, see below)&lt;br /&gt;
&lt;br /&gt;
Each of such code generally means ''&amp;quot;copy a width-by-height column from some other place to the current, using flags provided.&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Flags behavior can be illustrated as follows (assuming 2x3 block and the source points to 'M' pixel):&lt;br /&gt;
 Source      Normal   Horizontal   Vertical   Swap&lt;br /&gt;
     &lt;br /&gt;
  ABCDE        MN         ML          MN       MR&lt;br /&gt;
  FGHIJ        RS         RQ          HI       NS&lt;br /&gt;
  KLMNO   -&amp;gt;   WX         WV          CD       OT&lt;br /&gt;
  PQRST                     &lt;br /&gt;
  UVWXY                     &lt;br /&gt;
&lt;br /&gt;
Multiple flags can be used together.&lt;br /&gt;
&lt;br /&gt;
Encoded column width depends on column's height:&lt;br /&gt;
 2: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,34,36,38,40,44,48,52,56&lt;br /&gt;
 3: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,26,28,30,32,34,36,38,40,42,44&lt;br /&gt;
 4: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,32,34,36,38&lt;br /&gt;
&lt;br /&gt;
Source column offset may be an &amp;quot;absolute&amp;quot; offset - byte distance from the current column, or relative X:Y offset.&lt;br /&gt;
* For absolute offset read next 2-byte value (unsigned, little-endian) and add base oofset.&lt;br /&gt;
* For relative offset read next byte, extract X and Y deltas from it and add base deltas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Certain combination used for special purposes. Those are:&lt;br /&gt;
* 0x20 - skip: read next byte (width) and copy width+1 column from previous frame&lt;br /&gt;
* 0x60 - solo: draw 1-pixel wide column using next bytes of input&lt;br /&gt;
* 0xA0 - draw: read next byte (width) and draw width+2 column using next bytes of input (top-down, left-right)&lt;br /&gt;
* 0xE0 - mode: examine next byte.&lt;br /&gt;
**   if byte is zero, then read two bytes (width, color) and fill width+1 column with color.&lt;br /&gt;
**   if byte is non-zero, change the decoding properties as follows:&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 | byte | height | source | offset | Y.X bits |  X-base | Y-base |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   1  |                    end of decoding                     |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   2  |   2    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   3  |   3    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   4  |   4    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   5  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 |   6  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 |   7  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   8  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |   9  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  10  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  11  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  12  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  13  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  14  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  15  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  16  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |  17  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  18  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  19  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  20  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  21  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  22  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  23  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  24  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |  25  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  26  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  27  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  28  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  29  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  30  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  31  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  32  |   2    |  curr  | -65536 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |  33  |   2    |  curr  |   N/A  |   3.5    |   -16   |   -8   |&lt;br /&gt;
 |  34  |   2    |  curr  |   N/A  |   4.4    |   -8    |   -16  |&lt;br /&gt;
 |  35  |   2    |  curr  |   N/A  |   4.4    |   -24   |   -16  |&lt;br /&gt;
 |  36  |   2    |  curr  |   N/A  |   4.4    |   +8    |   -16  |&lt;br /&gt;
 |  37  |   2    |  curr  |   N/A  |   5.3    |   -4    |   -32  |&lt;br /&gt;
 |  38  |   2    |  curr  |   N/A  |   5.3    |   -12   |   -32  |&lt;br /&gt;
 |  39  |   2    |  curr  |   N/A  |   5.3    |   +4    |   -32  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  40  |   3    |  curr  | -65536 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |  41  |   3    |  curr  |   N/A  |   3.5    |   -16   |   -8   |&lt;br /&gt;
 |  42  |   3    |  curr  |   N/A  |   4.4    |   -8    |   -16  |&lt;br /&gt;
 |  43  |   3    |  curr  |   N/A  |   4.4    |   -24   |   -16  |&lt;br /&gt;
 |  44  |   3    |  curr  |   N/A  |   4.4    |   +8    |   -16  |&lt;br /&gt;
 |  45  |   3    |  curr  |   N/A  |   5.3    |   -4    |   -32  |&lt;br /&gt;
 |  46  |   3    |  curr  |   N/A  |   5.3    |   -12   |   -32  |&lt;br /&gt;
 |  47  |   3    |  curr  |   N/A  |   5.3    |   +4    |   -32  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
* prev means source is the previous frame, curr - current&lt;br /&gt;
* Y.X means &amp;quot;Y&amp;quot; value in upper Y bits of byte, &amp;quot;X&amp;quot; in lower X bits.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
Apparently this format has another less-used name - HNM5.&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
== Games Using UBB ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mobygames.com/game/megarace-2 Megarace II]&lt;br /&gt;
* lots of others&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=JangGu_Bayer</id>
		<title>JangGu Bayer</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=JangGu_Bayer"/>
				<updated>2012-04-15T12:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Source: http://os1a.cs.columbia.edu/lxr/source/drivers/media/video/se401.c&lt;br /&gt;
*FourCC: JBYR&lt;br /&gt;
*Sample: &lt;br /&gt;
&lt;br /&gt;
Found in some kensington webcams.&lt;/div&gt;</summary>
		<author><name>Compn</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Psygnosis_SMV</id>
		<title>Psygnosis SMV</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Psygnosis_SMV"/>
				<updated>2012-03-31T09:20:52Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: smv&lt;br /&gt;
* Company: [[Psygnosis]]&lt;br /&gt;
* Samples: http://cd.textfiles.com/cdaction/cdaction04/FILM/&lt;br /&gt;
&lt;br /&gt;
SMV is a short-lived FMV format used in the PC game [http://www.mobygames.com/game/dos/wipeout Wipeout] by Psygnosis. It employs LZ-like compression to encode 8-bit palettized video and audio.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
An SMV file consist of a number of chunks with unique [[TwoCC]]. All numbers are little-endian.&lt;br /&gt;
&lt;br /&gt;
  u16 chunkid&lt;br /&gt;
  u16 chunklen&lt;br /&gt;
  u8  payload[chunklen]&lt;br /&gt;
&lt;br /&gt;
=== ST chunk ===&lt;br /&gt;
File header. Encodes basic movie properties.&lt;br /&gt;
&lt;br /&gt;
  u16 width           -- movie width&lt;br /&gt;
  u16 height          --  and height&lt;br /&gt;
  u16 mbwidth         -- macroblock width&lt;br /&gt;
  u16 mbheight        --  and height&lt;br /&gt;
  u16 frames          -- number of video frames&lt;br /&gt;
  u16 colors          -- number of used colors&lt;br /&gt;
  u16 nibbles         -- offset of frame's nibble data&lt;br /&gt;
  -- if chunk size is &amp;gt;= 15&lt;br /&gt;
  u8  codec           -- video codec format&lt;br /&gt;
&lt;br /&gt;
* Codec field may be absent, in such case assume codec 0.&lt;br /&gt;
* mbwidth is always 16, mbheight may be either 16 or 8.&lt;br /&gt;
* Movie playback rate is 12 FPS.&lt;br /&gt;
&lt;br /&gt;
=== GP chunk ===&lt;br /&gt;
New palette. Contains a number of 6-bit [[RGB]] entries, as specified in ST chunk.&lt;br /&gt;
&lt;br /&gt;
=== MU chunk ===&lt;br /&gt;
Sound chunk. Contains audio fragment in 15862Hz, 8-bit, unsigned, mono format. If the payload size is equal to the amount of audio data for a frame (i.e. the size is freq / fps, which is equal to 1321) then the audio data is stored in raw [[PCM]] format. Otherwise, it's additionally LZ-word-packed.&lt;br /&gt;
&lt;br /&gt;
=== FR chunk ===&lt;br /&gt;
Frame chunk. Contains encoded video frame.&lt;br /&gt;
&lt;br /&gt;
=== FE chunk ===&lt;br /&gt;
End of the movie. No payload.&lt;br /&gt;
&lt;br /&gt;
== Video Compression ==&lt;br /&gt;
&lt;br /&gt;
=== Video Codec 0 ===&lt;br /&gt;
&lt;br /&gt;
 LZUnpack(payload, temp, words)&lt;br /&gt;
 DrawBlocks(temp)&lt;br /&gt;
&lt;br /&gt;
=== Video Codec 1 ===&lt;br /&gt;
&lt;br /&gt;
 LZUnpack(payload, temp, bytes)&lt;br /&gt;
 DrawBlocks(temp)&lt;br /&gt;
&lt;br /&gt;
=== Video Codec 2 ===&lt;br /&gt;
&lt;br /&gt;
 LZUnpack(payload, temp, bytes)&lt;br /&gt;
 UnpackPartitions(temp, temp2)&lt;br /&gt;
 DrawBlocks(temp2)&lt;br /&gt;
&lt;br /&gt;
UnpackPartitions decodes Macroblock's nibbles.&lt;br /&gt;
&lt;br /&gt;
Source frame is broken on to several equal partitions, 2 across by 4 down. Encoded partitions format:&lt;br /&gt;
&lt;br /&gt;
  u8  pixels[16 * num_mblocks]          -- passed as is to DrawBlocks()&lt;br /&gt;
  for each partition&lt;br /&gt;
    u8  codebook[256][2]                -- nibbles codebook for each partition&lt;br /&gt;
  for each partition&lt;br /&gt;
    for each macroblock&lt;br /&gt;
      u8  index[mb_width*mb_height/4]   -- index of codebook entry&lt;br /&gt;
&lt;br /&gt;
Each entry of codebook encodes 4 nibbles. First byte encodes two nibbles of upper macroblock's line, second - next line, and so on.&lt;br /&gt;
&lt;br /&gt;
=== Video Codec 3 ===&lt;br /&gt;
This codec is never used, but the code is still in place.&lt;br /&gt;
&lt;br /&gt;
 if GetByte()&lt;br /&gt;
   LZUnpack(payload, temp, bytes)&lt;br /&gt;
   UnpackSpecial(temp, temp2)&lt;br /&gt;
   DrawBlocks(temp2)&lt;br /&gt;
 else&lt;br /&gt;
   same as codec 1&lt;br /&gt;
&lt;br /&gt;
UnpackSpecial performs advanced decompression. '''TODO''' ''this may be some common algorithm''&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks drawing ===&lt;br /&gt;
Macroblocks are stored in the following format:&lt;br /&gt;
&lt;br /&gt;
  u8 pixels[16 * num_mblocks]&lt;br /&gt;
  u4 nibbles[num_mblocks]&lt;br /&gt;
&lt;br /&gt;
Size of pixels[] is equal to ST chunk's ''nibbles''.&lt;br /&gt;
For each macroblock draw it by indexing its pixels by nibbles. First nibble stored in top 4 bits of byte.&lt;br /&gt;
&lt;br /&gt;
== Common Algorithms ==&lt;br /&gt;
=== LZ decompression ===&lt;br /&gt;
This is a more-or-less common LZ77-like algorithm. It can operate in two modes: byte mode and words mode. Mode affects backchain offset encoding.&lt;br /&gt;
* &amp;quot;next bit&amp;quot; means next bit from the internal 8-bit bitreader queue. Queue refilled with the input stream bytes, bits are consumed starting from the highest.&lt;br /&gt;
* &amp;quot;next byte&amp;quot; means raw octet from the input stream&lt;br /&gt;
&lt;br /&gt;
  repeat&lt;br /&gt;
 &lt;br /&gt;
    if next bit == 0&lt;br /&gt;
      output next byte&lt;br /&gt;
    else&lt;br /&gt;
      if next bit == 0&lt;br /&gt;
        offset = next byte&lt;br /&gt;
      else&lt;br /&gt;
        if byte mode&lt;br /&gt;
          offset = next 3 bits || next byte  + 1&lt;br /&gt;
        if words mode&lt;br /&gt;
          offset = next 2 bits || next byte  + 1  *2&lt;br /&gt;
 &lt;br /&gt;
      if next bit == 0        length = 2&lt;br /&gt;
      else if next bit == 0   length = 3 + next bit&lt;br /&gt;
      else if next bit == 0   length = 5 + next bit&lt;br /&gt;
      else if next bit == 0   length = 7&lt;br /&gt;
      else if next byte != 0  length = 7 + this byte&lt;br /&gt;
      else finish unpacking&lt;br /&gt;
 &lt;br /&gt;
      copy length bytes from output - offset to output&lt;br /&gt;
       note that, bytes may overlap to repeat itself&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=CSF</id>
		<title>CSF</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=CSF"/>
				<updated>2012-03-14T16:44:36Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently discussed and sample here: https://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
Copy-and-pasted description:&lt;br /&gt;
It is a format based on PNG and partial re-encoding, as you can see when you look at it with e.g.  http://sourceforge.net/projects/extractor-gtk/&lt;br /&gt;
Possibly contains some other encoding types, too.&lt;br /&gt;
All container structures seem to be little-endian.&lt;br /&gt;
Each &amp;quot;frame&amp;quot; contains a 4 byte size at offset 8.&lt;br /&gt;
For the PNG encoded ones, offsets 16 - 24 seem to contain 4 16 bit values that indicate the offset and size of the image the PNG updates. After that seems to follow yet another size field containing the remaining bytes.&lt;br /&gt;
Start of the following packet is always aligned to 16 bytes.&lt;br /&gt;
There seems to be some kind of index at 0x190.&lt;br /&gt;
This and the data start seems to be referenced in the header, at bytes 24 and 28.&lt;/div&gt;</summary>
		<author><name>Reimar</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=CinemaDNG</id>
		<title>CinemaDNG</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=CinemaDNG"/>
				<updated>2012-03-14T10:35:14Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Cinema Digital Negative=&lt;br /&gt;
&lt;br /&gt;
* Company: [[Adobe]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* overview: http://labs.adobe.com/downloads/cinemadng.html#docs&lt;br /&gt;
* spezification: http://download.macromedia.com/pub/labs/cinemadng/cinemadng_spec_090211.pdf&lt;br /&gt;
* file format: http://download.macromedia.com/pub/labs/cinemadng/cinemadng_summary.pdf&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Container Formats]]&lt;/div&gt;</summary>
		<author><name>Elte</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2012</id>
		<title>FFmpeg Summer of Code 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2012"/>
				<updated>2012-02-18T20:52:40Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: remove another completed task&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Proposals and Qualification Tasks.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
March 12th-16th: Project application evaluation.&lt;br /&gt;
&lt;br /&gt;
NOTE: FFmpeg has not been accepted this year, so unless you want to do any of these, the small tasks or qualification tasks just for fun...&lt;br /&gt;
&lt;br /&gt;
==Contacting Developers==&lt;br /&gt;
Find us on irc, server: irc.freenode.net channel: #ffmpeg-devel&lt;br /&gt;
or contact us by subscribing to the mailing list https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel/&lt;br /&gt;
&lt;br /&gt;
== Qualification Tasks ==&lt;br /&gt;
To be eligible for a Summer of Code project, we ask you to do a small programming task to prove you know the basics. FFmpeg is a large, complicated collection of code and it's not easy for beginners. There are some ideas for tasks on the [[Small FFmpeg Tasks]] page.&lt;br /&gt;
&lt;br /&gt;
== 1st Tier Project Proposals ==&lt;br /&gt;
These are proposals with a mentor attached.&lt;br /&gt;
&lt;br /&gt;
''Baptiste has also offered to mentor.''&lt;br /&gt;
&lt;br /&gt;
=== hwaccel: global architecture ===&lt;br /&gt;
&lt;br /&gt;
Revisit my older v2 proposal to completely get rid of HW pixel formats. The advantages were: this simplifies things, clean ups code, allows to move more code to the codec library (FFmpeg), allow for fallbacks to SW decoding (at the stream level if HW cannot meet the requirements, not while decoding a particular stream). The key point was to separate identification of the pixel format from the underlying HW accelerator. This will also allow for reading HW surfaces back, when requested if the selected pixel format.&lt;br /&gt;
&lt;br /&gt;
Add encoding and post processing infrastructure.&lt;br /&gt;
&lt;br /&gt;
* VA-API (hwaccel)&lt;br /&gt;
&lt;br /&gt;
:Codecs related:&lt;br /&gt;
 + Add support {,M}JPEG decoding&lt;br /&gt;
 + Add support for VC-1 interlaced acceleration&lt;br /&gt;
 + Add support for H.264 interlaced&lt;br /&gt;
&lt;br /&gt;
:Tools related:&lt;br /&gt;
:Add VA support to ffplay (see my older patches)&lt;br /&gt;
  + requires some VO infrastructure work&lt;br /&gt;
  + requires hwaccel hooks&lt;br /&gt;
  + requires enabling vaapi, dxva, bcm, tidsp, whatever&lt;br /&gt;
&lt;br /&gt;
* Add VA support to ffmpeg&lt;br /&gt;
  + requires VA/DRI API, for no X dependency&lt;br /&gt;
  + dependencies: hwaccel v2 to construct pipelines (HW-&amp;gt;HW, HW-&amp;gt;SW, SW-&amp;gt;HW, etc.), or at least allow for VA surface readback wherever necessary.&lt;br /&gt;
&lt;br /&gt;
* VDPAU (hwaccel)&lt;br /&gt;
&lt;br /&gt;
Update and push my older hwaccel-based VDPAU code. It should still work. :)&lt;br /&gt;
:Priority: hwaccel v2 infrastructure work first, ffplay enabling second.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Gwenole Beauchesne''&lt;br /&gt;
&lt;br /&gt;
=== glplay ===&lt;br /&gt;
Add OpenGL output to ffplay, this should allow for better performance (and less bugs at least for some hardware / driver combinations). This could be a new application (glplay), but it is probably simpler to extend ffplay to use OpenGL. You can use code from MPlayer's OpenGL vo module which you may relicense under the LGPL.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Reimar Döffinger''&lt;br /&gt;
&lt;br /&gt;
=== Improve the audio resampling/rematrixing/converting code ===&lt;br /&gt;
&lt;br /&gt;
* Right now, we're using libswresample to resample/rematrix audio (samplerate / channels) and to resample the audio format (int, float, 16-bit, 32-bit).&lt;br /&gt;
* Both interleaved and planar audio sample formats are already supported&lt;br /&gt;
* We need SIMD optimization of popular conversions (float-int16, int16-float), (stereo-mono-5.1) and anything else that's frequently used.&lt;br /&gt;
* We need support for alternate conversion functions (e.g. sample format conversion with or without dithering)&lt;br /&gt;
* Fix bugs in current design (none known but there sure are some)&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Michael|Michael Niedermayer]]''&lt;br /&gt;
&lt;br /&gt;
=== Implement a H.265 / High efficiency video coding (HEVC) decoder ===&lt;br /&gt;
&lt;br /&gt;
* Write a basic decoder supporting I, P, and, if time permits, B slices.&lt;br /&gt;
* It does not need to be ASM/SIMD optimized but its high level structure must permit such optimizations to be easily added later.&lt;br /&gt;
* As a qualification task you need to implement parsing headers and maybe a bit beyond that to demonstrate that you are qualified and understand the HEVC specification. This project requires a solid understanding of video coding and C, it's not something for the average SOC student.&lt;br /&gt;
* A draft spec is available at: http://phenix.it-sudparis.eu/jct/doc_end_user/documents/8_San%20Jose/wg11/JCTVC-H1003-v21.zip&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Michael|Michael Niedermayer]]''&lt;br /&gt;
&lt;br /&gt;
=== H.264 MVC ===&lt;br /&gt;
&lt;br /&gt;
* Add MVC support to our H.264 decoder. MVC is used in 3D Blu-Rays. &lt;br /&gt;
* As qualification you have to do some work that demonstrates your understanding of MVC and that is a subpart of the whole MVC implementation.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Michael|Michael Niedermayer]]''&lt;br /&gt;
&lt;br /&gt;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
Libavfilter is the FFmpeg filtering library that started as a 2007 SoC [[FFmpeg Summer Of Code#Video Filter API (AKA libavfilter)|project]]. It currently supports audio and video filtering and generation support.&lt;br /&gt;
&lt;br /&gt;
The task would consist of writing or porting audio and video filters and eventually fix/extend libavfilter API and design.&lt;br /&gt;
&lt;br /&gt;
In particular the work may focus on porting MPlayer filters which are currently integrated through the mp wrapper.&lt;br /&gt;
For each port the student should verify that the new filter produces the same output (by comparing the output generated by -vf mp=FILTER and -vf FILTER) and checking that the new integrated filter is not slower.&lt;br /&gt;
&lt;br /&gt;
Prerequisites: good C coding skills, familiarity with git/source code control systems, having some background on DSP and image/sound processing techniques would be a bonus but is not strictly required.&lt;br /&gt;
&lt;br /&gt;
For getting more ideas read also the [[FFmpeg_/_Libav_Summer_Of_Code_2011#Libavfilter_video_work|GSoC 2011 libavfilter video proposal]] and [https://ffmpeg.org/trac/ffmpeg/query?status=new&amp;amp;status=open&amp;amp;status=reopened&amp;amp;component=avfilter&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=component&amp;amp;col=version&amp;amp;order=priority trac libavfilter tickets].&lt;br /&gt;
&lt;br /&gt;
Qualification task: a port or a new implementation of one or more filters.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Stefano Sabatini - saste on IRC (possibly with a backup mentor)''.&lt;br /&gt;
&lt;br /&gt;
=== Bayer colorspace formats ===&lt;br /&gt;
&lt;br /&gt;
Several image and video format store pixels using Bayer-pattern colorspaces. Supporting these format would broaden FFmepg's applicability to RAW still and video photography processing. Tasks:&lt;br /&gt;
* Implement bayer transformations in libswscale (plain C)&lt;br /&gt;
* Add bayer formats to the libavutil pixfmt enumeration routines&lt;br /&gt;
* Extend TIFF decoder to support DNG-Bayer format&lt;br /&gt;
* Complete PhotoCINE demuxer to support Bayer format; (or another format of your choosing)&lt;br /&gt;
* SIMD optimizations of the libswscale transformations&lt;br /&gt;
* Decoders/specs may be available in the [[Dcraw]] project&lt;br /&gt;
&lt;br /&gt;
Qualification task: TBD&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Suxen_drol|Peter Ross]]''&lt;br /&gt;
&lt;br /&gt;
=== Extend image formats support ===&lt;br /&gt;
&lt;br /&gt;
Improve FFmpeg support for image formats, adding missing formats (e.g. XPM) and extending support for the current ones (e.g. animated GIF, GIF compression, fix PNG todos, add support to animated PNG) etc.&lt;br /&gt;
&lt;br /&gt;
Qualification task: TBD (possibly finally fixing and integrating Måns' zlib decoder that has been unmerged since ages? Or just starting with some small part of the task itself, or implementing format autodetection for imagepipe demuxer)&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:reimar|Reimar Döffinger]]''&lt;br /&gt;
&lt;br /&gt;
=== DTS-HD decoder ===&lt;br /&gt;
&lt;br /&gt;
* ETSI released specifications (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;
''Mentor: Benjamin Larsson''&lt;br /&gt;
&lt;br /&gt;
=== Libavdevice API ===&lt;br /&gt;
Currently libavdevice use libavformat API. This is far from being useful for real-time video rendering. Your task is to write new API which resolves this and similar issues and port all already present input and output devices to the new API.&lt;br /&gt;
&lt;br /&gt;
New API should have:&lt;br /&gt;
 * Support for output video devices which do not provide own scaler.&lt;br /&gt;
 * Minimal latency.&lt;br /&gt;
&lt;br /&gt;
Qualification task: write one new video outdev, for example any of, but not limited to: aalib, caca, x11, xv, xover, vesa or gl2 using current libavdevice API.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Pbm|Paul B Mahol]]''&lt;br /&gt;
&lt;br /&gt;
=== Redesigning the protocol reads ===&lt;br /&gt;
Eliminate active polling while allowing interrupts, and allowing selection on multiple handles.&lt;br /&gt;
&lt;br /&gt;
''Mentor: Nicolas George''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier (need mentor) Project Proposals ==&lt;br /&gt;
Some of the following proposals are also proposed by other organizations, we will try to coordinate this with them so as to avoid duplicate work.&lt;br /&gt;
We are also happy to hear your personal project ideas ...&lt;br /&gt;
&lt;br /&gt;
=== AAC decoder improvements ===&lt;br /&gt;
Our AAC decoder does not support low-delay. Part of this task will be to also finish last year's BSAC task. A possible qualification task is to fix a crash in the current BSAC code with one of the samples from the BSAC testing suite.&lt;br /&gt;
:Sample: https://ffmpeg.org/trac/ffmpeg/ticket/113&lt;br /&gt;
&lt;br /&gt;
=== AAC encoder improvements ===&lt;br /&gt;
Our AAC encoder does not produce competitive quality per bitrate.&lt;br /&gt;
Improve the encoder to be better than some other commonly used encoder like libfaac.&lt;br /&gt;
This requires solid understanding of things like psychoacoustics and rate distortion.&lt;br /&gt;
A qualification task for this could be to improve the encoder by at least 5% bitrate at the same quality&lt;br /&gt;
measured by some objective measure.&lt;br /&gt;
&lt;br /&gt;
=== FF Fuzzer ===&lt;br /&gt;
Write a system like FATE that fuzzes and tests these fuzzed multimedia files under address sanitizer and valgrind with ffmpeg and ffplay.&lt;br /&gt;
When a crash, or other anomaly is found, it would use git bisect to identify which exact commit introduced the bug.&lt;br /&gt;
And either display this via some web frontend (similar to fate.ffmpeg.org) or just automatically send an email to some&lt;br /&gt;
dedicated mailing list. The system has to be robust (there will be infinite loops, OOM conditions and randomly occurring&lt;br /&gt;
crashes). Its also important that the system is easy to maintain and can filter out duplicates of the same issue.&lt;br /&gt;
&lt;br /&gt;
=== VC1 interlaced ===&lt;br /&gt;
FFmpeg has code for interlaced VC1, but nearly all samples still do not decode correctly. The task is to finish last year's project. You should be able to find a possible qualification task by testing interlaced samples.&lt;br /&gt;
&lt;br /&gt;
&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;
=== Fix and improve FFserver ===&lt;br /&gt;
FFserver has been part of FFmpeg since a long time but due to lack of a motivated maintainer its a bit buggy.&lt;br /&gt;
For this project you would have to debug and fix many bugs. It requires good skills at reading and understanding other peoples code.&lt;br /&gt;
As a qualification task you will have to write functioning regression tests for FFserver which implicates some bugfixing to make ffserver produce the same output on all supported platforms.&lt;br /&gt;
&lt;br /&gt;
=== Support for more subtitle formats ===&lt;br /&gt;
We have libass support now, either a parser (from mplayer) to convert subs into ass or something else.&lt;br /&gt;
* http://mailman.videolan.org/pipermail/vlc-devel/2011-September/081803.html&lt;br /&gt;
* http://ale5000.altervista.org/subtitles.htm&lt;br /&gt;
&lt;br /&gt;
=== MKV ordered chapters / playlist support ===&lt;br /&gt;
Get playlist stuff into ffmpeg. Playlist is blocking a few things like quicktime edit list and .asx / .pls files.&lt;br /&gt;
&lt;br /&gt;
=== Adobe fragmented http in/out ===&lt;br /&gt;
Adobe has a new streaming format.&lt;br /&gt;
* info/spec: http://www.adobe.com/products/httpdynamicstreaming/&lt;br /&gt;
&lt;br /&gt;
=== libavfilter 9/10bit support ===&lt;br /&gt;
Make filters work with higher bitrate codecs/colorspaces&lt;br /&gt;
&lt;br /&gt;
=== Extend paletted format support ===&lt;br /&gt;
&lt;br /&gt;
Cleanup framework for handling better with paletted format, write a posterize filter, add support to libswscale palette output (possibly making use of libavcodec/elbg), add support for reading and saving a palette to a file and apply them to the input video (e.g. by creating ad-hoc filters).&lt;br /&gt;
&lt;br /&gt;
=== Port formats/colorspace support from dcraw or make dcraw wrapper ===&lt;br /&gt;
[[Dcraw]] supports many raw camera formats that ffmpeg may not. Port or make a wrapper for this project.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Compn</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Origin_Flic_Codec</id>
		<title>Origin Flic Codec</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Origin_Flic_Codec"/>
				<updated>2012-02-17T00:42:50Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: categorize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: JYV1, JYA1, RRV1, RRV2&lt;br /&gt;
* Company: Origin Systems &lt;br /&gt;
* Samples: ask Mike &lt;br /&gt;
&lt;br /&gt;
''Please rename this codec name to something more original''&lt;br /&gt;
&lt;br /&gt;
Origin Flic Codec is a relatively simple palettized video codec used in PC version of Crusader: No Remorse game. Data is packaged inside standard [[AVI]] container and employs relatively simple [[RLE]] compression. Audio stored in uncompressed [[PCM]] form. It is rumored that codec's FourCCs are actually based on game developer's names (not confirmed.)&lt;br /&gt;
&lt;br /&gt;
== Video Codec ==&lt;br /&gt;
A video movie uses fixed palette, stored in corresponding AVI Stream Format chunk.&lt;br /&gt;
&lt;br /&gt;
Video frame is encoded in a series of slices, where each slice encodes a number of horizontal lines of picture. Number of slices depends on FourCC and is:&lt;br /&gt;
* JYV1, RRV1 - 5 slices&lt;br /&gt;
* RRV2 - 15 slices&lt;br /&gt;
Therefore, each slice contains VideoHeight/slices raster lines.&lt;br /&gt;
&lt;br /&gt;
Frame chunk consist of the following parts:&lt;br /&gt;
&lt;br /&gt;
 u32 slicetable[num_slices]&lt;br /&gt;
 -- for each slice --&lt;br /&gt;
 u32 codes_size;&lt;br /&gt;
 u8 codes[codes_size]&lt;br /&gt;
 u8 raster[]&lt;br /&gt;
 --------------------&lt;br /&gt;
where each entry of slicetable points to corresponding codes/raster block (offsets are relative to beginning of the chunk.)&lt;br /&gt;
&lt;br /&gt;
Video decompression is performed as follows (for each slice):&lt;br /&gt;
&lt;br /&gt;
 flipflop = flip&lt;br /&gt;
 while slice is not complete&lt;br /&gt;
  idx = GetBits(4);&lt;br /&gt;
  blocksize = BaseLength[idx];&lt;br /&gt;
  if idx != 0 and idx != 8&lt;br /&gt;
    blocksize += GetBits(FineLengthBits[idx]);&lt;br /&gt;
  if flipflop == flip&lt;br /&gt;
    leave blocksize pixels unchanged&lt;br /&gt;
  else&lt;br /&gt;
    draw blocksize pixels from raster[]&lt;br /&gt;
  flip flop&lt;br /&gt;
&lt;br /&gt;
  BaseLength[]     = {0, 1&amp;lt;&amp;lt;7, 1&amp;lt;&amp;lt;3, 0, 1&amp;lt;&amp;lt;1,  0, 1&amp;lt;&amp;lt;5, 0,&lt;br /&gt;
                      1, 1&amp;lt;&amp;lt;8, 1&amp;lt;&amp;lt;4, 0, 1&amp;lt;&amp;lt;2,  0, 1&amp;lt;&amp;lt;6, 0};&lt;br /&gt;
  FineLengthBits[] = {0,    7,    3, 0,    1, 16,    5, 0,&lt;br /&gt;
                      1,    8,    4, 0,    2, 24,    6, 0};&lt;br /&gt;
&lt;br /&gt;
GetBits() reads variable number of bits from codes[], highest bits of lowest byte first.&lt;br /&gt;
For RRV* FourCCs 'leave' and 'draw' command skips/doubles each pixel when decoding a keyframe (i.e. a keyframe should be upscaled horizontally.)&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=HNM6</id>
		<title>HNM6</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=HNM6"/>
				<updated>2012-02-05T17:30:53Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* Normal decoding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: hnm &lt;br /&gt;
* Company: CRYO Interactive Entertainment &lt;br /&gt;
* Samples: &lt;br /&gt;
&lt;br /&gt;
HNM6 is the latest variant of [[HNM]] video format by Cryo. Unlike its previous versions, it has Hi-color video support.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
File consist of a main header, followed by frame chunks. Each frame chunk consist of individual audio and video chunks. All numbers are little-endian.&lt;br /&gt;
&lt;br /&gt;
 u8   sig[4]           -- file signature, &amp;quot;HNM6&amp;quot;&lt;br /&gt;
 u8   reserved[2]      -- usually 0&lt;br /&gt;
 u8   audioflags       -- nonzero value indicates file has APC sound (not authoritative), bits meaning:&lt;br /&gt;
                             7 : stereo&lt;br /&gt;
                          6..5 : frequency in units of 11025Hz (i.e. frequency = value * 11025)&lt;br /&gt;
 u8   bpp&lt;br /&gt;
 u16  width&lt;br /&gt;
 u16  height&lt;br /&gt;
 u32  filesize&lt;br /&gt;
 u16  frames           -- number of frames&lt;br /&gt;
 u16  frames2          -- upper part of frame counter, ignored by some implementations&lt;br /&gt;
 u32  reserved3        -- usually 0, but sometimes &amp;quot;V107&amp;quot;, &amp;quot;V108&amp;quot; - version?&lt;br /&gt;
 u16  speed            -- playback speed in fps, may be zero (?assume 15 fps then?)&lt;br /&gt;
 u16  maxbuffer        -- number of frame buffers used&lt;br /&gt;
 u32  maxchunk         -- max frame chunk size&lt;br /&gt;
 u8   note[16]&lt;br /&gt;
 u8   copyright[16]    -- &amp;quot;-Copyright CRYO-&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Each frame chunk begins with u32 chunk size (including this size field), then followed by frame's individual chunks:&lt;br /&gt;
&lt;br /&gt;
  u32  chunksize       -- chunk size including this field, excluding padding&lt;br /&gt;
  u16  chunkid         -- TWOCC chunk id&lt;br /&gt;
  u16  reserved&lt;br /&gt;
  u8   data[]&lt;br /&gt;
  u8   padding[]       -- pads chunk to 4-byte boundary&lt;br /&gt;
&lt;br /&gt;
=== AA Chunk ===&lt;br /&gt;
APC Audio. See [[CRYO APC]]&lt;br /&gt;
&lt;br /&gt;
=== BB Chunk ===&lt;br /&gt;
Audio continuation.&lt;br /&gt;
&lt;br /&gt;
=== IW Chunk ===&lt;br /&gt;
Video frame, WARP format.&lt;br /&gt;
&lt;br /&gt;
=== IX Chunk ===&lt;br /&gt;
Video frame, normal format.&lt;br /&gt;
&lt;br /&gt;
== Format modifications ==&lt;br /&gt;
&lt;br /&gt;
At least one known game (Riverworld) uses slightly different HNM6 container format, most likely due to different sound encoding. This format is just a small enhancement of the original, but it's not backward compatible.&lt;br /&gt;
&lt;br /&gt;
Standard HNM6 header continues with additional audio description header:&lt;br /&gt;
&lt;br /&gt;
 u32  freq&lt;br /&gt;
 u32  bits&lt;br /&gt;
 u32  channels&lt;br /&gt;
 u32  ?&lt;br /&gt;
 u32  ?&lt;br /&gt;
 u8   copyright[28]  -- &amp;quot;HNMS 1.1 by SARRET Hubert\0\0\0&amp;quot;&lt;br /&gt;
 u32  ?              -- some initial audio samples?&lt;br /&gt;
 u32  ?&lt;br /&gt;
 u32  ?&lt;br /&gt;
 u32  ?&lt;br /&gt;
&lt;br /&gt;
Each frame chunk followed by an audio chunk, however, this audio chunk size is not counted by frame's chunk size field.&lt;br /&gt;
Audio chunk format:&lt;br /&gt;
&lt;br /&gt;
 u32  sig[4]          -- &amp;quot;SOUN&amp;quot;&lt;br /&gt;
 u32  chunksize       -- including this preamble&lt;br /&gt;
 u8   data[]&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
The video compression relies on a concept of Key-blocks, encoded with [[JPEG]]-like algorithm and motion blocks, derived from previously drawn blocks. The frame is encoded in 8x8 or smaller blocks. The Key-blocks are always 8x8 and directly encoded, while motion blocks heavily rely on [[D&amp;amp;C]] approach and various block transformation techniques. Generally, this codec is quite similar to [[4XM]] codec and [[Mobiclip]] codecs, because it's written by the same people.&lt;br /&gt;
&lt;br /&gt;
There are two variants of HNM6 video codec.&lt;br /&gt;
* WARP codec. Prototype codec, simplified version. Used in a very little number of games circa 1997.&lt;br /&gt;
* Normal (yes, that's how it's called internally) codec. Fully-featured version, widely used.&lt;br /&gt;
&lt;br /&gt;
Both version has identical bitstream layout. Frame data begins this the following header:&lt;br /&gt;
&lt;br /&gt;
 s32  quality            -- JPEG quality index, negative value indicates that the frame is a keyframe&lt;br /&gt;
 u32  bitbuffer          -- offset of bitbuffer&lt;br /&gt;
 u32  motionbuffer       -- offset of motion vector buffer&lt;br /&gt;
 u32  shortmotionbuffer  -- offset of short motion vector buffer&lt;br /&gt;
 u32  jpegbuffer         -- offset of jpeg data buffer&lt;br /&gt;
 u32  jpegend            -- offset of jpeg data buffer end&lt;br /&gt;
&lt;br /&gt;
All offsets are little-endian and relative to this header.&lt;br /&gt;
&lt;br /&gt;
* quality is a standard [[JPEG]] quality value (0..100%). Negative value is used to specify a keyframe (for Normal codec only.)&lt;br /&gt;
* bitbuffer points to frame's VLC-encoded macroblocks. This kind of data is accessed by a bit-reader with 32-bit internal queue, MSB bit comes out first.&lt;br /&gt;
* motion buffer points to array of u16 motion vectors, used to copy blocks from various areas of the frame&lt;br /&gt;
* short motion buffer is used for accessing blocks near the current macroblock. Each entry of buffer is 12 bits long, accessed in LSB order.&lt;br /&gt;
* jpeg buffer points to array of encoded [[JPEG]] macroblocks&lt;br /&gt;
&lt;br /&gt;
=== Key-blocks decoding ===&lt;br /&gt;
Key-blocks are JPEG-encoded blocks in YUV 4:4:4 format. The requantization, [[IDCT]] and colorspace conversion steps are identical to standard [[JPEG]]. Standard zigzag (0,1,8,16,9,...) and quantization tables (16,11,10,16, 24,...; 17,18,24,47,99,...) used as well. &lt;br /&gt;
&lt;br /&gt;
The only custom feature used is the coefficients encoding. Instead of Huffman coding they are stored using RLE scheme.&lt;br /&gt;
&lt;br /&gt;
Macroblock's jpeg data is accessed by 4-bit nibbles, lower nibble of each byte first. Also, the following primitives are used:&lt;br /&gt;
* half - half of a nibble, upper part first, then lower (i.e. read a nibble, process upper part of it upon first use, lower part upon second)&lt;br /&gt;
* s2 - signed two-bit 2's complement value of a half, no zero point (i.e. 0b00 -&amp;gt; 1, 0b01 -&amp;gt; 2, 0b10 -&amp;gt; -2, 0b11 -&amp;gt; -1)&lt;br /&gt;
* s4 - signed four-bit 2's complement value of a nibble, no zero point&lt;br /&gt;
* s44 - signed eight-bit value of two nibbles, with zero point (this is basically (signextend(nibble1) &amp;lt;&amp;lt; 4) | nibble2)&lt;br /&gt;
&lt;br /&gt;
For each plane of 8x8 coefficients, the first coefficient is s44, then read nibbles and fill the rest of coefficients as follows until the whole plane is complete. Repeat for each Y, U and V plane.&lt;br /&gt;
&lt;br /&gt;
  0 - fill remainder of a plane with zeros&lt;br /&gt;
  1 - 0, 0, 0, 0&lt;br /&gt;
  2 - 0, 1&lt;br /&gt;
  3 - 0, -1&lt;br /&gt;
  4 - 0, 0, 1&lt;br /&gt;
  5 - 0, 0, -1&lt;br /&gt;
  6 - 0, 0, 0, 1&lt;br /&gt;
  7 - 0, 0, 0, -1&lt;br /&gt;
  8 - zeros = half, tail = half&lt;br /&gt;
      fill (zeros+1) coefficients with 0&lt;br /&gt;
      fill (tail+2) coefficients with s2&lt;br /&gt;
  9 - zeros = half, tail = half&lt;br /&gt;
      fill (zeros+1) coefficients with 0&lt;br /&gt;
      fill (tail+1) coefficients with s4&lt;br /&gt;
 10 - s2, s2&lt;br /&gt;
 11 - s4&lt;br /&gt;
 12 - s4, s4&lt;br /&gt;
 13 - s4, s4, s4&lt;br /&gt;
 14 - 0&lt;br /&gt;
 15 - s44&lt;br /&gt;
&lt;br /&gt;
=== WARP decoding ===&lt;br /&gt;
Macroblocks are encoded using the following VLC codes:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! Block type !! 8x8 !! 4x4 &lt;br /&gt;
|-&lt;br /&gt;
| Keyblock || 11 || n/a&lt;br /&gt;
|-&lt;br /&gt;
| Motion || 10 || 0&lt;br /&gt;
|-&lt;br /&gt;
| CrossCut || 0 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Keyblock is a JPEG-encoded macroblock.&lt;br /&gt;
* CrossCut means that the current block should be cut on to 4 smaller subblocks and each one processed independently, using the same scheme recursively.&lt;br /&gt;
* Motion means that the block is motion-coded and should be copied from some other part of the frame. To do so, read the next entry of the motion buffer and process it as follows:&lt;br /&gt;
** transformation mode = next 2 bits from bitbuffer (upper part) combined with bit 15 of motion (lower bit)&lt;br /&gt;
** xmotion = 128 - (bits 7..14 of motion)&lt;br /&gt;
** ymotion = (if block is not 8x8, then 4) - (bits 0..6 of motion)&lt;br /&gt;
* 2x2 blocks are always short motion coded, using no extra VLC:&lt;br /&gt;
** transformation mode = bits 1..3 of short motion&lt;br /&gt;
** motion index = bit 0 || bits 4..7 || bits 8..11 (total 9 bits)&lt;br /&gt;
** decode the index as follows:&lt;br /&gt;
 if index &amp;lt; 12 * 8&lt;br /&gt;
   xmotion = -2 - index % 12&lt;br /&gt;
   ymotion =  6 - index / 12&lt;br /&gt;
 else&lt;br /&gt;
   index -= 12 * 8&lt;br /&gt;
   xmotion = 19 - index % 32&lt;br /&gt;
   ymotion = -2 - index / 32&lt;br /&gt;
   if ymotion &amp;lt;= -8&lt;br /&gt;
    ymotion = ymotion - 1&lt;br /&gt;
&lt;br /&gt;
Block's source coordinates are the sum of current 8x8 macroblock's coordinates (not its subblock's!) and the xmotion and ymotion respectively. If x-coordinate happens to go out of frame, it should be wrapped around the line. Copy block at the following coordinates to the current, applying the transformation as specified.&lt;br /&gt;
&lt;br /&gt;
=== Normal decoding ===&lt;br /&gt;
Normal compression introduces interframes, more split modes and different short motion encoding.&lt;br /&gt;
&lt;br /&gt;
Macroblocks are encoded using the following VLC codes:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! Block type !! 8x8 !! 4x8 !! 8x4 !! 4x4 !! 2x4 !! 4x2 !! 2x2&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align: center;&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | Keyframe&lt;br /&gt;
|-&lt;br /&gt;
| Keyblock || 110 || n/a || n/a || n/a || n/a || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| HorizontalCut || 00 || 0 || n/a || 01 || 1 || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| VerticalCut || 01 || n/a || 0 || 10 || n/a || 1 || n/a&lt;br /&gt;
|-&lt;br /&gt;
| CrossCut || 10 || n/a || n/a || 11 || n/a || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| Motion || 111 || 1 || 1 || 00 || 0 || 0  || n/a&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align: center;&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | Interframe&lt;br /&gt;
|-&lt;br /&gt;
| Keyblock || 011 || n/a || n/a || n/a || n/a || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| HorizontalCut || 100 || 10 || n/a || 101 || 111 || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| VerticalCut || 101 || n/a || 10 || 110 || n/a || 111 || n/a&lt;br /&gt;
|-&lt;br /&gt;
| CrossCut || 1110 || n/a || n/a || 111 || n/a || n/a || n/a&lt;br /&gt;
|-&lt;br /&gt;
| Skip || 110 || 11 || 11 || 100 || 110 || 110 || 11&lt;br /&gt;
|-&lt;br /&gt;
| ShortMotion || 00 || 00 || 00 || 00 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| Motion || 010 || 01 || 01 || 01 || 10 || 10 || 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* HorizontalCut splits the block horizontally, producing two subblocks of smaller height. Each one then processed recursively.&lt;br /&gt;
* VerticalCut is identical to HorizontalCut, but splits the block vertically.&lt;br /&gt;
* Skip simply copies the block from the previous frame.&lt;br /&gt;
* ShortMotion copies block from previous frame, using the spiral-encoded motion. Unlike regular motion, short motion is relative to subblock's coordinates, not the whole macroblock. Read ShortMotion index, then obtain block's relative coordinates as per illustration:&lt;br /&gt;
[[Image:HNM6Spiral.png]]&lt;br /&gt;
* Motion blocks are similar to WARP motion block, with minor enhancements:&lt;br /&gt;
** For keyframe motion is the same as for WARP, with the exception for blocks smaller than 4x4. For such blocks:&lt;br /&gt;
*** transformation mode = bits 12.14 of motion&lt;br /&gt;
*** xmotion = 63 - (bits 0..6 of motion)&lt;br /&gt;
*** ymotion = 6 - (bits 7..11 of motion)&lt;br /&gt;
** Keyframe's 2x2 blocks are always motion-coded as above.&lt;br /&gt;
&lt;br /&gt;
** For interframe motion is different. For blocks 4x4 and larger:&lt;br /&gt;
*** transformation mode = next 3 bits from bitbuffer&lt;br /&gt;
*** if bit 15 of motion is zero then source is the previous frame, current frame otherwise&lt;br /&gt;
*** xmotion = 128 - (bits 7..14 of motion)&lt;br /&gt;
*** ymotion = (if from previous frame then 64, otherwise if block is not 8x8, then 4) - (bits 0..6 of motion)&lt;br /&gt;
** For blocks smaller than 4x4:&lt;br /&gt;
*** if bit 15 of motion is zero then source is the previous frame, current frame otherwise&lt;br /&gt;
*** if from current frame - same as for keyframe, see above. for previous frame:&lt;br /&gt;
*** transformation mode = next 3 bits from bitbuffer&lt;br /&gt;
*** xmotion = 31 - (bits 0..5 of motion)&lt;br /&gt;
*** ymotion = 31 - (bits 6..11 of motion)&lt;br /&gt;
** Don't forget to wrap x motion around the line if it goes out of frame.&lt;br /&gt;
&lt;br /&gt;
=== Block transformation ===&lt;br /&gt;
During block copying, it can be additionally transformed. Transformation modes:&lt;br /&gt;
==== 0 - Normal copy ====&lt;br /&gt;
Copy block as is.&lt;br /&gt;
==== 1 - Horizontal flip ====&lt;br /&gt;
Swap left and right:&lt;br /&gt;
 abc -&amp;gt; cba&lt;br /&gt;
==== 2 -  Vertical flip ====&lt;br /&gt;
Swap up and down:&lt;br /&gt;
 a    c&lt;br /&gt;
 b -&amp;gt; b&lt;br /&gt;
 c    a&lt;br /&gt;
==== 3 - Cross flip ====&lt;br /&gt;
Swap both up-down and left-right:&lt;br /&gt;
 ab    fe&lt;br /&gt;
 cd -&amp;gt; dc&lt;br /&gt;
 ef    ba&lt;br /&gt;
==== 4 - Forward flip ====&lt;br /&gt;
Swap block around / :&lt;br /&gt;
 ab -&amp;gt; db &lt;br /&gt;
 cd    ca&lt;br /&gt;
==== 5 - Forward rotate ====&lt;br /&gt;
Rotate block 90 degrees clockwise:&lt;br /&gt;
 ab    eca    fe&lt;br /&gt;
 cd -&amp;gt; fdb -&amp;gt; dc&lt;br /&gt;
 ef           ba&lt;br /&gt;
==== 6 - Backward rotate ====&lt;br /&gt;
Rotate block 90 degrees counterclockwise:&lt;br /&gt;
 ab    bdf    fe&lt;br /&gt;
 cd -&amp;gt; ace -&amp;gt; dc&lt;br /&gt;
 ef           ba&lt;br /&gt;
==== 7 - Backward flip ====&lt;br /&gt;
Swap block around \ :&lt;br /&gt;
 ab -&amp;gt; ac&lt;br /&gt;
 cd    bd&lt;br /&gt;
&lt;br /&gt;
=== Bitexact decoding ===&lt;br /&gt;
While you can use stock [[JPEG]] routines to decode Key-blocks, if you want to produce bitexact output you need to use very specific code to do so.&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code_2012</id>
		<title>FFmpeg / Libav Summer Of Code 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code_2012"/>
				<updated>2012-01-27T09:52:16Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: fix category&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;
Note that this is a difficult project. Do not try to apply unless you already have experience with H.264 as well as reading and writing complex C code.&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:Libav]]&lt;/div&gt;</summary>
		<author><name>Ronald S. Bultje</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Maxis_UTalk</id>
		<title>Maxis UTalk</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Maxis_UTalk"/>
				<updated>2012-01-15T03:47:21Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: UTK&lt;br /&gt;
* Company: Maxis&lt;br /&gt;
* Decompression code: http://wiki.niotso.org/UTK&lt;br /&gt;
* Samples: http://niotso.org/utalk/&lt;br /&gt;
&lt;br /&gt;
Maxis UTalk is a speech-oriented audio codec used in The Sims Online, which is based on CELP and operates at 32kbit/s.&lt;br /&gt;
&lt;br /&gt;
== UTK File header ==&lt;br /&gt;
&amp;lt;pre&amp;gt;struct UTKHeader&lt;br /&gt;
{&lt;br /&gt;
    char  sID[4];&lt;br /&gt;
    DWORD dwOutSize;&lt;br /&gt;
    DWORD dwWfxSize;&lt;br /&gt;
    /* WAVEFORMATEX */&lt;br /&gt;
    WORD  wFormatTag;&lt;br /&gt;
    WORD  nChannels;&lt;br /&gt;
    DWORD nSamplesPerSec;&lt;br /&gt;
    DWORD nAvgBytesPerSec;&lt;br /&gt;
    WORD  nBlockAlign;&lt;br /&gt;
    WORD  wBitsPerSample;&lt;br /&gt;
    DWORD cbSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''sID''' - A 4-byte string identifier equal to &amp;quot;UTM0&amp;quot;&lt;br /&gt;
* '''dwOutSize''' - The decompressed size of the audio stream&lt;br /&gt;
* '''dwWfxSize''' - The size in bytes of the WAVEFORMATEX structure to follow; must be 20&lt;br /&gt;
* '''wFormatTag''' - The decoded audio format; set to WAVE_FORMAT_PCM (0x0001)&lt;br /&gt;
* '''nChannels''' - Number of channels in the decoded audio data&lt;br /&gt;
* '''nSamplesPerSec''' - Sampling rate used in the decoded audio data&lt;br /&gt;
* '''nAvgBytesPerSec''' - Bytes per second consumed by the decoded audio data; equal to nChannels*nSamplesPerSec*wBitsPerSample/8 or nSamplesPerSec*nBlockAlign&lt;br /&gt;
* '''nBlockAlign''' - The number of bytes consumed by an audio frame (one sample for each channel) in the decoded audio data; equal to nChannels*wBitsPerSample/8&lt;br /&gt;
* '''wBitsPerSample''' - The bits per sample for one audio channel in the decoded audio data; 8-, 16-, or 24-bit, etc.&lt;br /&gt;
* '''cbSize''' - The size in bytes of extra format information appended to the end of the WAVEFORMATEX structure; must be 0. Note that in the original WAVEFORMATEX, this parameter is a WORD, not a DWORD.&lt;br /&gt;
&lt;br /&gt;
Note that the part of the header from wFormatTag below is a Microsoft WAVEFORMATEX structure.&lt;br /&gt;
&lt;br /&gt;
== Naming notes ==&lt;br /&gt;
The UTK files in The Sims Online were stored in DBPF archives without filenames. However, we can deduce the codec's name and file extension from this text contained in sys/tsoaudio.ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;kGZCLSID_cWaveXA = 0x1d07eb4b&lt;br /&gt;
;kGZCLSID_cGZSndSegmentDataSourceUTalk = 0x1b6b9806&lt;br /&gt;
;kGZCLSID_cGZWave = 0xbb7051f5&lt;br /&gt;
;kGZCLSID_cHitMp3DecoderDataSource = 0x3cec2b47&lt;br /&gt;
1=0x1d07eb4b,XA&lt;br /&gt;
2=0x1b6b9806,UTK&lt;br /&gt;
3=0xbb7051f5,WAV&lt;br /&gt;
4=0x3cec2b47,MP3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WAV and MP3 are common audio formats, and XA refers to the [[Maxis XA]] ADPCM codec (with extension &amp;quot;.xa&amp;quot; in The Sims 1); and most importantly, the UTK files in the DBPF archives have a Type ID that match 0x1b6b9806.&lt;br /&gt;
&lt;br /&gt;
[[Category:Vocoders]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>Fatbag</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Libav/ReleaseHowto</id>
		<title>Libav/ReleaseHowto</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav/ReleaseHowto"/>
				<updated>2011-12-31T14:25:15Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: Replace backtics by superior $() syntax.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LibavReleaseHowto == &lt;br /&gt;
&lt;br /&gt;
These are more or less personal notes how Libav releases and point release tarballs are rolled.&lt;br /&gt;
&lt;br /&gt;
=== Checklist for release preparation ===&lt;br /&gt;
&lt;br /&gt;
* If necessary, create a new release tracking bug&lt;br /&gt;
* (constantly) Backport interesting patches from trunk&lt;br /&gt;
* check the bugzilla release tracking bug&lt;br /&gt;
* update Changelog, use 'git log --oneline' for inspiration&lt;br /&gt;
* Write/Review News entry for http://libav.org&lt;br /&gt;
&lt;br /&gt;
=== Roll, sign and publish tarballs ===&lt;br /&gt;
&lt;br /&gt;
* For 0.6 and later, update the VERSION file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
echo '$VERSION' &amp;gt; VERSION&amp;lt;br/&amp;gt;&lt;br /&gt;
git add VERSION&amp;lt;br/&amp;gt;&lt;br /&gt;
git commit -m&amp;quot;Update Version identification for $(cat VERSION)&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* push the changelog to repository&lt;br /&gt;
** git push ...&lt;br /&gt;
&lt;br /&gt;
* create an annotated tag:&lt;br /&gt;
** git tag -a v$VERSION -m&amp;quot;$VERSION Release&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* For 0.7 and later, create a VERSION file from the RELEASE file (don't commit/push this)&lt;br /&gt;
** &amp;lt;code&amp;gt;cp -v RELEASE VERSION&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create the release tarball&lt;br /&gt;
** &amp;lt;code&amp;gt;tar czv --xform=&amp;quot;s,^./,libav-$VERSION/,&amp;quot; --exclude=.git -f /tmp/libav-$VERSION.tar.gz .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Testcompile this tarball&lt;br /&gt;
&lt;br /&gt;
* Create the xz variant:&lt;br /&gt;
** &amp;lt;code&amp;gt;zcat /tmp/libav-$VERSION.tar.gz | xz &amp;gt; /tmp/libav-$VERSION.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* GPG signatures:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
gpg -ab /tmp/libav-$VERSION.tar.gz&amp;lt;br/&amp;gt;&lt;br /&gt;
gpg -ab /tmp/libav-$VERSION.tar.xz&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Copy release notes and changelog:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cp -v Changelog /tmp/libav-$VERSION.changelog&amp;lt;br/&amp;gt;&lt;br /&gt;
cp -v doc/RELEASE_NOTES /tmp/libav-$VERSION.release&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install tarballs to libav.org: &lt;br /&gt;
** &amp;lt;code&amp;gt;scp /tmp/libav-$(cat VERSION).* libav.org:releases&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Publish the release ===&lt;br /&gt;
&lt;br /&gt;
* push the created, *annotated* tags&lt;br /&gt;
* Publish the prepared News entry for http://libav.org&lt;br /&gt;
&lt;br /&gt;
* Enjoy!&lt;/div&gt;</summary>
		<author><name>Siretart</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Codecs_using_unitialized_memory</id>
		<title>Codecs using unitialized memory</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Codecs_using_unitialized_memory"/>
				<updated>2011-12-25T15:18:04Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Removing memset(128) from video_get_buffer() or avconv's own get_buffer() breaks some FATE tests. This means that those decoders are using unitialized memory; this should be fixed. The following tests fail:&lt;br /&gt;
* bethsoft-vid&lt;br /&gt;
* cdgraphics&lt;br /&gt;
* ansi&lt;br /&gt;
* aasc&lt;br /&gt;
* fraps-v1&lt;br /&gt;
* qtrle-1bit&lt;/div&gt;</summary>
		<author><name>Elenril</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Dxtory</id>
		<title>Dxtory</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Dxtory"/>
				<updated>2011-12-09T10:24:40Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: xtor&lt;br /&gt;
* Company: [http://dxtory.com/ Dxtory]&lt;br /&gt;
&lt;br /&gt;
The Dxtory video codec is used to store in real-time data that is captured from high frame-rate computer games played on Windows PCs using DirectX/OpenGL.&lt;br /&gt;
&lt;br /&gt;
Frame data consists of 16-byte header and YV12 blocks (2x2 block of luma and two bytes for chroma).&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Screen Capture Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Kostya</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Libavfilter_Shortcomings</id>
		<title>Libavfilter Shortcomings</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libavfilter_Shortcomings"/>
				<updated>2011-12-04T19:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: remove addresed stuff&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 support for reconfiguration&lt;br /&gt;
* Avisynth-like features (script files, random access to source frames)&lt;br /&gt;
* higher-bit-depth support in most scenarios&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=High_Efficiency_Video_Coding</id>
		<title>High Efficiency Video Coding</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=High_Efficiency_Video_Coding"/>
				<updated>2011-11-30T20:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: minor rewording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;High Efficiency Video Coding (HEVC) is an emerging video coding standard that is scheduled to succeed [[H.264]]. As the successor to H.264, it is sometimes called H.265, though that is not an official name.&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Libav_libavcodec_HOWTO</id>
		<title>Libav libavcodec HOWTO</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav_libavcodec_HOWTO"/>
				<updated>2011-11-16T02:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &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>http://wiki.multimedia.cx/index.php?title=Libav_demuxer_HOWTO</id>
		<title>Libav demuxer HOWTO</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav_demuxer_HOWTO"/>
				<updated>2011-11-15T03:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &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>http://wiki.multimedia.cx/index.php?title=Libav_technical</id>
		<title>Libav technical</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav_technical"/>
				<updated>2011-11-14T02:16:06Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: Update tutorial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Demuxer stuff ==&lt;br /&gt;
=== How to use demuxer with raw data ===&lt;br /&gt;
In order to demux raw data you need to parse the raw bistream and extract two kind of information: the frame data and the codec extradata.&lt;br /&gt;
We name those two activities parse and split. '''parse''' is used to reconstruct precisely one frame from raw packets, '''split''' is used for extracting extradata from the same stream.&lt;br /&gt;
&lt;br /&gt;
An AVParser declarations for the bitstream XXX will look like this:&lt;br /&gt;
&lt;br /&gt;
  typedef struct XXXParseContext{&lt;br /&gt;
     ParseContext pc; /* always include this first */&lt;br /&gt;
     another data&lt;br /&gt;
  };&lt;br /&gt;
  AVParser some_parser = {&lt;br /&gt;
     { CODEC_ID_1 [CODEC_ID_2, ...] },&lt;br /&gt;
    sizeof (XXXParseContext),&lt;br /&gt;
    NULL, /* usually there is no need in parser_open */&lt;br /&gt;
    xxx_parse,&lt;br /&gt;
    ff_parse_close, /* again, use standard close function */&lt;br /&gt;
    xxx_split,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
And here is the code for some parser which splits frame by some markers:&lt;br /&gt;
&lt;br /&gt;
  static int xxx_find_frame_end(XXXParseContext *pc1, const uint8_t *buf,&lt;br /&gt;
                               int buf_size) {&lt;br /&gt;
    int start_found, i;&lt;br /&gt;
    uint32_t state;&lt;br /&gt;
    ParseContext *pc = &amp;amp;pc1-&amp;gt;pc;&lt;br /&gt;
    start_found= pc-&amp;gt;frame_start_found;&lt;br /&gt;
    state= pc-&amp;gt;state;&lt;br /&gt;
    i=0;&lt;br /&gt;
    if(!start_found){&lt;br /&gt;
        for(i=0; i&amp;lt;buf_size; i++){&lt;br /&gt;
            state= (state&amp;lt;&amp;lt;8) | buf[i];&lt;br /&gt;
            if(state == MARKER){&lt;br /&gt;
                start_found=1;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(start_found){&lt;br /&gt;
        for(; i&amp;lt;buf_size; i++){&lt;br /&gt;
            state= (state&amp;lt;&amp;lt;8) | buf[i];&lt;br /&gt;
            if(state == MARKER){&lt;br /&gt;
                pc-&amp;gt;frame_start_found= 0;&lt;br /&gt;
                pc-&amp;gt;state= -1;&lt;br /&gt;
                return i-3;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    pc-&amp;gt;frame_start_found= start_found;&lt;br /&gt;
    pc-&amp;gt;state= state;&lt;br /&gt;
    return END_NOT_FOUND;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  static int xxx_parse(AVCodecParserContext *s,&lt;br /&gt;
                           AVCodecContext *avctx,&lt;br /&gt;
                           uint8_t **poutbuf, int *poutbuf_size,&lt;br /&gt;
                           const uint8_t *buf, int buf_size)&lt;br /&gt;
  {&lt;br /&gt;
    XXXParseContext *pc1 = s-&amp;gt;priv_data;&lt;br /&gt;
    ParseContext *pc = &amp;amp;pc1-&amp;gt;pc;&lt;br /&gt;
    int next;&lt;br /&gt;
    if(s-&amp;gt;flags &amp;amp; PARSER_FLAG_COMPLETE_FRAMES){&lt;br /&gt;
        next= buf_size;&lt;br /&gt;
    }else{&lt;br /&gt;
        next= xxx_find_frame_end(pc1, buf, buf_size);&lt;br /&gt;
        if (ff_combine_frame(pc, next, (uint8_t **)&amp;amp;buf, &amp;amp;buf_size) &amp;lt; 0) {&lt;br /&gt;
            *poutbuf = NULL;&lt;br /&gt;
            *poutbuf_size = 0;&lt;br /&gt;
            return buf_size;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    *poutbuf = (uint8_t *)buf;&lt;br /&gt;
    *poutbuf_size = buf_size;&lt;br /&gt;
    return next;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Decoder stuff ==&lt;br /&gt;
&lt;br /&gt;
=== How to use delta frames ===&lt;br /&gt;
There are two ways: either use your own buffer for frame data or reget old frame and modify it.&lt;br /&gt;
This can be done by calling reget_buffer() instead of get_buffer().&lt;br /&gt;
Usual code:&lt;br /&gt;
&lt;br /&gt;
    if(avctx-&amp;gt;get_buffer(avctx, &amp;amp;c-&amp;gt;pic) &amp;lt; 0){&lt;br /&gt;
        av_log(avctx, AV_LOG_ERROR, &amp;quot;get_buffer() failed\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
New code:&lt;br /&gt;
&lt;br /&gt;
    c-&amp;gt;pic.reference = 1;&lt;br /&gt;
    c-&amp;gt;pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;&lt;br /&gt;
    if(avctx-&amp;gt;reget_buffer(avctx, &amp;amp;c-&amp;gt;pic) &amp;lt; 0){&lt;br /&gt;
        av_log(avctx, AV_LOG_ERROR, &amp;quot;reget_buffer() failed\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== How to use bitstream ===&lt;br /&gt;
There are two bitstream reading methods - MSB and 32-bit little-endian word. In order to use the second you need to #define ALT_BITSTREAM_READER_LE before including bitstream.h.&lt;br /&gt;
&lt;br /&gt;
Simple bitstream writing:&lt;br /&gt;
&lt;br /&gt;
  PutBitContext pb;&lt;br /&gt;
  init_put_bits(&amp;amp;pb, buffer, max_bytes); // max_bytes is buffer size to avoid out-of-bounds write&lt;br /&gt;
  put_bits(&amp;amp;pb, 13, value); // Note that the second argument is value size in bits, not actual value&lt;br /&gt;
  size = put_bits_count(&amp;amp;pb); // get the number of bits written so far&lt;br /&gt;
  flush_put_bits(&amp;amp;pb); // call this to finish bit writing so bits won't be lost in buffer&lt;br /&gt;
&lt;br /&gt;
Simple bitstream reading:&lt;br /&gt;
&lt;br /&gt;
  GetBitContext gb;&lt;br /&gt;
  init_get_bits(&amp;amp;gb, buffer, buffer_size * 8); // init_get_bits() expects buffer size in _bits_&lt;br /&gt;
  a = get_bits(&amp;amp;gb, 16); // read some bits from stream&lt;br /&gt;
  b = get_sbits(&amp;amp;gb, 15); // read some bits from stream as signed integer&lt;br /&gt;
  c = get_bits_long(&amp;amp;gb, 18); // get_bits() is guaranteed to work only for bits &amp;lt;= 17, for greater values use get_bits_long()&lt;br /&gt;
  d = show_bits(&amp;amp;gb, 5); // peek bits but don't change position in bitstream, also has show_bits_long() counterpart&lt;br /&gt;
&lt;br /&gt;
Variable-length codes reading is also quite simple.&lt;br /&gt;
&lt;br /&gt;
  VLC vlc;&lt;br /&gt;
  init_vlc(&amp;amp;vlc, MAX_BITS, codes_size,&lt;br /&gt;
             bits, bits_skip, sizeof(bits[0]),&lt;br /&gt;
             codes, codes_skip, sizeof(codes[0]), flags);&lt;br /&gt;
  value = get_vlc2(&amp;amp;gb, vlc.table, MAX_BITS, wrap);&lt;br /&gt;
  free_vlc(&amp;amp;vlc);&lt;br /&gt;
&lt;br /&gt;
Notes on VLC reading:&lt;br /&gt;
* MAX_BITS is the maximum code length but not greater than 9 (i.e. if max codeword length is 5 then MAX_BITS=5 but if max codeword length is 15 then MAX_BITS=6)&lt;br /&gt;
* *_skip should be either equal to sizeof() if bits and codes are stored in separate tables or = ((uint8_t*)bits[1])-((uint8_t*)bits[0]). For example if you store all in struct { char bits; short value;} codes[100] you should call&lt;br /&gt;
&lt;br /&gt;
  init_vlc(&amp;amp;vlc, MAX_BITS, 100, &amp;amp;codes[0].bits, sizeof(codes[0]), 1, &amp;amp;codes[0].value, sizeof(codes[0]), 2, 0);&lt;br /&gt;
&lt;br /&gt;
* flags may be:&lt;br /&gt;
** INIT_VLC_USE_STATIC - init codes statically ( free_vlc() is not needed)&lt;br /&gt;
** INIT_VLC_LE - use alternative VLC reading mode&lt;br /&gt;
&lt;br /&gt;
* wrap = ceil(REAL_MAX_BITS/MAX_BITS) and should not be greater than 3. For example is maximum codeword size is 15 then wrap = ceil(15/9) = 2&lt;br /&gt;
&lt;br /&gt;
=== How to use frame reordering ===&lt;br /&gt;
The simpliest way is to adapt decode_frame() from h263dec.c to your needs (that will also require to include MpegEncContext into your codec context).&lt;br /&gt;
&lt;br /&gt;
=== Some example decoder ===&lt;br /&gt;
The simpliest decoder that does not even use bitstream reading is ATI VCR1 decoder, file libavcodec/vcr1.c.&lt;br /&gt;
&lt;br /&gt;
For simple codec with VLC reading look at WNV1 (file libavcodec/wnv1.c).&lt;br /&gt;
&lt;br /&gt;
For simple delta-frame codec look at RPZA (file libavcodec/rpza.c).&lt;br /&gt;
&lt;br /&gt;
== MDCT ==&lt;br /&gt;
'''I would like to know how to do that properly''', for now this is the stuff borrowed from wmadec.c and wmaenc.c.&lt;br /&gt;
&lt;br /&gt;
In order to perform N-point transform you need those variables:&lt;br /&gt;
&lt;br /&gt;
    MDCTContext mdct;&lt;br /&gt;
    DSPUtil dsp;&lt;br /&gt;
    float  window[N];&lt;br /&gt;
    float output[2*N];&lt;br /&gt;
    float saved[2*N];&lt;br /&gt;
    float tmp[N];&lt;br /&gt;
    float coefs[N]; // result of MDCT will be stored here&lt;br /&gt;
 &lt;br /&gt;
Forward windowed MDCT:&lt;br /&gt;
&lt;br /&gt;
    memcpy(output, saved, sizeof(float)*N);&lt;br /&gt;
    for (i = 0; i &amp;lt; N; i++){&lt;br /&gt;
        output[i+N] = audio[i] / (N/2) * window[N - i - 1];&lt;br /&gt;
        saved [i]   = audio[i] / (N/2) * window[i];&lt;br /&gt;
    }&lt;br /&gt;
    ff_mdct_calc(&amp;amp;mdct, coefs, output, tmp);&lt;br /&gt;
&lt;br /&gt;
Backward windowed MDCT:&lt;br /&gt;
&lt;br /&gt;
    ff_imdct_calc(&amp;amp;mdct, output, coefs, tmp);&lt;br /&gt;
    dsp.vector_fmul_add_add(out, output, window, saved, 0.0f, N, 1);&lt;br /&gt;
    dsp.vector_fmul_reverse(saved, output+1024, window, N);&lt;br /&gt;
&lt;br /&gt;
[[Category:Libav Tutorials]]&lt;/div&gt;</summary>
		<author><name>Lu zero</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=MLC</id>
		<title>MLC</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=MLC"/>
				<updated>2011-11-11T23:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: MLCY&lt;br /&gt;
* Website: http://www.linek.sk/mlc/&lt;br /&gt;
&lt;br /&gt;
MLC is a lossless video codec which supports YUY2, YV12, RGB24 and RGB32 colorspaces. The video codec is open source and released under the GNU GPL v3.&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=VBLE</id>
		<title>VBLE</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=VBLE"/>
				<updated>2011-11-09T19:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: VBLE&lt;br /&gt;
&lt;br /&gt;
VBLE is a lossless codec for YUV colourspace written by a person known as Mark FD.&lt;br /&gt;
It employs standard median prediction and coding components with reduced number of bits.&lt;br /&gt;
&lt;br /&gt;
== Frame format ==&lt;br /&gt;
&lt;br /&gt;
Bitstream is stored in little-endian words LSB first.&lt;br /&gt;
&lt;br /&gt;
Image data is coded in that order: the line of luma values, two lines of chroma values, all data is coded as pixel quads.&lt;br /&gt;
&lt;br /&gt;
In the beginning of frame data there are four unary codes for each quad element size in bits.&lt;br /&gt;
The rest of data are quad values written with that number of bits.&lt;br /&gt;
After decoding pixel values first are renormalised by formula &amp;lt;code&amp;gt;pix &amp;amp; 1 ? 255 - (pix &amp;gt;&amp;gt; 1) : (pix &amp;gt;&amp;gt; 1)&amp;lt;/code&amp;gt; and for each plane median restoration is applied.&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Kostya</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=XMPG</id>
		<title>XMPG</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=XMPG"/>
				<updated>2011-10-18T05:02:54Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: xmpg&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/V-codecs/xmpg/&lt;br /&gt;
&lt;br /&gt;
XMPG = Xing MPEG (I-Frame only)&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Video FourCCs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Space_Adventure_MOV</id>
		<title>Space Adventure MOV</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Space_Adventure_MOV"/>
				<updated>2011-10-01T04:59:51Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: mov&lt;br /&gt;
* Company: Knowledge Adventure&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/game-formats/space-adventure-mov/&lt;br /&gt;
&lt;br /&gt;
Space Adventure is a 1993 CD-ROM title by Knowledge Adventure. It uses a multimedia format with the extension .mov which is not the [[Apple QuickTime]] format. It is likely a video-only format as a different directory on the CD-ROM contains [[Creative Voice]] files with similar filenames.&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Undiscovered Game Formats]]&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FATE_failures</id>
		<title>FATE failures</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FATE_failures"/>
				<updated>2011-09-17T16:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* Other samples from the H264 conformance suite that don't play back correctly */ cropping is supported now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Although FATE can appear green, in fact many of the samples in FATE are not bit-exact.&lt;br /&gt;
&lt;br /&gt;
The following samples are not bit-exact.&lt;br /&gt;
&lt;br /&gt;
=== H.264 ===&lt;br /&gt;
&lt;br /&gt;
tandberg 4/5 have large codec delays because of misordered frames, and the delay jumps randomly within the file. We don't preroll well enough to know the correct delay in advance and so at each point where we return a frame too far ahead in the future, we drop the preceeding frames once we get around to decoding them because we've already passed that point in units returned to the application. The correct solution for these would be to increase delay dynamically whenever we encounter a gap until either we're at max-delay, or until we've resolved the gap. almost certainly, max-delay should be settable in user applications so we can disable it for live/low-latency purposes. Q: should we return old frames also? The user may want to reorder himself (although this doesn't make much sense). Fate currently uses -strict 1 as a workaround for these samples, which simply forces codec-delay to 16. This is not the correct solution.&lt;br /&gt;
 MAIN/MR4_TANDBERG_C.264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
 MAIN/MR5_TANDBERG_C.264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
=== Other samples from the H264 conformance suite that don't play back correctly ===&lt;br /&gt;
&lt;br /&gt;
FMO:&lt;br /&gt;
 MAIN/FM1_FT_E.264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
 MAIN/FM2_SVA_C.264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
 MAIN/FM1_BT_B.h264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
For this one, we output only 12 of a few hundred-or-so frames, unanalyzed beyond that:&lt;br /&gt;
 MAIN/sp1_bt_a.h264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
Looks like garbage, unanalyzed beyond that:&lt;br /&gt;
 MAIN/H26L/BitstreamExchange/sp2_bt_b.h264 ... JF ( yuv420p @  176x144 /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
Looks like CAVLC-444 isn't completely implemented:&lt;br /&gt;
 PP/PPCV444I-7.264 ... JF ( yuv420p @  48x80 /  25  fps) not equal&lt;br /&gt;
 PP/PPCV444I4_Mitsubishi_A.264 ... JF ( yuv420p @  48x48 /  25  fps) not equal&lt;br /&gt;
 PP/PPCV444I5_Mitsubishi_A.264 ... JF ( 50 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPCV444I6_Mitsubishi_A.264 ... JF ( yuv420p @  48x48 /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPCV444I1_Thomson_A.bits ... JF ( 50 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPCV444I2_Thomson_A.bits ... JF ( 50 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPCV444I3_Thomson_A.bits ... JF ( 50 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
Missing 14-bits support:&lt;br /&gt;
 PP/PPH444I4_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444I5_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444I6_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444P6_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444P7_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444P8_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444P9_Mitsubishi_A.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444I1_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444I2_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444I3_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444P1_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444P2_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444P3_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444P4_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/Professional_profiles/PPH444P5_Thomson_A.bits ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
FMO + 14-bits:&lt;br /&gt;
 PP/PPH444I-7.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
 PP/PPH444P-10.264 ... JF ( 25 fps @  25 tbr /  25  fps) not equal&lt;br /&gt;
&lt;br /&gt;
[[Category:FATE]]&lt;/div&gt;</summary>
		<author><name>Kierank</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Libav_starting_tasks</id>
		<title>Libav starting tasks</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Libav_starting_tasks"/>
				<updated>2011-09-04T10:54:03Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Want to get started doing something useful in libav, but not sure where to start?  Here's some basic tasks you can do that don't require much detailed knowledge of libav's internals.  Need help?  Ask on IRC and someone can answer questions and help walk you through your task of choice.&lt;br /&gt;
&lt;br /&gt;
==Task categories==&lt;br /&gt;
&lt;br /&gt;
===QA===&lt;br /&gt;
&lt;br /&gt;
(TODO: make this a bit more detailed so it doesn't require as much searching/knowledge to do.)&lt;br /&gt;
&lt;br /&gt;
Finding bugs in libav is always welcome, and requires little to no knowledge of libav itself.  Here's one possible process:&lt;br /&gt;
&lt;br /&gt;
* Make a build of libav with debug symbols.&lt;br /&gt;
* Download a sample file from the samples archive.&lt;br /&gt;
* Download zzuf and use it to fuzz libav on the file.&lt;br /&gt;
* When you find a crash, do a gdb backtrace and report the bug to the libav bug tracker following the bug tracker guidelines.&lt;br /&gt;
&lt;br /&gt;
If a sample file doesn't seem to be giving any crashes, try a different one.  Some decoders are more buggy than others.&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
&lt;br /&gt;
==== Low level API ====&lt;br /&gt;
&lt;br /&gt;
==== Tutorials ====&lt;br /&gt;
&lt;br /&gt;
===== Basic stuff =====&lt;br /&gt;
&lt;br /&gt;
Would be nice have more increasingly complex example of our low level api usage.&lt;br /&gt;
&lt;br /&gt;
- demux a container format and get the basic format packet information&lt;br /&gt;
&lt;br /&gt;
Example https://github.com/simock85/libav/wiki/file-opening-and-packet-inspection&lt;br /&gt;
&lt;br /&gt;
- extract a single track out a multi track file&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
- generate some synthetic audio and encode it&lt;br /&gt;
&lt;br /&gt;
- generate some synthetic video and encode it&lt;br /&gt;
&lt;br /&gt;
- generate an audio and video and encode it to a file&lt;br /&gt;
&lt;br /&gt;
- add some subtitles in the mix&lt;br /&gt;
&lt;br /&gt;
===Coding===&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Noctropolis_VID</id>
		<title>Noctropolis VID</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Noctropolis_VID"/>
				<updated>2011-08-06T13:08:36Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: add another game&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''See also [[VID]]''&lt;br /&gt;
&lt;br /&gt;
* Extensions: vid&lt;br /&gt;
* Company: Flashpoint Productions, Inc.&lt;br /&gt;
* Year: 1994&lt;br /&gt;
* Samples: '''TODO'''&lt;br /&gt;
&lt;br /&gt;
VID is an FMV format first appeared in the computer game [http://www.mobygames.com/game/dos/noctropolis Noctropolis]. Uses basic [[RLE]] compression.&lt;br /&gt;
&lt;br /&gt;
A file consists of a header and a number of frame chunks. All numbers are little endian.&lt;br /&gt;
&lt;br /&gt;
== File header ==&lt;br /&gt;
&lt;br /&gt;
  + 0 s8  Signature[4]   -- &amp;quot;VID&amp;quot;&lt;br /&gt;
  + 4 s8  Version        -- usually 2&lt;br /&gt;
  + 5 s16 Frames         -- number of video frames (not chunks!)&lt;br /&gt;
  + 7 s16 Width          -- frame width and height&lt;br /&gt;
  + 9 s16 Height&lt;br /&gt;
  + B s16 Unknown        -- related to playback speed?&lt;br /&gt;
  + D s16 Rate           -- playback rate (?)&lt;br /&gt;
&lt;br /&gt;
== Frame chunks ==&lt;br /&gt;
Each chunk begins with a byte chunk type then followed by payload of variable length.&lt;br /&gt;
&lt;br /&gt;
=== 0x00 - Intraframe ===&lt;br /&gt;
&lt;br /&gt;
u16 sync value, followed by Width * Height frame raster&lt;br /&gt;
&lt;br /&gt;
=== 0x01 - Interframe ===&lt;br /&gt;
&lt;br /&gt;
u16 sync value, followed by RLE-compressed raster. Version 2 movies has extra zero byte after it (if not ended permaturely by a stop-code.) Decompression algorithm:&lt;br /&gt;
&lt;br /&gt;
 while frame is not complete&lt;br /&gt;
   len = next byte of input&lt;br /&gt;
   if len is 0 finish&lt;br /&gt;
   if high bit of len is set&lt;br /&gt;
     leave (len &amp;amp; 0x7F) pixels unchanged&lt;br /&gt;
   else&lt;br /&gt;
     draw next (len) pixels&lt;br /&gt;
&lt;br /&gt;
=== 0x02 - Palette ===&lt;br /&gt;
&lt;br /&gt;
256 6-bit [[RGB]] [[DAC]] triplets.&lt;br /&gt;
&lt;br /&gt;
=== 0x03 - RLE Intraframe ===&lt;br /&gt;
&lt;br /&gt;
Same as 0x01, but no stop-codes and instead of skipping pixels, fill them with the next byte of input.&lt;br /&gt;
&lt;br /&gt;
=== 0x04 - Partial Interframe ===&lt;br /&gt;
&lt;br /&gt;
Same as 0x01, but has an extra u16 value after the sync field denotes how many horizontal lines to skip before start of decoding.&lt;br /&gt;
&lt;br /&gt;
=== 0x7C - Audio Start ===&lt;br /&gt;
&lt;br /&gt;
u16 sync, followed by u8 sampling frequency in SoundBlaster [[VOC]] format, then followed by u16 size of data and corresponding amount of actual [[PCM]] data in Mono, 8-bit Unsigned format.&lt;br /&gt;
&lt;br /&gt;
=== 0x7D - Audio Continue ===&lt;br /&gt;
&lt;br /&gt;
Same as 0x7C, but no sync/frequency fields.&lt;br /&gt;
&lt;br /&gt;
== Games Using VID ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mobygames.com/game/dos/noctropolis Noctropolis]&lt;br /&gt;
* [http://www.mobygames.com/game/synnergist Synnergist]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Cyclemania_Video</id>
		<title>Cyclemania Video</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Cyclemania_Video"/>
				<updated>2011-07-12T05:15:38Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Samples: http://samples.mplayerhq.hu/game-formats/cyclemania/&lt;br /&gt;
&lt;br /&gt;
[http://www.mobygames.com/game/cyclemania Cyclemania] is a 1994 DOS game published by Accolade. It's a motorcycle racing game with a full motion video backdrop. Video in the game is handled with 4 files per animation:&lt;br /&gt;
&lt;br /&gt;
* .COL file: color palette, always 776 bytes (2 32-bit numbers followed by 256 RGB triplets)&lt;br /&gt;
* .FRM file: unknown&lt;br /&gt;
* .HED file: header data including width and height and some other information&lt;br /&gt;
* .VID file: the size and extension of this file indicate that it hold the raw video data&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=Interplay_ACMP</id>
		<title>Interplay ACMP</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=Interplay_ACMP"/>
				<updated>2011-07-12T05:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: correct categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Company: [[Interplay Entertainment]]&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/game-formats/interplay-acmp/&lt;br /&gt;
&lt;br /&gt;
Interplay ACMP is an audio compression file format used in some games from Interplay. The specific audio coding format is presently unknown but is suspected to be [[ACOMP]].&lt;br /&gt;
&lt;br /&gt;
== Interplay ACMP Format ==&lt;br /&gt;
Multi-byte numbers are stored in big endian format.&lt;br /&gt;
&lt;br /&gt;
 bytes 0-19   Signature string: 'Interplay ACMP Data\x1A'&lt;br /&gt;
 bytes 20-21  sample rate&lt;br /&gt;
 bytes 22-23  unknown, always seems to be 0 and might be part of sample rate&lt;br /&gt;
 byte  24     unknown, always seems to be 0x28&lt;br /&gt;
 byte  25     unknown, always seems to be 0&lt;br /&gt;
 bytes 26-29  possibly the size of decompressed audio&lt;br /&gt;
 bytes 30..   suspected to be the encoded audio data&lt;br /&gt;
&lt;br /&gt;
== Games Using Interplay ACMP Files ==&lt;br /&gt;
* [http://www.mobygames.com/game/star-trek-judgment-rites Star Trek: Judgment Rites]&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Multimedia Mike</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code_In_Space_2011</id>
		<title>FFmpeg / Libav Summer Of Code In Space 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code_In_Space_2011"/>
				<updated>2011-07-10T19:36:58Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: Add IRC handle to page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qualification tasks ==&lt;br /&gt;
&lt;br /&gt;
For us to consider your application for SOCIS we require a completed qualification task. Many Summer-of-Code projects (in the list below) have specific qualification tasks. These tasks are meant to make you familiar with the code that you will be working with, are at approximately the same difficulty level as the actual Summer-of-Code project itself (just a lot smaller), and often already provide you with a jumpstart into your Summer-of-Code project. We suggest the following order of events:&lt;br /&gt;
* First, select a Summer-of-Code project (either from the list below, but in some cases you may also come up with your own)&lt;br /&gt;
* Second, discuss this project with the person that will mentor it. If a mentor is listed, talk to him on IRC, via email or so. If no mentor is listed, find one by emailing the FFmpeg/Libav mailinglists.&lt;br /&gt;
* With your mentor, discuss the most appropriate qualification task for your Summer-of-Code project.&lt;br /&gt;
If no specific qualification task is listed for your project of interest, you can discuss with your mentor to choose a task from the [[Small FFmpeg Tasks|Small Tasks list]] or the [[Interesting Patches|Interesting Patches list]] instead. If your prospective mentor agrees, please send an email to the FFmpeg and Libav mailing list to inform that you are working on it (to avoid duplicated work). The qualification task is considered completed when your patch is accepted to the main Git tree.&lt;br /&gt;
&lt;br /&gt;
Before posting to the FFmpeg/Libav mailing lists, make sure you read and understand our netiquette guidelines, especially avoid top-posting and thread-hijacking (note that if you don't understand one of those terms, make sure to have understood them before writing your first post). Before you send us your patch, read our [http://www.ffmpeg.org/general.html#SEC23 development guidelines] and make sure your patch fulfills all the requirements stated there. You should also familiar with the programs diff, patch and Git. You have to learn these basics on your own before you start, we will not teach them to you during the application process.&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;
=== [[Libavfilter]] video work ===&lt;br /&gt;
&lt;br /&gt;
Libavfilter is the FFmpeg filtering library that started as a 2007 SoC [[FFmpeg Summer Of Code#Video Filter API (AKA libavfilter)|project]]. It replaced the now removed vhook subsystem. Most of it is already part of the FFmpeg main source tree, but there a few bits remaining. This project would consist in a combination of the following tasks:&lt;br /&gt;
&lt;br /&gt;
* Get the remaining bits of the SoC tree committed (this includes: the rotate, and fps filters)&lt;br /&gt;
* Port all the missing filters from MPlayer (do not forget asking the authors if it is ok to release them under the LGPL)&lt;br /&gt;
* Framework: implement dynamic-reconfiguration of the filterchain, for supporting dynamic size/format changes&lt;br /&gt;
* Port filters from other frameworks (mjpeg-tools, effectv, frei0r, virtualdub, vlc, etc...)&lt;br /&gt;
* Write wrappers for more image processing libraries and filtering frameworks (libgimp, libgraphicsmagic, weed), extend the libopencv wrapper for supporting more filters (this may need implemented float image support in libswscale)&lt;br /&gt;
* Write more filters (possibly starting from already posted filters which for a reason or another were never committed, e.g. concatenate, fish, 2xsai, eval, posterize, elbg/posterize etc.)&lt;br /&gt;
* Implement a compose filter (suggestion for a better name?), for creating a mosaic of the input video streams&lt;br /&gt;
* Write a movie sink (e.g. it could be useful for implementing a display functionality, e.g. when the video is dumped to an output device)&lt;br /&gt;
* Write a frequency domain filter using the FFT implementation in libavcodec&lt;br /&gt;
* Write a Matlab/Octave/SAGE scripting wrapper (assuming it can be done)&lt;br /&gt;
* More ideas?&lt;br /&gt;
&lt;br /&gt;
''Mentor: Stefano Sabatini (possibly with a backup mentor)''&lt;br /&gt;
&lt;br /&gt;
=== Assembly Testing Framework ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg/Libav use an extensive amount of assembly to optimize video and audio decoding. For scientific applications and high-assurance systems (e.g. a spacecraft), accuracy and speed are vital. Assembly is difficult to code, and lends itself to mistakes. As FFmpeg/Libav has no framework for testing assembly functions, development of assembly is often hindered by each developer having to create his or her own tests. In addition, functions are not tested for speed. While FATE covers some functions, there are many that simply aren't tested. The samples in FATE do not cover all features in every decoder that has assembly functions (e.g. several 10-bit H.264 predict functions are not used in any FATE sample). FATE also does not test functions in isolation, which impedes assembly development. In addition, FATE might not cover all assembly versions of a function if multiple different levels of optimizations exist (e.g. MMX, MMX2, SSE, SSE2, SSSE3, SSE4, AVX, etc). &lt;br /&gt;
&lt;br /&gt;
* Qualification task: describe how you will implement the system (probably based on x264's checkasm). It should test accuracy, speed, and be extensible. &lt;br /&gt;
* Actual task: implement the system. At least all H.264 assembly functions should be covered and the framework should be easily extensible. &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;
&lt;br /&gt;
''Mentor: Daniel Kang'' (Jumpyshoes on #libav-devel@chat.freenode.net; IRC is generally the best way to contact me).&lt;br /&gt;
&lt;br /&gt;
=== Add Support for GeoTIFF metadata ===&lt;br /&gt;
&lt;br /&gt;
FFmpeg/Libav supports decoding of TIFF images, but currently skips GeoTIFF tags which contain geographic location data, which is commonly used for satellite and aerial imagery. This would be a rather small project to export this metadata in textual form and parse the metadata for encoding.&lt;br /&gt;
&lt;br /&gt;
* Qualification task: Add support in the TIFF decoder for the DOUBLE data format, which is used by many GeoTIFF tags.&lt;br /&gt;
* Implement simple parsing of GeoTIFF tags, just printing basic info to the console.&lt;br /&gt;
* Print the output in a more human-readable format.&lt;br /&gt;
* Add support for decoder export of metadata.&lt;br /&gt;
* Export each GeoTIFF tag as a metadata entry.&lt;br /&gt;
* Document the metadata format for each tag.&lt;br /&gt;
* Add support for encoder import of metadata.&lt;br /&gt;
* Import/validate GeoTIFF tags from metadata and write to TIFF output.&lt;br /&gt;
* reference: http://trac.osgeo.org/geotiff/&lt;br /&gt;
&lt;br /&gt;
''Mentor: Justin Ruggles''&lt;br /&gt;
&lt;br /&gt;
=== Libav Usage Example, Tutorial and test suite ===&lt;br /&gt;
&lt;br /&gt;
* Prepare a serie of example program of increasing complexity&lt;br /&gt;
** Simple remuxer&lt;br /&gt;
** Simple decoding loop&lt;br /&gt;
** Simple encoding loop&lt;br /&gt;
** Simple transcoding loop&lt;br /&gt;
** Simple producer + consumer scenario with the network protocols&lt;br /&gt;
** ...&lt;br /&gt;
** Optionally it would lead to prepare a leaner equivalent to ffmpeg and ffplay&lt;br /&gt;
&lt;br /&gt;
* Examine when there are inconsistencies with the current API (e.g. unexpected timestamp mangling, packet splitting) and fix the issues.&lt;br /&gt;
&lt;br /&gt;
* Integrate the example programs as components of FATE.&lt;br /&gt;
&lt;br /&gt;
* Document all the previous steps to reduce the learning curve of future contributors.&lt;br /&gt;
&lt;br /&gt;
''Mentor: [[User:Lu_zero|Luca Barbato]]''&lt;br /&gt;
&lt;br /&gt;
== 2nd Tier Project Proposals ==&lt;br /&gt;
&lt;br /&gt;
These proposals lack of a mentor.&lt;br /&gt;
&lt;br /&gt;
=== Finish GSoC projects from previous years ===&lt;br /&gt;
&lt;br /&gt;
Some projects are lingering in the dark unfinished. They should be picked up and made ready for inclusion. These projects are potentially less involved than starting from scratch, but also more useful for FFmpeg/Libav since the probability that the projects get finished should be higher. If some of them are deemed too easy, they could be combined.&lt;br /&gt;
&lt;br /&gt;
For the current status of all GSoC projects up to date, see [[FFmpeg Summer Of Code]].&lt;br /&gt;
&lt;br /&gt;
=== Forward Error Correction ===&lt;br /&gt;
&lt;br /&gt;
Add FEC to libavutil.&lt;br /&gt;
* RTP FEC, standardised as SMPTE 2022M (Possibly the same as Pro-MPEG FEC) - (not 100% sure if this is for all types of RTP or just some)&lt;br /&gt;
* MPEG-TS 16 bytes extra - (not sure where this is standardised - in DVB perhaps?)&lt;br /&gt;
''Mentor: ???''&lt;/div&gt;</summary>
		<author><name>Stefanosa</name></author>	</entry>

	<entry>
		<id>http://wiki.multimedia.cx/index.php?title=FFmpeg/Libav_Summer_Of_Code_In_Space</id>
		<title>FFmpeg/Libav Summer Of Code In Space</title>
		<link rel="alternate" type="text/html" href="http://wiki.multimedia.cx/index.php?title=FFmpeg/Libav_Summer_Of_Code_In_Space"/>
				<updated>2011-07-10T19:16:59Z</updated>
		
		<summary type="html">&lt;p&gt;Summary: [[FFmpeg/Libav Summer Of Code In Space]] moved to [[FFmpeg Summer Of Code In Space]]: Since for this year is pretty unlikely that FFmpeg will run a joint application with Libav, rename the page to be FFmpeg oriented, and less confusing for the uninformed &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://sophia.estec.esa.int/socis2012/?q=about ESA Summer of Code in Space (SOCIS)] is a program run by the Advanced Concepts Team of the European Space Agency that offers student developers stipends to write code for various space-related open source software projects.&lt;br /&gt;
&lt;br /&gt;
FFmpeg run a joint application with Libav for the pilot program of 2011. &lt;br /&gt;
&lt;br /&gt;
* [[FFmpeg / Libav Summer Of Code In Space 2011|2011 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code In Space 2012|2012 project page]]&lt;br /&gt;
&lt;br /&gt;
Each accepted project is developed in its own sandbox, separate from the main FFmpeg codebase. Naturally, the end goal of each of the accepted projects ought to be to have that code in shape for acceptance into the production codebase. This page tracks the status of each project and how well each student did.&lt;/div&gt;</summary>
		<author><name>Stefanosa</name></author>	</entry>

	</feed>