<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ce</id>
	<title>MultimediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ce"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/Ce"/>
	<updated>2026-09-11T00:31:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Duck_IVF&amp;diff=15454</id>
		<title>Duck IVF</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Duck_IVF&amp;diff=15454"/>
		<updated>2019-09-30T21:29:24Z</updated>

		<summary type="html">&lt;p&gt;Ce: Improve the ivf time-base description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: ivf&lt;br /&gt;
* Samples: The test-vectors-* archives available here: https://chromium.googlesource.com/webm/vp8-test-vectors&lt;br /&gt;
&lt;br /&gt;
IVF is a simple file format that transports raw VP8 data.&lt;br /&gt;
&lt;br /&gt;
Multi-byte numbers of little-endian. An IVF file begins with a 32-byte header:&lt;br /&gt;
&lt;br /&gt;
 bytes 0-3    signature: 'DKIF'&lt;br /&gt;
 bytes 4-5    version (should be 0)&lt;br /&gt;
 bytes 6-7    length of header in bytes&lt;br /&gt;
 bytes 8-11   codec FourCC (e.g., 'VP80')&lt;br /&gt;
 bytes 12-13  width in pixels&lt;br /&gt;
 bytes 14-15  height in pixels&lt;br /&gt;
 bytes 16-23  time base denominator&lt;br /&gt;
 bytes 20-23  time base numerator&lt;br /&gt;
 bytes 24-27  number of frames in file&lt;br /&gt;
 bytes 28-31  unused&lt;br /&gt;
&lt;br /&gt;
The header is followed by a series of frames. Each frame consists of a 12-byte header followed by data:&lt;br /&gt;
&lt;br /&gt;
 bytes 0-3    size of frame in bytes (not including the 12-byte header)&lt;br /&gt;
 bytes 4-11   64-bit presentation timestamp&lt;br /&gt;
 bytes 12..   frame data&lt;br /&gt;
&lt;br /&gt;
== PC games using IFV files ==&lt;br /&gt;
&lt;br /&gt;
* Rogue Trooper Redux&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Gremlin_Digital_Video&amp;diff=15279</id>
		<title>Gremlin Digital Video</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Gremlin_Digital_Video&amp;diff=15279"/>
		<updated>2017-08-26T09:37:41Z</updated>

		<summary type="html">&lt;p&gt;Ce: Implemented by Kostya and Paul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''This document is based on the document 'Description of the Gremlin Digital Video (GDV) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev found at [http://multimedia.cx/gdv-format.txt http://multimedia.cx/gdv-format.txt].''&lt;br /&gt;
&lt;br /&gt;
'''This document is still a work in progress and is known to be incomplete.'''&lt;br /&gt;
&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/gdv/ http://samples.mplayerhq.hu/game-formats/gdv/]&lt;br /&gt;
&lt;br /&gt;
Gremlin Digital Video (GDV) is a multimedia file format used in a number of CD-ROM computer games developed by a company named [[Gremlin Interactive]]. The extension stands for Gremlin Digital Video. The format is most notable for its use in the title [http://www.mobygames.com/game/dos/realms-of-the-haunting Realms of the Haunting].&lt;br /&gt;
&lt;br /&gt;
The file format is apparently capable of transporting palettized 8-bit video, or 15-, 16-, or 24-bit data, though only 8-bit data has been observed in games using GDV. The audio format is 8- or 16-bit PCM or DPCM.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little endian format.&lt;br /&gt;
&lt;br /&gt;
The general file format is laid out as follows:&lt;br /&gt;
&lt;br /&gt;
 GDV header&lt;br /&gt;
 initial palette (only for 8-bit video data)&lt;br /&gt;
 chunk 0&lt;br /&gt;
 chunk 1&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Each frame has the following structure:&lt;br /&gt;
&lt;br /&gt;
 sound samples (if sound is present)&lt;br /&gt;
 frame header&lt;br /&gt;
 video data&lt;br /&gt;
&lt;br /&gt;
The GDV header has the following structure:&lt;br /&gt;
&lt;br /&gt;
 bytes 0-3    magic number/file signature (should be 0x94 0x19 0x11 0x29)&lt;br /&gt;
 bytes 4-5    size ID&lt;br /&gt;
              see appendix A for this little-used feature&lt;br /&gt;
 bytes 6-7    number of frames in file&lt;br /&gt;
 bytes 8-9    framerate (frames/second)&lt;br /&gt;
 bytes 10-11  sound flags&lt;br /&gt;
   bit 3      packed data (1 = DPCM, 0 = PCM)&lt;br /&gt;
   bit 2      sample width (1 = 16-bit, 0 = 8-bit)&lt;br /&gt;
   bit 1      channels (1 = stereo, 0 = mono)&lt;br /&gt;
   bit 0      audio present (1 = file has audio, 0 = silence)&lt;br /&gt;
 bytes 12-13  sound playback frequency&lt;br /&gt;
 bytes 14-15  image type&lt;br /&gt;
   bits 2-0   video depth:&lt;br /&gt;
              1 = 8 bits/pixel (palettized)&lt;br /&gt;
              2 = 15 bits/pixel&lt;br /&gt;
              3 = 16 bits/pixel&lt;br /&gt;
              4 = 24 bits/pixel&lt;br /&gt;
 bytes 16-17  frame size (maximum compressed frame size)&lt;br /&gt;
              if this field is 0 then there is no video in the file&lt;br /&gt;
 byte 18      unknown&lt;br /&gt;
 byte 19      lossiness&lt;br /&gt;
 bytes 20-21  frame width&lt;br /&gt;
 bytes 22-23  frame height&lt;br /&gt;
&lt;br /&gt;
If the video is palettized (image type indicates 8 bits/pixel), the header is followed immediately by an initial 768-byte palette. There are 256 3-byte palette entries where the first byte represents the blue &lt;br /&gt;
component, the second byte is green, and the third byte is red. Each of the palette components is a 6-bit VGA value ranging from 0..63. Thus, the component values must be scaled if rendering to more common 24- or 32-bit RGB formats.&lt;br /&gt;
&lt;br /&gt;
Following the GDV header and possible palette, the GDV file stores a series of chunks. Each chunk has the following layout:&lt;br /&gt;
&lt;br /&gt;
 audio data (if audio present)&lt;br /&gt;
 video frame header (if video present)&lt;br /&gt;
 encoded video data (if video present)&lt;br /&gt;
&lt;br /&gt;
The amount of audio data in a chunk is determined as:&lt;br /&gt;
&lt;br /&gt;
 amount_of_audio_data = (sample_rate / frames_per_second) * &lt;br /&gt;
   (number_of_channels) * (bits_per_sample / 8)&lt;br /&gt;
&lt;br /&gt;
Further, if the audio is packed then divide amount_of_audio_data by 2.&lt;br /&gt;
&lt;br /&gt;
A video frame header has the following structure:&lt;br /&gt;
&lt;br /&gt;
 bytes 0-1    magic number/frame signatures (should be 0x05 0x13)&lt;br /&gt;
 bytes 2-3    total size of frame&lt;br /&gt;
 bytes 4-7    frame type and flags&lt;br /&gt;
   bits 31-8  number of pixels to skip before decoding video data&lt;br /&gt;
              (applies to coding methods 5, 6, and 8)&lt;br /&gt;
   bit 7      unknown&lt;br /&gt;
   bit 6      keyframe (1 = intraframe, 0 = interframe)&lt;br /&gt;
   bit 5      vertical scaling is needed (only half of lines are coded)&lt;br /&gt;
   bit 4      horizontal scaling is needed (only half width is coded)&lt;br /&gt;
   bits 3-0   frame coding method&lt;br /&gt;
&lt;br /&gt;
Thus far, only details of the 8-bit compression format have been determined. A frame's header indicates the coding method used.&lt;br /&gt;
&lt;br /&gt;
== Video frame coding ==&lt;br /&gt;
&lt;br /&gt;
These are the known coding methods for 8-bit data:&lt;br /&gt;
&lt;br /&gt;
 0: new palette, no frame change&lt;br /&gt;
 1: new palette, clear frame&lt;br /&gt;
 2: basic LZ-like unpacking&lt;br /&gt;
 3: frame unchanged from the previous frame&lt;br /&gt;
 5: enhanced LZ-like unpacking&lt;br /&gt;
 6: advanced LZ-like unpacking&lt;br /&gt;
 8: most complicated version, mix of everything possible&lt;br /&gt;
&lt;br /&gt;
The various coding methods are described in detail in the following sections.&lt;br /&gt;
&lt;br /&gt;
=== General Notes about Video Coding ===&lt;br /&gt;
&lt;br /&gt;
The frames are usually coded with an approach from LZ77 scheme where you either copy chunks of already decoded data (in this case it may be already decoded data for the current frame or data further in the framebuffer from the previously decoded frame), skip over some unchanged pixels or read new data. The back offsets are in the range -4096..-1 and there's a special area before the frame start of exactly 4096 which contains runs of pixels (initially it's each pixel value repeated 8 times and that table duplicated twice, the content will change for coding method 2) that may be used for decoding initial pixels.&lt;br /&gt;
&lt;br /&gt;
Since this is LZ77 scheme, source and destination areas may overlap, so offset -1 is often used to signal that the area should be filled with the previous pixel.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 0 ===&lt;br /&gt;
&lt;br /&gt;
Coding method 0 simply packs a new 768-byte palette structure into the payload of the video frame. The palette structure is identical to the initial palette stored after the GDV file header in an 8-bit GDV file. &lt;br /&gt;
&lt;br /&gt;
The video frame remains unchanged from the previous frame.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 1 ===&lt;br /&gt;
&lt;br /&gt;
Coding method 1 packs a new 768-byte palette structure into the payload of the video frame. The palette structure is identical to the initial palette stored after the GDV file header in an 8-bit GDV file.&lt;br /&gt;
&lt;br /&gt;
This coding method also wipes the entire frame. If all of the top 24 bits of the frame header's frame type field (bits 31-8) are 0 or the video bit depth is not 8 bits/pixel, wipe the frame with all 0 values. Otherwise, wipe the the frame with all 0xFF values.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 2 ===&lt;br /&gt;
&lt;br /&gt;
This method initialised the 4096-byte area before the frame (used for back copy) differently, now it's run of 16 pixels for each pixel value (i.e. &amp;lt;code&amp;gt;00 00 ... 00 01 01 ... 01 02 ... FF FF&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Coding method 2 embodies a basic LZ-like scheme. To decode the encoded bytestream, begin by reading the first byte. This byte is a set of 4 2-bit instruction tags laid out as:&lt;br /&gt;
&lt;br /&gt;
 bits 76 54 32 10&lt;br /&gt;
      aa bb cc dd&lt;br /&gt;
&lt;br /&gt;
* If aa is 0 then paint a single pixel by copying the next byte from the encoded bytestream into the decoded image.&lt;br /&gt;
* If aa is 1 then copy a run of pixels from the area of the image that has already been painted. First, the source offset and run length must be decoded from the bytestream. For the next 2 bytes in the bytestream, byte_a followed by byte_b:&lt;br /&gt;
&lt;br /&gt;
  byte_a    byte_b&lt;br /&gt;
 76543210  76543210&lt;br /&gt;
&lt;br /&gt;
The length of the run to be copied is defined as 3 more than bits 3-0 of byte_a. In C notation, this is expressed as:&lt;br /&gt;
&lt;br /&gt;
 length = (byte_a &amp;amp; 0x0F) + 3;&lt;br /&gt;
&lt;br /&gt;
The beginning run offset is defined as the 12-bit quantity specified by the top 4 bits of byte_a combined with byte_b. In C notation, this is expressed as:&lt;br /&gt;
&lt;br /&gt;
 offset = ((byte_a &amp;amp; 0xF0) &amp;lt;&amp;lt; 4) | byte_b;&lt;br /&gt;
  &lt;br /&gt;
The starting offset from which to copy is defined as the current offset in the output image minus the quantity (4096 - offset).&lt;br /&gt;
&lt;br /&gt;
* If aa is 2 then the next pixels in the decoded frame are unchanged from the previous frame. The length of the unchanged pixel run is defined by the next byte in the encoded bytestream, plus 2. This gives the range of 2..257 unchanged pixels.&lt;br /&gt;
* If aa is 3 then the frame decode operation is finished. Presumably, a decoder should also stop decoding when it runs out of bytes in the encoded bytestream buffer.&lt;br /&gt;
&lt;br /&gt;
After tag aa is decoded, decode tag bb using the same process as tag aa, then tag cc, followed by tag dd. After decoding tag dd, fetch the next byte from the encoded bytestream as the next tag byte and repeat the decoding process until a tag of 3 is encountered or until the encoded bytestream buffer is exhausted.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 3 ===&lt;br /&gt;
&lt;br /&gt;
This method doesn't affect video data, but usually used to carry next chunk of sound.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 5 ===&lt;br /&gt;
&lt;br /&gt;
Coding method 5 is similar to method 2 but extends it with some ways to code data. &lt;br /&gt;
&lt;br /&gt;
Before decoding skip n bytes after the frame header, where n is defined in the frame header.&lt;br /&gt;
&lt;br /&gt;
To decode the encoded bytestream, begin by reading the first byte. This byte is a set of 4 2-bit instruction tags laid out as:&lt;br /&gt;
&lt;br /&gt;
 bits 76 54 32 10&lt;br /&gt;
      aa bb cc dd&lt;br /&gt;
&lt;br /&gt;
* If aa is 0 then paint a single pixel by copying the next byte from the encoded bytestream into the decoded image.&lt;br /&gt;
&lt;br /&gt;
* If aa is 1 then either copy a run of pixels from the area of the image that has already been painted, or fill a run of pixels with a constant pixel. First, the source offset and run length must be decoded from the bytestream. For the next 2 bytes in the bytestream, byte_a followed by byte_b:&lt;br /&gt;
&lt;br /&gt;
  byte_a    byte_b&lt;br /&gt;
 76543210  76543210&lt;br /&gt;
&lt;br /&gt;
The length of the run to be copied is defined as 3 more than bits 3-0 of byte_a. In C notation, this is expressed as:&lt;br /&gt;
&lt;br /&gt;
 length = (byte_a &amp;amp; 0x0F) + 3;&lt;br /&gt;
&lt;br /&gt;
The beginning run offset is defined as the 12-bit quantity specified by the top 4 bits of byte_a combined with byte_b. In C notation, this is expressed as:&lt;br /&gt;
&lt;br /&gt;
 offset = 4096 - (((byte_a &amp;amp; 0xF0) &amp;lt;&amp;lt; 4) | byte_b);&lt;br /&gt;
&lt;br /&gt;
Copy &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; pixels to the current position in the output image from &amp;lt;code&amp;gt;-offset&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* If aa is 2 then either the next pixels in the decoded frame are unchanged from the previous frame, or the frame decode is finished. Decode the next byte from the bytestream as the length. If the length is 0 then the frame decode is finished. If the length is 0xFF then decode the next 16-bit value from the bytestream as the length. This length indicates the number of pixels from the current offset in the decoded frame that remain unchanged from the previous frame.&lt;br /&gt;
* If aa is 3 then copy pixels from the near area of the image that has already been painted. First, the source offset and run length must be decoded from the bytestream. For the next byte in the bytestream:&lt;br /&gt;
&lt;br /&gt;
   byte&lt;br /&gt;
 76543210&lt;br /&gt;
&lt;br /&gt;
Bits 7-2 define the 6-bit offset. Bits 1-0 plus 2 define the length. In C notation, this is expressed as:&lt;br /&gt;
&lt;br /&gt;
 offset = (byte &amp;gt;&amp;gt; 2) + 1;&lt;br /&gt;
 length = (byte &amp;amp; 0x03) + 2;&lt;br /&gt;
&lt;br /&gt;
Copy &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; pixels into the current position in the output image using the back position of &amp;lt;code&amp;gt;-offset&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After tag aa is decoded, decode tag bb using the same process as tag aa, then tag cc, followed by tag dd. After decoding tag dd, fetch the next byte from the encoded bytestream as the next tag byte and repeat the decoding process until a tag of 2 is encountered with an associated length of 0, or until the encoded bytestream buffer is exhausted.&lt;br /&gt;
&lt;br /&gt;
=== Bit Reading Procedure For Video Coding Methods 6 and 8 ===&lt;br /&gt;
&lt;br /&gt;
Video coding methods 6 and 8 treat the encoded bytestream as a sequence of packed bits and bytes. The best way to illustrate the method is to jump in with an example bytestream:&lt;br /&gt;
&lt;br /&gt;
 0x2D 0xAA 0x5A 0x7F 0x26 0x53 0xB1 ...&lt;br /&gt;
&lt;br /&gt;
The bit reader maintains a 32-bit bit queue and a queue size (qsize). Initialize the queue with the first 4 bytes in the bytestream interpreted as a little endian 32-bit number, and initialize the queue size to 16:&lt;br /&gt;
&lt;br /&gt;
 queue = 0x7F5AAA2D&lt;br /&gt;
 qsize = 16&lt;br /&gt;
&lt;br /&gt;
Reading bits entails reading the least significant bits from the queue. Reading 4 bits in this example will yield 0xD. Afterwards, the bit reading state variables will be:&lt;br /&gt;
&lt;br /&gt;
 queue = 0x07F5AAA2&lt;br /&gt;
 qsize = 12&lt;br /&gt;
&lt;br /&gt;
As an example, assume the coding mode dictates that the next 3 bits shall be read (010 = 2) followed by the next 1 bit (0) and these codes indicate that the decoder should read the next byte from the encoded bytestream. This next byte is 0x26 in this example. The state variables after reading the next (3 + 1 = 4) bits will be:&lt;br /&gt;
&lt;br /&gt;
 queue = 0x007F5AAA&lt;br /&gt;
 qsize = 8&lt;br /&gt;
&lt;br /&gt;
Assume the next decode operation is to read 16 bits from the stream (0x5AAA). The state variables are now:&lt;br /&gt;
&lt;br /&gt;
 queue = 0x0000007F&lt;br /&gt;
 qsize = -8&lt;br /&gt;
&lt;br /&gt;
Since qsize is less than or equal to 0, fetch the next 16-bit value from the encoded bytestream and logically or it to the left of the remaining bits in the queue. Then add 16 to the qsize:&lt;br /&gt;
&lt;br /&gt;
 queue = 0x00B1537F&lt;br /&gt;
 qsize = 8&lt;br /&gt;
&lt;br /&gt;
The descriptions of video coding method 6 and 8 will use the phrase &amp;quot;read the next n bits from the bit queue.&amp;quot; This indicates that the next n bits should be shifted off of the rightmost part of the bit queue, the qsize should be decreased by n, and if qsize is less than or equal to 0 refresh the bit queue and increase qsize as described previously.&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 6 ===&lt;br /&gt;
&lt;br /&gt;
Coding method 6 embodies similar techniques as coding modes 2 and 5. The most significant is that the bytestream is decoded as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
To reach the start of the encoded bitstream, first skip n bytes after the frame header, where n is defined in the frame header. Initialize the bit queue at that point.&lt;br /&gt;
&lt;br /&gt;
To decode the frame, read the next 2 bits from the bit queue as the instruction tag.&lt;br /&gt;
&lt;br /&gt;
* If the tag is 0 then read the next bit from the bit queue. If the bit is 0 then copy the next byte in the bytestream into the output frame as the next pixel. If the bit is 1 then copy a series of pixels from the encoded bytestream into the output frame. The length of the pixel run to copy is obtained by the following process:&lt;br /&gt;
&lt;br /&gt;
 length = 2&lt;br /&gt;
 count = 0&lt;br /&gt;
 do&lt;br /&gt;
   count++&lt;br /&gt;
   step = read (count) bits from bit queue&lt;br /&gt;
   length = length + step&lt;br /&gt;
 while (step == ((1 &amp;lt;&amp;lt; count) - 1))&lt;br /&gt;
&lt;br /&gt;
* If the tag is 1 then the next series of pixels in the output frame are unchanged from the previous frame. To determine precisely how many pixels are unchanged, read the next bit from the bit queue. If the bit is 0 then read the next 4 bits from the bit queue. These 4 bits plus 2 represent the number of pixels that are unchanged, which is in the range of 2..17.&lt;br /&gt;
&lt;br /&gt;
If the bit is 1 then read the next byte from the bytestream as the length. If the top bit of the length is 0 then the actual length of the unchanged pixel run is length + 18 which yields a range of 18..145 pixels. If the top bit of the decoded length byte is 1 then read the next byte from the bytestream and perform the following calculation:&lt;br /&gt;
&lt;br /&gt;
 length = (((length &amp;amp; 0x7F) &amp;lt;&amp;lt; 8) | next_byte) + 146;&lt;br /&gt;
&lt;br /&gt;
* If the tag is 2 read the next 2 bits from the bit queue as the sub-tag.&lt;br /&gt;
&lt;br /&gt;
If the sub-tag is 3 then either copy a run of pixels from the portion of the image that has already been decoded into the current offset, or fill a run of pixels with a constant pixel value. Read the next byte from the bytestream as the offset. If the most significant bit of the offset byte (bit 7) is set then the length of the next pixel operation is 3; othewise, the length is 2. Next clear bit 7 of the offset. If offset is 0 then take the most recent pixel in the decoded frame and fill the next (length) pixels with that value. If offset is non-zero then copy (length) pixels from the current offset - (offset - 1) from the decoded image to the current offset.&lt;br /&gt;
&lt;br /&gt;
If the sub-tag is not 3 then read the next 4 bits from the bit queue. These bits comprise bits 11-8 of a 12-bit offset quantity. The bottom 8 bits of the offset quantity come from the next byte read from the bytestream.&lt;br /&gt;
&lt;br /&gt;
If the sub-tag is 0 and the offset is 0xFFF then the frame decode operation is complete. If the sub-tag is 0 and the offset is greater than 0xF80 then read a pair of pixels from the portion of the output image already decoded and place the pair into the output frame a specified number of times. The length of the pixel run is 2 more than the bottom 4 bits of the 12-bit offset quantity. The actual offset is defined as bits 6-4 of the 12-bit offset quantity. In C notation length and offset are computed from offset as:&lt;br /&gt;
&lt;br /&gt;
 length = (offset &amp;amp; 0x00F) + 2; // applied then for pairs of pixels&lt;br /&gt;
 offset = (offset &amp;gt;&amp;gt; 4) &amp;amp; 7;&lt;br /&gt;
&lt;br /&gt;
The pair of pixels are retrieved from the decoded image at the current offset - (offset - 1).&lt;br /&gt;
&lt;br /&gt;
If the sub-tag is not 0 or the offset is less than or equal to 0xF80 then add 3 to the length. If the offset is 0xFFF, take the last pixel output into the decoded image and copy it (length) times into the decoded image at the current offset. If the offset is not equal to 0xFFF then copy a run of pixels from the area of the image that has already been painted. The starting offset from which to copy is defined as the current offset in the output image minus the quantity (4096 - offset).&lt;br /&gt;
&lt;br /&gt;
* If the tag is 3 then either copy a run of pixels from the area of the image that has already been painted, or fill a run of pixels with a constant pixel. Read the next byte in the bytestream as the offset. The length is the top 4 bits of this byte (bits 7-4). If the length is 15 then read the next byte from the bytestream and add it to the length. Add 6 more to the length. Read the next byte from the bytestream and make it the bottom 8 bits of the offset quantity. If the offset is 0xFFF then take the&lt;br /&gt;
previous pixel from the decoded image and copy it into the decoded image for (length) iterations. If offset is other than 0xFFF then move length pixels into the decoded image at the current offset from the current offset + (offset - 4096).&lt;br /&gt;
&lt;br /&gt;
=== Video Coding Method 8 ===&lt;br /&gt;
&lt;br /&gt;
Video coding method 8 is precisely the same as video coding method 6 except for the procedure for decoding tag 3. To decode tag 3, decode the next byte in the bytestream (first_byte).&lt;br /&gt;
&lt;br /&gt;
If the top 2 bits of &amp;lt;code&amp;gt;first_byte&amp;lt;/code&amp;gt; are set (i.e. &amp;lt;code&amp;gt;11xxxxxx&amp;lt;/code&amp;gt;) then the required operation is to copy a run of pixels from the previous frame to the current offset of the current frame. The length of the run is denoted by the bottom 6 bits of &amp;lt;code&amp;gt;first_byte&amp;lt;/code&amp;gt; plus 8. The 12-bit offset quantity is denoted by the next 4 bits is the bit queue (top 4 bits of the quantity) combined with the next byte from the bytestream (bottom 8 bits). Move (length) bytes from the previous frame at the current offset plus the offset quantity + 1 into the current offset of the current frame.&lt;br /&gt;
&lt;br /&gt;
In the other case the required operation is to either copy a run the previous pixels to the current position or repeat the previous pixel for a number of pixels. If the top bit of first_byte is 0 (i.e. &amp;lt;code&amp;gt;0xxxxxxx&amp;lt;/code&amp;gt;) then the length of the pixel run is defined as the quantity 6 plus bits 6-4 of &amp;lt;code&amp;gt;first_byte&amp;lt;/code&amp;gt; (this yields a range of 6..13). The offset is defined as the 12-bit quantity by combining bits 3-0 (top 4 bits of quantity) and the next byte in the bytestream (bottom 8 bits). If the top bit of &amp;lt;code&amp;gt;first_byte&amp;lt;/code&amp;gt; is set (i.e. &amp;lt;code&amp;gt;10xxxxxx&amp;lt;/code&amp;gt;) then the length of the pixel run is defined as the quantity 14 plus bits 5-0 of &amp;lt;code&amp;gt;first_byte&amp;lt;/code&amp;gt; (this yields a range of 14..77). The offset is defined as the 12-bit quantity by combining the next 4 bits from the bit queue (top 4 bits of quantity) and the next byte from the bytestream (bottom 8 bits). If the offset is 0xFFF then take the previous pixel from the decoded image and copy it into the decoded image for (length) iterations. If offset is other than 0xFFF then move length pixels into the decoded image at the current offset from the current offset + (offset - 4096).&lt;br /&gt;
&lt;br /&gt;
=== Scaling ===&lt;br /&gt;
&lt;br /&gt;
'''TODO'''&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
Audio may be stored as either uncompressed [[PCM]], or simple [[PCM#Differential PCM|DPCM]]-packed data.&lt;br /&gt;
&lt;br /&gt;
DPCM decompression operates on this way:&lt;br /&gt;
&lt;br /&gt;
Initialize two 16-bits state varriables to zero at the beginning of the playback.&lt;br /&gt;
&lt;br /&gt;
Read next byte of compressed data. Update first state varriable as state = state + DeltaTable[packed_byte]. Output this new state varriable as an unpacked sample (if stereo sound expected, this will be a left channel sample). Read next byte and perform same steps using second state varriable (right channel). Repat all over again to decode whole chunk of samples. Note that exactly same scheme used even for mono sound, i.e. still two state varriables used to decompress the data. Decompressing always produce 16-bits output. To convert it to a 8-bits unsigned sample, peek 8 high bits and invert it's top bit.&lt;br /&gt;
&lt;br /&gt;
DeltaTable contains 256 delta-values calculated using following algorithm:&lt;br /&gt;
&lt;br /&gt;
  DeltaTable[0] = 0&lt;br /&gt;
  delta = 0&lt;br /&gt;
  code = 64&lt;br /&gt;
  step = 45&lt;br /&gt;
  repeat 127 times&lt;br /&gt;
    delta = delta + (code &amp;gt;&amp;gt; 5)&lt;br /&gt;
    code = code + step&lt;br /&gt;
    step = step + 2&lt;br /&gt;
    DeltaTable[1] =   delta&lt;br /&gt;
    DeltaTable[2] = - delta&lt;br /&gt;
    Advance to the next pair in DeltaTable&lt;br /&gt;
  DeltaTable[255] = delta + (code &amp;gt;&amp;gt; 5)&lt;br /&gt;
&lt;br /&gt;
== Size ID Table ==&lt;br /&gt;
&lt;br /&gt;
If the width and height fields in the GDV header are 0 then the size ID field determines the frame dimensions. Note that this feature does not appear to be used in production GDV movies but the code is still in place. The following table lists the possible size IDs and their corresponding frame dimensions:&lt;br /&gt;
&lt;br /&gt;
 struct  {&lt;br /&gt;
     short tag;  /* size ID */&lt;br /&gt;
     short width;&lt;br /&gt;
     short height;&lt;br /&gt;
 } FixedSize[] = {&lt;br /&gt;
     { 0, 320, 200}, &lt;br /&gt;
     { 1, 640, 200}, &lt;br /&gt;
     { 2, 320, 167}, &lt;br /&gt;
     { 3, 320, 180},&lt;br /&gt;
     { 4, 320, 400}, &lt;br /&gt;
     { 5, 320, 170}, &lt;br /&gt;
     { 6, 160,  85}, &lt;br /&gt;
     { 7, 160,  83},&lt;br /&gt;
     { 8, 160,  90}, &lt;br /&gt;
     { 9, 280, 128}, &lt;br /&gt;
     {10, 320, 240}, &lt;br /&gt;
     {11, 320, 201},&lt;br /&gt;
     {16, 640, 400}, &lt;br /&gt;
     {17, 640, 200}, &lt;br /&gt;
     {18, 640, 180}, &lt;br /&gt;
     {19, 640, 167},&lt;br /&gt;
     {20, 640, 170}, &lt;br /&gt;
     {21, 320, 240}&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Games Using The GDV Format ==&lt;br /&gt;
&lt;br /&gt;
These games are known to use the GDV file format for their FMV:&lt;br /&gt;
* [http://www.mobygames.com/game/windows/hardwar Hardwar]&lt;br /&gt;
* [http://www.mobygames.com/game/dos/jungle-strike-the-sequel-to-desert-strike Jungle Strike (CD)]&lt;br /&gt;
* [http://www.mobygames.com/game/dos/normality Normality]&lt;br /&gt;
* [http://www.mobygames.com/game/dos/realms-of-the-haunting Realms of the Haunting]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Talk:Gremlin_Digital_Video&amp;diff=15277</id>
		<title>Talk:Gremlin Digital Video</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Talk:Gremlin_Digital_Video&amp;diff=15277"/>
		<updated>2017-08-25T10:24:04Z</updated>

		<summary type="html">&lt;p&gt;Ce: Created page with &amp;quot;(c) Kostya http://sprunge.us/PTHd &amp;lt;pre&amp;gt; use formats; use super::*; use io::byteio::*;  struct GremlinVideoDecoder {     info:       Rc&amp;lt;NACodecInfo&amp;gt;,     pal:        [u8; 768],...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(c) Kostya&lt;br /&gt;
http://sprunge.us/PTHd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use formats;&lt;br /&gt;
use super::*;&lt;br /&gt;
use io::byteio::*;&lt;br /&gt;
&lt;br /&gt;
struct GremlinVideoDecoder {&lt;br /&gt;
    info:       Rc&amp;lt;NACodecInfo&amp;gt;,&lt;br /&gt;
    pal:        [u8; 768],&lt;br /&gt;
    frame:      Vec&amp;lt;u8&amp;gt;,&lt;br /&gt;
    scale_v:    bool,&lt;br /&gt;
    scale_h:    bool,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct Bits16 {&lt;br /&gt;
    queue: u16,&lt;br /&gt;
    fill:  u8,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct Bits32 {&lt;br /&gt;
    queue: u32,&lt;br /&gt;
    fill:  u8,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const PREAMBLE_SIZE: usize = 4096;&lt;br /&gt;
&lt;br /&gt;
impl Bits16 {&lt;br /&gt;
    fn new() -&amp;gt; Self { Bits16 { queue: 0, fill: 0 } }&lt;br /&gt;
    fn read_2bits(&amp;amp;mut self, br: &amp;amp;mut ByteReader) -&amp;gt; ByteIOResult&amp;lt;u16&amp;gt; {&lt;br /&gt;
        if self.fill == 0 {&lt;br /&gt;
            self.queue |= (br.read_byte()? as u16) &amp;lt;&amp;lt; self.fill;&lt;br /&gt;
            self.fill  += 8;&lt;br /&gt;
        }&lt;br /&gt;
        let res = self.queue &amp;amp; 0x3;&lt;br /&gt;
        self.queue &amp;gt;&amp;gt;= 2;&lt;br /&gt;
        self.fill   -= 2;&lt;br /&gt;
        Ok(res)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
impl Bits32 {&lt;br /&gt;
    fn new() -&amp;gt; Self { Bits32 { queue: 0, fill: 0 } }&lt;br /&gt;
    fn fill(&amp;amp;mut self, br: &amp;amp;mut ByteReader) -&amp;gt; ByteIOResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        self.queue = br.read_u32le()?;&lt;br /&gt;
        self.fill  = 32;&lt;br /&gt;
        Ok(())&lt;br /&gt;
    }&lt;br /&gt;
    fn read_bits(&amp;amp;mut self, br: &amp;amp;mut ByteReader, nbits: u8) -&amp;gt; ByteIOResult&amp;lt;u32&amp;gt; {&lt;br /&gt;
        let res = self.queue &amp;amp; ((1 &amp;lt;&amp;lt; nbits) - 1);&lt;br /&gt;
        self.queue &amp;gt;&amp;gt;= nbits;&lt;br /&gt;
        self.fill   -= nbits;&lt;br /&gt;
        if self.fill &amp;lt;= 16 {&lt;br /&gt;
            self.queue |= (br.read_u16le()? as u32) &amp;lt;&amp;lt; self.fill;&lt;br /&gt;
            self.fill  += 16;&lt;br /&gt;
        }&lt;br /&gt;
        Ok(res)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
impl GremlinVideoDecoder {&lt;br /&gt;
    fn new() -&amp;gt; Self {&lt;br /&gt;
        let dummy_info = Rc::new(DUMMY_CODEC_INFO);&lt;br /&gt;
        GremlinVideoDecoder {&lt;br /&gt;
            info: dummy_info, pal: [0; 768], frame: Vec::new(),&lt;br /&gt;
            scale_v: false, scale_h: false&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn lz_copy(&amp;amp;mut self, idx: usize, offset: isize, len: usize) -&amp;gt; DecoderResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        if idx + len &amp;gt; self.frame.len() { return Err(DecoderError::InvalidData); }&lt;br /&gt;
        if offset == -1 {&lt;br /&gt;
            let c = self.frame[idx - 1];&lt;br /&gt;
            for i in 0..len { self.frame[idx + i] = c; }&lt;br /&gt;
        } else if offset &amp;lt; 0 {&lt;br /&gt;
            let start = idx - (-offset as usize);&lt;br /&gt;
            for i in 0..len { self.frame[idx + i] = self.frame[start + i]; }&lt;br /&gt;
        } else {&lt;br /&gt;
            if idx + (offset as usize) + len &amp;gt; self.frame.len() { return Err(DecoderError::InvalidData); }&lt;br /&gt;
            let start = idx + (offset as usize);&lt;br /&gt;
            for i in 0..len { self.frame[idx + i] = self.frame[start + i]; }&lt;br /&gt;
        }&lt;br /&gt;
        Ok(())&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn rescale(&amp;amp;mut self, w: usize, h: usize, scale_v: bool, scale_h: bool) {&lt;br /&gt;
        if (self.scale_v == scale_v) &amp;amp;&amp;amp; (self.scale_h == scale_h) { return; }&lt;br /&gt;
&lt;br /&gt;
        if self.scale_h &amp;amp;&amp;amp; self.scale_v {&lt;br /&gt;
            for j in 0..h {&lt;br /&gt;
                let y = h - j - 1;&lt;br /&gt;
                for i in 0..w {&lt;br /&gt;
                    let x = w - i - 1;&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * w] = self.frame[PREAMBLE_SIZE + x/2 + (y/2) * (w/2)];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } else if self.scale_h {&lt;br /&gt;
            for j in 0..h {&lt;br /&gt;
                let y = h - j - 1;&lt;br /&gt;
                for x in 0..w {&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * w] = self.frame[PREAMBLE_SIZE + x + (y/2) * w];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } else if self.scale_v {&lt;br /&gt;
            for j in 0..h {&lt;br /&gt;
                let y = h - j - 1;&lt;br /&gt;
                for i in 0..w {&lt;br /&gt;
                    let x = w - i - 1;&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * w] = self.frame[PREAMBLE_SIZE + x/2 + y * (w/2)];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if scale_h &amp;amp;&amp;amp; scale_v {&lt;br /&gt;
            for y in 0..h/2 {&lt;br /&gt;
                for x in 0..w/2 {&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * (w/2)] = self.frame[PREAMBLE_SIZE + x*2 + y*2 * w];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } else if scale_h {&lt;br /&gt;
            for y in 0..h/2 {&lt;br /&gt;
                for x in 0..w {&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * w] = self.frame[PREAMBLE_SIZE + x + y*2 * w];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } else if scale_v {&lt;br /&gt;
            for y in 0..h {&lt;br /&gt;
                for x in 0..w/2 {&lt;br /&gt;
                    self.frame[PREAMBLE_SIZE + x + y * w] = self.frame[PREAMBLE_SIZE + x*2 + y * w];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        self.scale_v = scale_v;&lt;br /&gt;
        self.scale_h = scale_h;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn output_frame(&amp;amp;mut self, bufinfo: &amp;amp;mut NABufferType, w: usize, h: usize) {&lt;br /&gt;
        let bufo = bufinfo.get_vbuf();&lt;br /&gt;
        let mut buf = bufo.unwrap();&lt;br /&gt;
        let paloff = buf.get_offset(1);&lt;br /&gt;
        let stride = buf.get_stride(0);&lt;br /&gt;
        let mut data = buf.get_data_mut();&lt;br /&gt;
        let mut dst = data.as_mut_slice();&lt;br /&gt;
        let mut sidx = PREAMBLE_SIZE;&lt;br /&gt;
        let mut didx = 0;&lt;br /&gt;
&lt;br /&gt;
        for i in 0..768 { dst[paloff + i] = self.pal[i]; }&lt;br /&gt;
        if !self.scale_v &amp;amp;&amp;amp; !self.scale_h {&lt;br /&gt;
            for _ in 0..h {&lt;br /&gt;
                for x in 0..w { dst[didx + x] = self.frame[sidx + x]; }&lt;br /&gt;
                sidx += w;&lt;br /&gt;
                didx += stride;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            for y in 0..h {&lt;br /&gt;
                if !self.scale_v {&lt;br /&gt;
                    for x in 0..w { dst[didx + x] = self.frame[sidx + x]; }&lt;br /&gt;
                } else {&lt;br /&gt;
                    for x in 0..w { dst[didx + x] = self.frame[sidx + x/2]; }&lt;br /&gt;
                }&lt;br /&gt;
                if !self.scale_h || ((y &amp;amp; 1) == 1) {&lt;br /&gt;
                    sidx += if !self.scale_v { w } else { w/2 };&lt;br /&gt;
                }&lt;br /&gt;
                didx += stride;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn decode_method2(&amp;amp;mut self, br: &amp;amp;mut ByteReader) -&amp;gt; DecoderResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        let mut bits = Bits16::new();&lt;br /&gt;
&lt;br /&gt;
        let mut size = self.info.get_properties().get_video_info().unwrap().get_width() *&lt;br /&gt;
                        self.info.get_properties().get_video_info().unwrap().get_height();&lt;br /&gt;
        let mut idx = PREAMBLE_SIZE;&lt;br /&gt;
        for c in 0..256 {&lt;br /&gt;
            for i in 0..16 { self.frame[c * 16 + i] = c as u8; }&lt;br /&gt;
        }&lt;br /&gt;
        while size &amp;gt; 0 {&lt;br /&gt;
            let tag = bits.read_2bits(br)?;&lt;br /&gt;
            if tag == 0 {&lt;br /&gt;
                self.frame[idx] = br.read_byte()?;&lt;br /&gt;
                size -= 1;&lt;br /&gt;
                idx  += 1;&lt;br /&gt;
            } else if tag == 1 {&lt;br /&gt;
                let b = br.read_byte()?;&lt;br /&gt;
                let len = ((b &amp;amp; 0xF) as usize) + 3;&lt;br /&gt;
                let top = (b &amp;gt;&amp;gt; 4) as isize;&lt;br /&gt;
                let off = (top &amp;lt;&amp;lt; 8) + (br.read_byte()? as isize) - 4096;&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                self.lz_copy(idx, off, len)?; &lt;br /&gt;
                idx += len;&lt;br /&gt;
            } else if tag == 2 {&lt;br /&gt;
                let len = (br.read_byte()? as usize) + 2;&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                idx += len;&lt;br /&gt;
            } else {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        Ok(())&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn decode_method5(&amp;amp;mut self, br: &amp;amp;mut ByteReader, skip: usize) -&amp;gt; DecoderResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        let mut bits = Bits16::new();&lt;br /&gt;
&lt;br /&gt;
        let mut size = self.info.get_properties().get_video_info().unwrap().get_width() *&lt;br /&gt;
                        self.info.get_properties().get_video_info().unwrap().get_height();&lt;br /&gt;
        let mut idx = PREAMBLE_SIZE;&lt;br /&gt;
        validate!(size &amp;gt;= skip);&lt;br /&gt;
        size -= skip;&lt;br /&gt;
        idx  += skip;&lt;br /&gt;
        while size &amp;gt; 0 {&lt;br /&gt;
            let tag = bits.read_2bits(br)?;&lt;br /&gt;
            if tag == 0 {&lt;br /&gt;
                self.frame[idx] = br.read_byte()?;&lt;br /&gt;
                size -= 1;&lt;br /&gt;
                idx  += 1;&lt;br /&gt;
            } else if tag == 1 {&lt;br /&gt;
                let b = br.read_byte()?;&lt;br /&gt;
                let len = ((b &amp;amp; 0xF) as usize) + 3;&lt;br /&gt;
                let top = (b &amp;gt;&amp;gt; 4) as isize;&lt;br /&gt;
                let off = (top &amp;lt;&amp;lt; 8) + (br.read_byte()? as isize) - 4096;&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                self.lz_copy(idx, off, len)?; &lt;br /&gt;
                idx += len;&lt;br /&gt;
            } else if tag == 2 {&lt;br /&gt;
                let b = br.read_byte()?;&lt;br /&gt;
                if b == 0 { break; }&lt;br /&gt;
                let len: usize = if b != 0xFF { b as usize } else { br.read_u16le()? as usize };&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                idx += len;&lt;br /&gt;
            } else {&lt;br /&gt;
                let b = br.read_byte()?;&lt;br /&gt;
                let len = ((b &amp;amp; 0x3) as usize) + 2;&lt;br /&gt;
                let off = -((b &amp;gt;&amp;gt; 2) as isize) - 1;&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                self.lz_copy(idx, off, len)?; &lt;br /&gt;
                idx += len;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        Ok(())&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn decode_method68(&amp;amp;mut self, br: &amp;amp;mut ByteReader,&lt;br /&gt;
                       skip: usize, use8: bool) -&amp;gt; DecoderResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        let mut bits = Bits32::new();&lt;br /&gt;
&lt;br /&gt;
        let mut size = self.info.get_properties().get_video_info().unwrap().get_width() *&lt;br /&gt;
                        self.info.get_properties().get_video_info().unwrap().get_height();&lt;br /&gt;
        let mut idx = PREAMBLE_SIZE;&lt;br /&gt;
        validate!(size &amp;gt;= skip);&lt;br /&gt;
        size -= skip;&lt;br /&gt;
        idx  += skip;&lt;br /&gt;
        bits.fill(br)?;&lt;br /&gt;
        while size &amp;gt; 0 {&lt;br /&gt;
            let tag = bits.read_bits(br, 2)?;&lt;br /&gt;
            if tag == 0 { //draw&lt;br /&gt;
                let b = bits.read_bits(br, 1)?;&lt;br /&gt;
                if b == 0 {&lt;br /&gt;
                    self.frame[idx] = br.read_byte()?;&lt;br /&gt;
                    size -= 1;&lt;br /&gt;
                    idx  += 1;&lt;br /&gt;
                } else {&lt;br /&gt;
                    let mut len: usize = 2;&lt;br /&gt;
                    let mut lbits = 0;&lt;br /&gt;
                    loop {&lt;br /&gt;
                        lbits += 1;&lt;br /&gt;
                        let val = bits.read_bits(br, lbits)?;&lt;br /&gt;
                        len += val as usize;&lt;br /&gt;
                        if val != ((1 &amp;lt;&amp;lt; lbits) - 1) { break; }&lt;br /&gt;
                        validate!(lbits &amp;lt; 16);&lt;br /&gt;
                    }&lt;br /&gt;
                    validate!(len &amp;lt;= size);&lt;br /&gt;
                    for i in 0..len { self.frame[idx + i] = br.read_byte()?; }&lt;br /&gt;
                    size -= len;&lt;br /&gt;
                    idx  += len;&lt;br /&gt;
                }&lt;br /&gt;
            } else if tag == 1 { //skip&lt;br /&gt;
                let b = bits.read_bits(br, 1)?;&lt;br /&gt;
                let len: usize;&lt;br /&gt;
                if b == 0 {&lt;br /&gt;
                    len = (bits.read_bits(br, 4)? as usize) + 2;&lt;br /&gt;
                } else {&lt;br /&gt;
                    let bb = br.read_byte()?;&lt;br /&gt;
                    if (bb &amp;amp; 0x80) == 0 {&lt;br /&gt;
                        len = (bb as usize) + 18;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        let top = ((bb &amp;amp; 0x7F) as usize) &amp;lt;&amp;lt; 8;&lt;br /&gt;
                        len = top + (br.read_byte()? as usize) + 146;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                idx  += len;&lt;br /&gt;
            } else if tag == 2 {&lt;br /&gt;
                let subtag = bits.read_bits(br, 2)? as usize;&lt;br /&gt;
                if subtag != 3 {&lt;br /&gt;
                    let top = (bits.read_bits(br, 4)? as usize) &amp;lt;&amp;lt; 8;&lt;br /&gt;
                    let offs = top + (br.read_byte()? as usize);&lt;br /&gt;
                    if (subtag != 0) || (offs &amp;lt;= 0xF80) {&lt;br /&gt;
                        let len = (subtag as usize) + 3;&lt;br /&gt;
                        self.lz_copy(idx, (offs as isize) - 4096, len)?;&lt;br /&gt;
                        idx += len;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        if offs == 0xFFF { return Ok(()); }&lt;br /&gt;
                        let real_off = ((offs &amp;gt;&amp;gt; 4) &amp;amp; 0x7) + 1;&lt;br /&gt;
                        let len = ((offs &amp;amp; 0xF) + 2) * 2;&lt;br /&gt;
                        validate!(len &amp;lt;= size);&lt;br /&gt;
                        size -= len;&lt;br /&gt;
                        let c1 = self.frame[idx - real_off];&lt;br /&gt;
                        let c2 = self.frame[idx - real_off + 1];&lt;br /&gt;
                        for i in 0..len/2 {&lt;br /&gt;
                            self.frame[idx + i*2 + 0] = c1;&lt;br /&gt;
                            self.frame[idx + i*2 + 1] = c2;&lt;br /&gt;
                        }&lt;br /&gt;
                        idx += len;&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    let b = br.read_byte()?;&lt;br /&gt;
                    let off = ((b &amp;amp; 0x7F) as usize) + 1;&lt;br /&gt;
                    let len = if (b &amp;amp; 0x80) == 0 { 2 } else { 3 };&lt;br /&gt;
                    validate!(len &amp;lt;= size);&lt;br /&gt;
                    size -= len;&lt;br /&gt;
                    self.lz_copy(idx, -(off as isize), len)?; &lt;br /&gt;
                    idx += len;&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                let len: usize;&lt;br /&gt;
                let off: isize;&lt;br /&gt;
                if use8 {&lt;br /&gt;
                    let b = br.read_byte()?;&lt;br /&gt;
                    if (b &amp;amp; 0xC0) == 0xC0 {&lt;br /&gt;
                        len = ((b &amp;amp; 0x3F) as usize) + 8;&lt;br /&gt;
                        let q = bits.read_bits(br, 4)? as isize;&lt;br /&gt;
                        off = (q &amp;lt;&amp;lt; 8) + (br.read_byte()? as isize) + 1;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        let ofs1: isize;&lt;br /&gt;
                        if (b &amp;amp; 0x80) == 0 {&lt;br /&gt;
                            len = ((b &amp;gt;&amp;gt; 4) as usize) + 6;&lt;br /&gt;
                            ofs1 = (b &amp;amp; 0xF) as isize;&lt;br /&gt;
                        } else {&lt;br /&gt;
                            len = ((b &amp;amp; 0x3F) as usize) + 14;&lt;br /&gt;
                            ofs1 = bits.read_bits(br, 4)? as isize;&lt;br /&gt;
                        }&lt;br /&gt;
                        off = (ofs1 &amp;lt;&amp;lt; 8) + (br.read_byte()? as isize) - 4096;&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    let b = br.read_byte()?;&lt;br /&gt;
                    if (b &amp;gt;&amp;gt; 4) == 0xF {&lt;br /&gt;
                        len = (br.read_byte()? as usize) + 21;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        len = ((b &amp;gt;&amp;gt; 4) as usize) + 6;&lt;br /&gt;
                    }&lt;br /&gt;
                    let ofs1 = (b &amp;amp; 0xF) as isize;&lt;br /&gt;
                    off = (ofs1 &amp;lt;&amp;lt; 8) + (br.read_byte()? as isize) - 4096;&lt;br /&gt;
                }&lt;br /&gt;
                validate!(len &amp;lt;= size);&lt;br /&gt;
                size -= len;&lt;br /&gt;
                self.lz_copy(idx, off, len)?; &lt;br /&gt;
                idx += len;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        Ok(())&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
impl NADecoder for GremlinVideoDecoder {&lt;br /&gt;
    fn init(&amp;amp;mut self, info: Rc&amp;lt;NACodecInfo&amp;gt;) -&amp;gt; DecoderResult&amp;lt;()&amp;gt; {&lt;br /&gt;
        if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {&lt;br /&gt;
            let w = vinfo.get_width();&lt;br /&gt;
            let h = vinfo.get_height();&lt;br /&gt;
            if !vinfo.get_format().is_paletted() { return Err(DecoderError::NotImplemented); }&lt;br /&gt;
            let fmt = formats::PAL8_FORMAT;&lt;br /&gt;
            let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, fmt));&lt;br /&gt;
            self.info = Rc::new(NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()));&lt;br /&gt;
&lt;br /&gt;
            self.frame.resize(PREAMBLE_SIZE + w * h, 0);&lt;br /&gt;
            for i in 0..2 {&lt;br /&gt;
                for j in 0..256 {&lt;br /&gt;
                    for k in 0..8 {&lt;br /&gt;
                        self.frame[i * 2048 + j * 8 + k] = j as u8;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            let edata = info.get_extradata().unwrap();&lt;br /&gt;
            validate!(edata.len() == 768);&lt;br /&gt;
            for c in 0..256 {&lt;br /&gt;
                for i in 0..3 {&lt;br /&gt;
                    let cc = edata[c * 3 + i];&lt;br /&gt;
                    self.pal[c * 3 + (2 - i)] = (cc &amp;lt;&amp;lt; 2) | (cc &amp;gt;&amp;gt; 4);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            Ok(())&lt;br /&gt;
        } else {&lt;br /&gt;
            Err(DecoderError::InvalidData)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    fn decode(&amp;amp;mut self, pkt: &amp;amp;NAPacket) -&amp;gt; DecoderResult&amp;lt;NAFrameRef&amp;gt; {&lt;br /&gt;
        let src = pkt.get_buffer();&lt;br /&gt;
        let mut mr = MemoryReader::new_read(&amp;amp;src);&lt;br /&gt;
        let mut br = ByteReader::new(&amp;amp;mut mr);&lt;br /&gt;
        let flags = br.read_u32le()?;&lt;br /&gt;
        let w = self.info.get_properties().get_video_info().unwrap().get_width();&lt;br /&gt;
        let h = self.info.get_properties().get_video_info().unwrap().get_height();&lt;br /&gt;
&lt;br /&gt;
        let cmethod = flags &amp;amp; 0xF;&lt;br /&gt;
        let is_intra = (flags &amp;amp; 0x40) != 0;&lt;br /&gt;
        let scale_v = (flags &amp;amp; 0x10) != 0;&lt;br /&gt;
        let scale_h = (flags &amp;amp; 0x20) != 0;&lt;br /&gt;
&lt;br /&gt;
        self.rescale(w, h, scale_v, scale_h);&lt;br /&gt;
&lt;br /&gt;
        if (cmethod == 0) || (cmethod == 1) {&lt;br /&gt;
            for c in 0..256 {&lt;br /&gt;
                for i in 0..3 {&lt;br /&gt;
                    let b = br.read_byte()?;&lt;br /&gt;
                    self.pal[c * 3 + (2 - i)] = (b &amp;lt;&amp;lt; 2) | (b &amp;gt;&amp;gt; 4);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if cmethod == 1 {&lt;br /&gt;
                for i in PREAMBLE_SIZE..self.frame.len() { self.frame[i] = 0x00; }&lt;br /&gt;
            }&lt;br /&gt;
            let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);&lt;br /&gt;
            frm.set_keyframe(false);&lt;br /&gt;
            frm.set_frame_type(FrameType::Skip);&lt;br /&gt;
            return Ok(Rc::new(RefCell::new(frm)))&lt;br /&gt;
        } else if cmethod == 3 {&lt;br /&gt;
            let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);&lt;br /&gt;
            frm.set_keyframe(false);&lt;br /&gt;
            frm.set_frame_type(FrameType::Skip);&lt;br /&gt;
            return Ok(Rc::new(RefCell::new(frm)))&lt;br /&gt;
        } else if cmethod == 2 {&lt;br /&gt;
            self.decode_method2(&amp;amp;mut br)?;&lt;br /&gt;
        } else if cmethod == 5 {&lt;br /&gt;
            self.decode_method5(&amp;amp;mut br, (flags &amp;gt;&amp;gt; 8) as usize)?;&lt;br /&gt;
        } else if cmethod == 6 {&lt;br /&gt;
            self.decode_method68(&amp;amp;mut br, (flags &amp;gt;&amp;gt; 8) as usize, false)?;&lt;br /&gt;
        } else if cmethod == 8 {&lt;br /&gt;
            self.decode_method68(&amp;amp;mut br, (flags &amp;gt;&amp;gt; 8) as usize, true)?;&lt;br /&gt;
        } else {&lt;br /&gt;
            return Err(DecoderError::NotImplemented);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        let bufret = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 0);&lt;br /&gt;
        if let Err(_) = bufret { return Err(DecoderError::InvalidData); }&lt;br /&gt;
        let mut bufinfo = bufret.unwrap();&lt;br /&gt;
&lt;br /&gt;
        self.output_frame(&amp;amp;mut bufinfo, w, h);&lt;br /&gt;
&lt;br /&gt;
        let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);&lt;br /&gt;
        frm.set_keyframe(is_intra);&lt;br /&gt;
        frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });&lt;br /&gt;
        Ok(Rc::new(RefCell::new(frm)))&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pub fn get_decoder() -&amp;gt; Box&amp;lt;NADecoder&amp;gt; {&lt;br /&gt;
    Box::new(GremlinVideoDecoder::new())&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[cfg(test)]&lt;br /&gt;
mod test {&lt;br /&gt;
    use codecs::*;&lt;br /&gt;
    use demuxers::*;&lt;br /&gt;
    use io::byteio::*;&lt;br /&gt;
    use std::fs::File;&lt;br /&gt;
&lt;br /&gt;
    #[test]&lt;br /&gt;
    fn test_gdv() {&lt;br /&gt;
        let gdv_dmx = find_demuxer(&amp;quot;gdv&amp;quot;).unwrap();&lt;br /&gt;
        let mut file = File::open(&amp;quot;assets/intro1.gdv&amp;quot;).unwrap();&lt;br /&gt;
        let mut fr = FileReader::new_read(&amp;amp;mut file);&lt;br /&gt;
        let mut br = ByteReader::new(&amp;amp;mut fr);&lt;br /&gt;
        let mut dmx = gdv_dmx.new_demuxer(&amp;amp;mut br);&lt;br /&gt;
        dmx.open().unwrap();&lt;br /&gt;
&lt;br /&gt;
        let mut decs: Vec&amp;lt;Option&amp;lt;Box&amp;lt;NADecoder&amp;gt;&amp;gt;&amp;gt; = Vec::new();&lt;br /&gt;
        for i in 0..dmx.get_num_streams() {&lt;br /&gt;
            let s = dmx.get_stream(i).unwrap();&lt;br /&gt;
            let info = s.get_info();&lt;br /&gt;
            let decfunc = find_decoder(info.get_name());&lt;br /&gt;
            if !info.is_video() {&lt;br /&gt;
                decs.push(None);&lt;br /&gt;
            } else if let Some(df) = decfunc {&lt;br /&gt;
                let mut dec = (df)();&lt;br /&gt;
                dec.init(info).unwrap();&lt;br /&gt;
                decs.push(Some(dec));&lt;br /&gt;
            } else {&lt;br /&gt;
panic!(&amp;quot;decoder {} not found&amp;quot;, info.get_name());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        loop {&lt;br /&gt;
            let pktres = dmx.get_frame();&lt;br /&gt;
            if let Err(e) = pktres {&lt;br /&gt;
                if e == DemuxerError::EOF { break; }&lt;br /&gt;
            }&lt;br /&gt;
            let pkt = pktres.unwrap();&lt;br /&gt;
            let streamno = pkt.get_stream().get_id() as usize;&lt;br /&gt;
            if let Some(ref mut dec) = decs[streamno] {&lt;br /&gt;
                let frm = dec.decode(&amp;amp;pkt).unwrap();&lt;br /&gt;
                if pkt.get_stream().get_info().is_video() {&lt;br /&gt;
                    if frm.borrow().get_frame_type() != FrameType::Skip {&lt;br /&gt;
                        write_palppm(&amp;quot;gdv&amp;quot;, streamno, pkt.get_pts().unwrap(), frm);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if pkt.get_pts().unwrap() &amp;gt; 8 { break; }&lt;br /&gt;
        }&lt;br /&gt;
//panic!(&amp;quot;end&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=SheerVideo&amp;diff=15239</id>
		<title>SheerVideo</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=SheerVideo&amp;diff=15239"/>
		<updated>2016-06-10T16:38:04Z</updated>

		<summary type="html">&lt;p&gt;Ce: Implemented by Paul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCCs: Shr0, Shr1, Shr2, Shr3, Shr4, Shr5, Shr6, Shr7&lt;br /&gt;
&lt;br /&gt;
* Website: http://www.bitjazz.com/sheervideo/&lt;br /&gt;
* Samples: http://www.dvjtj.com/repository.php&lt;br /&gt;
&lt;br /&gt;
SheerVideo is a family of real-time lossless video codecs intended for capture, editing, playback, and archival of professional-quality video, digitized film, and computer-generated imagery. It supports all professional-quality pixel formats, including RGB[A], and Y'CbCr[A]; with and without alpha; 10-bit and 8-bit; full-range and video-range; 4:4:4[:4] and 4:2:2[:4]; progressive-scan and interlaced; SD, HD, anyD; 4:3, 16:9, and any:any. SheerVideo does no interframe compression, so all frames are keyframes, for instant random access. &lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
=== Codecs ===&lt;br /&gt;
&lt;br /&gt;
SheerVideo currently consists of 8 codecs - a generic 'Sheer' codec, 6 fully supported specific codecs, and a legacy codec (Sheer Y'CbCr 8bw 4:2:2) for backward compatibility: &lt;br /&gt;
&lt;br /&gt;
* Sheer&lt;br /&gt;
* Sheer RGB[A] 10bf&lt;br /&gt;
* Sheer RGB[A] 8bf&lt;br /&gt;
* Sheer Y'CbCr[A] 10bv 4:4:4[:4]&lt;br /&gt;
* Sheer Y'CbCr[A] 8bv 4:4:4[:4]&lt;br /&gt;
* Sheer Y'CbCr[A] 10bv 4:2:2[:4]&lt;br /&gt;
* Sheer Y'CbCr[A] 8bv 4:2:2[:4]&lt;br /&gt;
* Sheer Y'CbCr 8bw 4:2:2&lt;br /&gt;
&lt;br /&gt;
Each of the 6 main specific codecs supports an optional alpha channel, and each has both a progressive coding mode and an interlaced coding mode, so there are 4 flavors of each codec. The generic codec chooses the appropriate codec depending on the source pixel format provided. The name of the specific codec indicates the native class of pixel formats which it handles in real-time without loss. For example, the 'Sheer RGB[A] 8bf' codec provides real-time lossless encoding from and decoding to any RGB[A] pixel-format with 8-bit full-range channels. &lt;br /&gt;
&lt;br /&gt;
=== Color Conversion ===&lt;br /&gt;
&lt;br /&gt;
A unique feaure of SheerVideo is its maximally accurate Synchromy color-conversion engine, which can losslessly interconvert between RGB[A] (film &amp;amp; CGI) and Y'CbCr[A] (video) color spaces, which is useful when compositing video and digitized film &amp;amp; CGI, as most productions nowadays do. Synchromy gives every Sheer codec the capability to input and output all supported pixel formats with maximal accuracy. &lt;br /&gt;
&lt;br /&gt;
To specify the precise color-conversion parameters, the video color space can be set to NTSC, PAL or SECAM, HD, and HD-1035, and the RGB[A] range for 10-bit pixel can be specified as full-range or video-range. &lt;br /&gt;
&lt;br /&gt;
=== Pixel Formats ===&lt;br /&gt;
&lt;br /&gt;
The generic Sheer codec and each of the 6 main specific Sheer codecs support all of the following pixel formats: &lt;br /&gt;
&lt;br /&gt;
* RGB[A] 10b:&lt;br /&gt;
** b64a&lt;br /&gt;
** b48r&lt;br /&gt;
** F10k&lt;br /&gt;
** R10k&lt;br /&gt;
** S10k&lt;br /&gt;
** F210&lt;br /&gt;
** r210&lt;br /&gt;
** S210&lt;br /&gt;
* RGB[A] 8b:&lt;br /&gt;
** raw&lt;br /&gt;
** ARGB&lt;br /&gt;
** ABGR&lt;br /&gt;
** RGBA&lt;br /&gt;
** BGRA&lt;br /&gt;
** RGB&lt;br /&gt;
** BGR&lt;br /&gt;
** 24BG&lt;br /&gt;
* Y'CbCr[A] 10bv 4:4:4[:4]&lt;br /&gt;
** r4fl&lt;br /&gt;
** v410&lt;br /&gt;
* Y'CbCr[A] 8bv 4:4:4[:4]&lt;br /&gt;
** v408&lt;br /&gt;
** r408&lt;br /&gt;
* Y'CbCr[A] 10bv 4:2:2[:4]&lt;br /&gt;
** v210&lt;br /&gt;
** v216&lt;br /&gt;
** Y216&lt;br /&gt;
* Y'CbCr[A] 8bv 4:2:2[:4]&lt;br /&gt;
** 2vuy&lt;br /&gt;
** 2Vuy&lt;br /&gt;
** yuvs&lt;br /&gt;
&lt;br /&gt;
The legacy Sheer Y'CbCr 8bw 4:2:2 codec does not include Synchromy, and supports only the obsolete wide-range Y'CbCr 8bw 4:2:2 pixel format: &lt;br /&gt;
&lt;br /&gt;
* yuvu&lt;br /&gt;
* yuv2&lt;br /&gt;
&lt;br /&gt;
=== Self-Check Mode ===&lt;br /&gt;
&lt;br /&gt;
The Sheer encoders feature an optional self-check mode that decodes each frame immediately after encoding and compares it to the original. In the QuickTime edition, this mode can generally only be used for the Sheer RGB[A] codecs, because the standard QuickTime interface requires RGB for the preview and other user-interface features. &lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
&lt;br /&gt;
SheerVideo is currently available for Windows PC, Mac UB, Mac Intel, Mac PPC, and Mac Classic. The Windows edition supports Windows '95, '98, Me, 2000, NT, and XP; Windows XP x64 is not yet supported. The Mac UB and Intel editions support Mac OS X 10.4+; while the Mac PPC edition supports Mac OS X 10.1+, and the Mac Classic version supports Mac OS 8.6 and Mac OS 9. Optimized vector-processor code accelerates the native encoding and decoding pathways for PowerPC G4 and G5 on the Mac; vectorized code for the PC is not yet available. &lt;br /&gt;
&lt;br /&gt;
SheerVideo is implemented as a set of [[QuickTime]] codecs (image compressors, image decompressors, and image transcoders) for both Mac and PC. For Windows, an [[AVI]] (Windows Media) edition is also available. &lt;br /&gt;
&lt;br /&gt;
The entire family of encoders, decoders, and transcoders is bundled into a single commercial product, 'SheerVideo Pro'. The decoders by themselves are bundled into a freeware product, 'SheerVideo Reader'. &lt;br /&gt;
&lt;br /&gt;
== Frame Format ==&lt;br /&gt;
&lt;br /&gt;
   0- 3  'Shir' or 'Zwak'&lt;br /&gt;
   4- 7  0x0D 0x0A 0x00 0x0A&lt;br /&gt;
   8     0xAD or 0xFF&lt;br /&gt;
   9-15  'BitJazz'&lt;br /&gt;
  16-19  colour format (e.g. ' RGB')&lt;br /&gt;
&lt;br /&gt;
Coding principle is quite easy — every line is transferred as raw or delta-coded with static codes. There is a dozen of different double codesets depending on input format, different components can be coded with the first or the second VLC in the set (that also depends on the format, e.g. luma may be coded with one table, chroma with the other).&lt;br /&gt;
&lt;br /&gt;
  mask = (1 &amp;lt;&amp;lt; bits_per_component) - 1;&lt;br /&gt;
  if (get_bit()) {&lt;br /&gt;
      for (x = 0; x &amp;lt; width; x++)&lt;br /&gt;
          for (i = 0; i &amp;lt; components; i++)&lt;br /&gt;
              line[0][x][i] = get_bits(bits_per_component);&lt;br /&gt;
  } else {&lt;br /&gt;
      for (i = 0; i &amp;lt; components; i++)&lt;br /&gt;
          pred[i] = pred_for_this_format[i];&lt;br /&gt;
      for (x = 0; x &amp;lt; width; x++)&lt;br /&gt;
          for (i = 0; i &amp;lt; components; i++)&lt;br /&gt;
              line[0][x][i] = pred[i] = (pred[i] + get_vlc(vlc_set[format][i])) &amp;amp; mask;&lt;br /&gt;
  }&lt;br /&gt;
  for (y = 1; y &amp;lt; height; y++) {&lt;br /&gt;
      if (get_bit()) {&lt;br /&gt;
          for (x = 0; x &amp;lt; width; x++)&lt;br /&gt;
              for (i = 0; i &amp;lt; components; i++)&lt;br /&gt;
                  line[0][x][i] = get_bits(bits_per_component);&lt;br /&gt;
      } else {&lt;br /&gt;
          for (i = 0; i &amp;lt; components; i++)&lt;br /&gt;
              pred_TL[i] = pred_L[i] = line[y - 1][0][i];&lt;br /&gt;
          for (x = 0; x &amp;lt; width; x++) {&lt;br /&gt;
              for (i = 0; i &amp;lt; components; i++) {&lt;br /&gt;
                  pred_T[i] = line[y - 1][x][i];&lt;br /&gt;
                  pix = (3 * pred_T[i] + 3 * pred_L[i] - 2 * pred_TL[i]) &amp;gt;&amp;gt; 2;&lt;br /&gt;
                  pix = (pix + get_vlc(vlc_set[format][i])) &amp;amp; mask;&lt;br /&gt;
                  line[y][x][i] = pix;&lt;br /&gt;
                  pred_L[i]  = pix;&lt;br /&gt;
                  pred_TL[i] = pred_T[i];&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Lossless Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=15183</id>
		<title>Interesting Patches</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=15183"/>
		<updated>2016-03-26T14:11:04Z</updated>

		<summary type="html">&lt;p&gt;Ce: Add flicvideo encoder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page tries to collect some useful patches for FFmpeg that didn't make into the repository for some reason or another.&lt;br /&gt;
&lt;br /&gt;
== flicvideo encoder by Steven Johnson and Alex Beregszaszi ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/44516&lt;br /&gt;
http://ffmpeg.org/pipermail/ffmpeg-devel/2007-February/025968.html&lt;br /&gt;
&lt;br /&gt;
== native [[Zlib]] decoder by [[User:Mans|Mans Rullgard]] ==&lt;br /&gt;
https://github.com/michaelni/FFmpeg/tree/inflate&lt;br /&gt;
&lt;br /&gt;
== [[WMV3]] encoder by Denis Fortin ==&lt;br /&gt;
http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2007-June/031326.html&lt;br /&gt;
&lt;br /&gt;
== [[Apple RPZA]] encoder by Todd Kirby ==&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/87327/focus=87771&lt;br /&gt;
&lt;br /&gt;
== PES packetizer by Xiaohui Sun ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/52773/focus=56011&lt;br /&gt;
&lt;br /&gt;
Part of the work of [[FFmpeg Summer Of Code#TS Muxer|Summer Of Code TS Muxer]]&lt;br /&gt;
&lt;br /&gt;
== vf_imlib2: a libavfilter filter by [[User:Wzrlpy|Víctor Paesa]] ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/2007-December/002161.html&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;mem&amp;quot; file protocol by Lagrange Multiplier ==&lt;br /&gt;
The &amp;quot;mem&amp;quot; protocol simply uses RAM as a source for input multimedia data, akin to how the &amp;quot;file&amp;quot; and &amp;quot;pipe&amp;quot; protocols use filesystem files and pipes as sources.&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/49711&lt;br /&gt;
&lt;br /&gt;
== Presets/profiles for usual targets by Panagiotis Issaris ==&lt;br /&gt;
Allow to keep in a text file groups of command options, and apply them at once by specifying the target name.&lt;br /&gt;
&lt;br /&gt;
Handy for iPod, PSP, or any other picky multimedia player that otherwise requires lengthy command lines.&lt;br /&gt;
&lt;br /&gt;
http://article.gmane.org/gmane.comp.video.ffmpeg.devel/37244&lt;br /&gt;
&lt;br /&gt;
== H264 encoder by Jori Liesenborgs &amp;amp; Panagiotis Issaris ==&lt;br /&gt;
http://research.edm.uhasselt.be/~h264/&lt;br /&gt;
&lt;br /&gt;
== [[Chinese AVS]] video encoder by [[User:StefanG|Stefan Gehrer]] ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54415/focus=124500&lt;br /&gt;
&lt;br /&gt;
==  Lossless msmpeg4v3 to mpeg4 transcoder ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/17074&lt;br /&gt;
&lt;br /&gt;
== Fixed point cook decoder ==&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/46024&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/53003/focus=46913&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54008&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54553&lt;br /&gt;
&lt;br /&gt;
== GDI screen grabbing for Win32 ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/43589&lt;br /&gt;
&lt;br /&gt;
There are two implementations in the thread above.&lt;br /&gt;
&lt;br /&gt;
== [[MPEG-4 ALS]] encoder by [[User:Jruggle|Justin Ruggles]] ==&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
== Chromium security patches ==&lt;br /&gt;
Security/stability patches from Google's web browser&lt;br /&gt;
http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/ffmpeg/&lt;br /&gt;
&lt;br /&gt;
== TS ARIB STD-B24 caption decoder by Michael Wu ==&lt;br /&gt;
&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2009-October/062725.html&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Digital_Speech_Standard&amp;diff=15151</id>
		<title>Digital Speech Standard</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Digital_Speech_Standard&amp;diff=15151"/>
		<updated>2015-02-26T14:19:40Z</updated>

		<summary type="html">&lt;p&gt;Ce: DSS was implemented by Oleksij Rempel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Company: Olympus, Phillips, Grundig&lt;br /&gt;
* Extension: DSS&lt;br /&gt;
* Samples:&lt;br /&gt;
** http://samples.mplayerhq.hu/A-codecs/DSS/&lt;br /&gt;
** http://dcdc.asu.edu/events/recent.php&lt;br /&gt;
&lt;br /&gt;
DSS (Digital Speech Standard) is a format for voice recorders developed by Olympus, Phillips, and Grundig in 1994.&lt;br /&gt;
&lt;br /&gt;
Player software is available at: http://downloads.olympus-europa.com/consumer/VoiceRecorder/631/Dssl211E.exe&lt;br /&gt;
&lt;br /&gt;
Possible patents:&lt;br /&gt;
* [http://www.google.com/patents?vid=USPAT5978755 US PAT 5,978,755] describes the file format&lt;br /&gt;
* [http://www.google.com/patents?vid=USPAT5432883 US PAT 5,432,883] describes a possible audio codec by Olympus&lt;br /&gt;
* [http://www.google.com/patents?vid=USPAT5140638 US PAT 5,140,638] describes a possible audio codec by Philips&lt;br /&gt;
&lt;br /&gt;
[[Category:Vocoders]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=15033</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=15033"/>
		<updated>2014-05-26T13:45:25Z</updated>

		<summary type="html">&lt;p&gt;Ce: Bayer was implemented by Peter Ross&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=15032</id>
		<title>Interesting Patches</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=15032"/>
		<updated>2014-05-26T13:44:59Z</updated>

		<summary type="html">&lt;p&gt;Ce: Bayer was implemented by Peter Ross&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page tries to collect some useful patches for FFmpeg that didn't make into the repository for some reason or another.&lt;br /&gt;
&lt;br /&gt;
== native [[Zlib]] decoder by [[User:Mans|Mans Rullgard]] ==&lt;br /&gt;
https://github.com/michaelni/FFmpeg/tree/inflate&lt;br /&gt;
&lt;br /&gt;
== [[WMV3]] encoder by Denis Fortin ==&lt;br /&gt;
http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2007-June/031326.html&lt;br /&gt;
&lt;br /&gt;
== [[Apple RPZA]] encoder by Todd Kirby ==&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/87327/focus=87771&lt;br /&gt;
&lt;br /&gt;
== PES packetizer by Xiaohui Sun ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/52773/focus=56011&lt;br /&gt;
&lt;br /&gt;
Part of the work of [[FFmpeg Summer Of Code#TS Muxer|Summer Of Code TS Muxer]]&lt;br /&gt;
&lt;br /&gt;
== vf_imlib2: a libavfilter filter by [[User:Wzrlpy|Víctor Paesa]] ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/2007-December/002161.html&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;mem&amp;quot; file protocol by Lagrange Multiplier ==&lt;br /&gt;
The &amp;quot;mem&amp;quot; protocol simply uses RAM as a source for input multimedia data, akin to how the &amp;quot;file&amp;quot; and &amp;quot;pipe&amp;quot; protocols use filesystem files and pipes as sources.&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/49711&lt;br /&gt;
&lt;br /&gt;
== Presets/profiles for usual targets by Panagiotis Issaris ==&lt;br /&gt;
Allow to keep in a text file groups of command options, and apply them at once by specifying the target name.&lt;br /&gt;
&lt;br /&gt;
Handy for iPod, PSP, or any other picky multimedia player that otherwise requires lengthy command lines.&lt;br /&gt;
&lt;br /&gt;
http://article.gmane.org/gmane.comp.video.ffmpeg.devel/37244&lt;br /&gt;
&lt;br /&gt;
== H264 encoder by Jori Liesenborgs &amp;amp; Panagiotis Issaris ==&lt;br /&gt;
http://research.edm.uhasselt.be/~h264/&lt;br /&gt;
&lt;br /&gt;
== [[Chinese AVS]] video encoder by [[User:StefanG|Stefan Gehrer]] ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54415/focus=124500&lt;br /&gt;
&lt;br /&gt;
==  Lossless msmpeg4v3 to mpeg4 transcoder ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/17074&lt;br /&gt;
&lt;br /&gt;
== Fixed point cook decoder ==&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/46024&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/53003/focus=46913&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54008&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54553&lt;br /&gt;
&lt;br /&gt;
== GDI screen grabbing for Win32 ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/43589&lt;br /&gt;
&lt;br /&gt;
There are two implementations in the thread above.&lt;br /&gt;
&lt;br /&gt;
== [[MPEG-4 ALS]] encoder by [[User:Jruggle|Justin Ruggles]] ==&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
== Chromium security patches ==&lt;br /&gt;
Security/stability patches from Google's web browser&lt;br /&gt;
http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/ffmpeg/&lt;br /&gt;
&lt;br /&gt;
== TS ARIB STD-B24 caption decoder by Michael Wu ==&lt;br /&gt;
&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2009-October/062725.html&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_Audio_for_Video_Codec&amp;diff=15028</id>
		<title>On2 Audio for Video Codec</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_Audio_for_Video_Codec&amp;diff=15028"/>
		<updated>2014-04-24T06:42:32Z</updated>

		<summary type="html">&lt;p&gt;Ce: Implemented by Kostya&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Codec ID: 0x0500, 0x0501&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
&lt;br /&gt;
On2's Audio for Video codec (AVC) is a perceptual audio codec by On2, packaged in [[Microsoft Audio/Video Interleaved|AVI]] files along with their video codecs.&lt;br /&gt;
&lt;br /&gt;
The codec seems to be MDCT-based with frame of 1024 samples.&lt;br /&gt;
&lt;br /&gt;
Version &amp;lt;code&amp;gt;0x0500&amp;lt;/code&amp;gt; coded only monaural sound with one chunk per audio frame, &amp;lt;code&amp;gt;0x0501&amp;lt;/code&amp;gt; can be stereo and contain several chunks in a single frame (every chunk has 16-bit little-endian coded size before it).&lt;br /&gt;
&lt;br /&gt;
=== Chunk format ===&lt;br /&gt;
&lt;br /&gt;
  enhanced mode flag (should be always zero)&lt;br /&gt;
  coding mode (3 bits)&lt;br /&gt;
  if (coding mode == 3) // short windows&lt;br /&gt;
    window grouping flags (7 bits)&lt;br /&gt;
  M/S present flag&lt;br /&gt;
  if (M/S present)&lt;br /&gt;
    M/S flags for each independent band&lt;br /&gt;
  codebook description&lt;br /&gt;
  scales&lt;br /&gt;
  coefficients&lt;br /&gt;
&lt;br /&gt;
==== Window mode ====&lt;br /&gt;
&lt;br /&gt;
* 0 - ordinary long window&lt;br /&gt;
* 1 - long window with fading in delay&lt;br /&gt;
* 2 - long window with special windowing and delay handling&lt;br /&gt;
* 3 - eight short windows&lt;br /&gt;
* 4-7 - long window with special windowing and delay handling&lt;br /&gt;
&lt;br /&gt;
==== Codebook description ====&lt;br /&gt;
&lt;br /&gt;
  base  = 0;&lt;br /&gt;
  nsect = 0;&lt;br /&gt;
  bps = long window ? 5 : 3;&lt;br /&gt;
  esc = (1 &amp;lt;&amp;lt; bps) - 1;&lt;br /&gt;
  while (base &amp;lt; bands) {&lt;br /&gt;
    section[nsect].cb = get_bits(4);&lt;br /&gt;
    val = get_bits(bps);&lt;br /&gt;
    while (val == esc) {&lt;br /&gt;
      base += val;&lt;br /&gt;
      val   = get_bits(bps);&lt;br /&gt;
    }&lt;br /&gt;
    base += val;&lt;br /&gt;
    section[nsect].end = base;&lt;br /&gt;
    nsect++;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==== Scale description ====&lt;br /&gt;
&lt;br /&gt;
Scales are read for all independent bands with non-zero coding. First scale is explicitly coded as 7-bit value, the following scales are coded as a difference to the previous scale with static Huffman code.&lt;br /&gt;
&lt;br /&gt;
==== Coefficients ====&lt;br /&gt;
&lt;br /&gt;
Coefficients are coded with 14 different static Huffman codesets. Codeset 0 is not coded, codesets 1-8 encode quadruplets of coefficients, codesets 9-15 code pairs of coefficients. Additionally, for codeset 15 values -16 and 16 are escape values. In case those escape values happen, real values are read as exp-Golomb plus three additional bits and the sign should be the same as the sign of escape value.&lt;br /&gt;
&lt;br /&gt;
Unscaling is performed as &amp;lt;code&amp;gt;coeffs[i] = val * sqrt(val) * scale_tab[scale]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tables ===&lt;br /&gt;
&lt;br /&gt;
==== Long window band ends ====&lt;br /&gt;
&lt;br /&gt;
     4,   8,  12,  16,  20,  24,  28,  32,&lt;br /&gt;
    36,  40,  48,  56,  64,  72,  80,  88,&lt;br /&gt;
    96, 108, 120, 132, 144, 156, 172, 188,&lt;br /&gt;
   204, 224, 244, 264, 288, 312, 340, 368,&lt;br /&gt;
   400, 432, 464, 496, 528, 560, 592, 624,&lt;br /&gt;
   656, 688, 720, 752, 784, 816, 848, 880,&lt;br /&gt;
  1024&lt;br /&gt;
&lt;br /&gt;
==== Short window band ends ====&lt;br /&gt;
&lt;br /&gt;
   4,  8, 12, 16,  20,  24, 32, 40,&lt;br /&gt;
  48, 56, 68, 80, 108, 128&lt;br /&gt;
&lt;br /&gt;
==== Scale table ====&lt;br /&gt;
&lt;br /&gt;
For 0-19:&lt;br /&gt;
&lt;br /&gt;
  scale_tab[i] = ceil(exp(ln(10) / 10 * i) * 16) / 32&lt;br /&gt;
&lt;br /&gt;
For 20-127:&lt;br /&gt;
&lt;br /&gt;
  scale_tab[i] = ceil(exp(ln(10) / 10 * i) * 0.5)&lt;br /&gt;
&lt;br /&gt;
==== Huffman tables ====&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===== Scale differences table =====&lt;br /&gt;
&lt;br /&gt;
Codes (-60..59):&lt;br /&gt;
&lt;br /&gt;
  0x6FFFF, 0xBFFF2, 0xBFFF3, 0xBFFF4, 0xBFFF5, 0xBFFF6,&lt;br /&gt;
  0xBFFF7, 0xBFFF8, 0xBFFF9, 0xBFFFA, 0xBFFFB, 0xBFFFC,&lt;br /&gt;
  0xBFFFD, 0xBFFFE, 0xBFFFF, 0xDF9A0, 0xDF9A1, 0xDF9A2,&lt;br /&gt;
  0xDF9A3, 0xDF9A4, 0xDF9A5, 0xDF9A6, 0xDF9A7, 0xDF9A8,&lt;br /&gt;
  0xDF9A9, 0x37FFE, 0x6FCDE, 0x6FFFA, 0x0BFF7, 0x0B7FF,&lt;br /&gt;
  0x0DF9F, 0x05FF8, 0x0B7FE, 0x05FF9, 0x06FCE, 0x05BFE,&lt;br /&gt;
  0x037FE, 0x02DFE, 0x00DFA, 0x00DFE, 0x017FC, 0x00DBE,&lt;br /&gt;
  0x00B7E, 0x005FE, 0x0037D, 0x002DE, 0x0017E, 0x0016C,&lt;br /&gt;
  0x000DE, 0x000BE, 0x0006C, 0x0005A, 0x0003E, 0x00034,&lt;br /&gt;
  0x0002C, 0x0001F, 0x0000E, 0x0000E, 0x00006, 0x00002,&lt;br /&gt;
  0x00000, 0x00004, 0x0000A, 0x0000C, 0x0001E, 0x0001E,&lt;br /&gt;
  0x0002E, 0x00035, 0x0003F, 0x0005E, 0x0006E, 0x000DA,&lt;br /&gt;
  0x0016D, 0x0016E, 0x001B6, 0x002FE, 0x0036E, 0x0037C,&lt;br /&gt;
  0x005BE, 0x006DE, 0x006FE, 0x00DBF, 0x00DFB, 0x016FE,&lt;br /&gt;
  0x017FD, 0x01BFE, 0x01BF2, 0x02FFE, 0x06FCC, 0x05FFE,&lt;br /&gt;
  0x05FFA, 0x06FFE, 0x0BFF6, 0x0BFFE, 0x0DF9E, 0x00DF8,&lt;br /&gt;
  0x0DFFE, 0x37FFC, 0x6FFFB, 0x5FFF8, 0xDF9AA, 0xDF9AB,&lt;br /&gt;
  0xDF9AC, 0xDF9AD, 0xDF9AE, 0xDF9AF, 0xDF9B0, 0xDF9B1,&lt;br /&gt;
  0xDF9B2, 0xDF9B3, 0x6FFFE, 0xDF9B4, 0xDF9B5, 0xDF9B6,&lt;br /&gt;
  0xDF9B7, 0xDF9B8, 0xDF9B9, 0xDF9BA, 0xDF9BB, 0xDF9BE,&lt;br /&gt;
&lt;br /&gt;
Lengths:&lt;br /&gt;
&lt;br /&gt;
  20, 20, 20, 20, 20, 20,&lt;br /&gt;
  20, 20, 20, 20, 20, 20,&lt;br /&gt;
  20, 20, 20, 21, 21, 21,&lt;br /&gt;
  21, 21, 21, 21, 21, 21,&lt;br /&gt;
  21, 19, 20, 20, 16, 16,&lt;br /&gt;
  17, 15, 16, 15, 16, 15,&lt;br /&gt;
  15, 14, 13, 13, 13, 13,&lt;br /&gt;
  12, 11, 11, 10,  9,  9,&lt;br /&gt;
   9,  8,  8,  7,  7,  7,&lt;br /&gt;
   6,  5,  5,  4,  3,  3,&lt;br /&gt;
   2,  3,  4,  5,  5,  6,&lt;br /&gt;
   6,  7,  7,  7,  8,  9,&lt;br /&gt;
   9,  9, 10, 10, 11, 11,&lt;br /&gt;
  11, 12, 12, 13, 13, 13,&lt;br /&gt;
  13, 14, 14, 14, 16, 15,&lt;br /&gt;
  15, 16, 16, 16, 17, 13,&lt;br /&gt;
  17, 19, 20, 19, 21, 21,&lt;br /&gt;
  21, 21, 21, 21, 21, 21,&lt;br /&gt;
  21, 21, 20, 21, 21, 21,&lt;br /&gt;
  21, 21, 21, 21, 21, 21,&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Voxware_Metasound&amp;diff=15027</id>
		<title>Voxware Metasound</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Voxware_Metasound&amp;diff=15027"/>
		<updated>2014-04-02T10:46:03Z</updated>

		<summary type="html">&lt;p&gt;Ce: Implemented by Kostya&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Format tag: 0x75&lt;br /&gt;
*Sample: http://samples.mplayerhq.hu/A-codecs/VoxWare/&lt;br /&gt;
*ACM codec: http://www.free-codecs.com/download/VoxWare_MetaSound_Audio_CoDec.htm&lt;br /&gt;
&lt;br /&gt;
Audio codec presumably created by [[VoxWare]]. According to [http://www.thefreelibrary.com/Voxware+Expands+Technology+Offerings+to+Include+New+Family+of+Audio...-a018934553], a [[TwinVQ]] variant.&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Vivo_G.723&amp;diff=15026</id>
		<title>Vivo G.723</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Vivo_G.723&amp;diff=15026"/>
		<updated>2014-04-02T10:31:41Z</updated>

		<summary type="html">&lt;p&gt;Ce: Supported for more than one year&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Format: 0x111&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/vivo/&lt;br /&gt;
&lt;br /&gt;
Probably related to the [[Vivo Siren]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Internet_Low_Bit_Rate_Codec&amp;diff=15025</id>
		<title>Internet Low Bit Rate Codec</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Internet_Low_Bit_Rate_Codec&amp;diff=15025"/>
		<updated>2014-04-02T10:25:32Z</updated>

		<summary type="html">&lt;p&gt;Ce: Supported since 2012 via external libilbc library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Company: Global IP Solutions&lt;br /&gt;
* Specification: http://tools.ietf.org/html/rfc3951&lt;br /&gt;
&lt;br /&gt;
[[Category:Vocoders]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=ACT&amp;diff=15024</id>
		<title>ACT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=ACT&amp;diff=15024"/>
		<updated>2014-04-02T10:21:36Z</updated>

		<summary type="html">&lt;p&gt;Ce: Supported since over two years&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Samples: http://samples.mplayerhq.hu/A-codecs/act/&lt;br /&gt;
* Working decoder: http://www.netac.com/Download/C635/C635%20Driver&amp;amp;Tools.zip&lt;br /&gt;
* Unfinished FFmpeg patch: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-February/042714.html&lt;br /&gt;
&lt;br /&gt;
ACT files are created by [http://en.wikipedia.org/wiki/Chinese_MP4/MTV_Player '''Chinese-made portable MP3 players'''] when recording from the internal microphone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ACT files uses the [http://en.wikipedia.org/wiki/G.729a G729A] speech compression codec. There are 3 different ways to record to this format from a player.&lt;br /&gt;
&lt;br /&gt;
*Fine Rec&lt;br /&gt;
*Long Rec&lt;br /&gt;
*Long Vox, in this mode the player will record when voice activated.&lt;br /&gt;
&lt;br /&gt;
==ACT File Format==&lt;br /&gt;
&lt;br /&gt;
=== Bitstream ===&lt;br /&gt;
&lt;br /&gt;
These 3 modes map to 2 bitstream formats, the Fine and Long bitstream formats.&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;
! Name!! Sample rate!! Frame size!! Frames per chunk !! Chunk size !! Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
|Fine||8000||10||51||510||2&lt;br /&gt;
|-&lt;br /&gt;
|Long||4400||22||23||506||6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files are always aligned to 512 bytes boundary and contains 512 byte header and chunks of the same size. Each chunk consists of fixed number of frames and padding bytes.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&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;
! Name !! Offset !! Bytes !! Description&lt;br /&gt;
|-&lt;br /&gt;
|riff tag||0||4||'RIFF'&lt;br /&gt;
|-&lt;br /&gt;
|riff size||4||4||data_size + 36&lt;br /&gt;
|-&lt;br /&gt;
|wave tag||8||4||'WAVE'&lt;br /&gt;
|-&lt;br /&gt;
|fmt tag||12||4||'fmt '&lt;br /&gt;
|-&lt;br /&gt;
|wave header size||16||4||Always 0x10&lt;br /&gt;
|-&lt;br /&gt;
|wave format||20||2||PCM's 0x01&amp;lt;ref name=&amp;quot;pcm&amp;quot;&amp;gt;This collides with the values for regular 16bits PCM&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|channels||22||2||0x01(mono)&lt;br /&gt;
|-&lt;br /&gt;
|sample rate||24||4||8000 or 4400&lt;br /&gt;
|-&lt;br /&gt;
|bit rate||28||4||16000 or ?&lt;br /&gt;
|-&lt;br /&gt;
|block align||32||2||Always 0x02&lt;br /&gt;
|-&lt;br /&gt;
|bits per sample||34||2||Always 16&lt;br /&gt;
|-&lt;br /&gt;
|data_tag||36||4||'data'&lt;br /&gt;
|-&lt;br /&gt;
|data_size||40||4||chunks_count * 8 * chunk_size&amp;lt;ref name=&amp;quot;chunk_size&amp;quot;&amp;gt; chunk_size is determined from the bitstream table.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reserved||44||212||filled by zero&lt;br /&gt;
|-&lt;br /&gt;
|act tag||256||1||Always 0x84&lt;br /&gt;
|-&lt;br /&gt;
|millisec||257||2||milliseconds part of duration value&lt;br /&gt;
|-&lt;br /&gt;
|seconds||259||1||seconds part of duration value&lt;br /&gt;
|-&lt;br /&gt;
|minutes||260||4||minutes part of duration value&lt;br /&gt;
|-&lt;br /&gt;
|reserved||264||248||filled by zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Frame format ===&lt;br /&gt;
&lt;br /&gt;
First half of ACT frame contains odd bytes, while the second contains even bytes of encoded G.729 frame.&lt;br /&gt;
&lt;br /&gt;
 for(i=0 ; i&amp;lt;frame_size/2; i++)&lt;br /&gt;
 {&lt;br /&gt;
     g729_data[2*i+1]=act_data[i]&lt;br /&gt;
     g729_data[2*i]=act_data[frame_size/2+i]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== G.729A Codec parameters ===&lt;br /&gt;
&lt;br /&gt;
Table of transmitted parameters indices. For each parameter, the Most Significant Bit (MSB) is transmitted first.&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;
! Symbol !! Description !! Bits (Fine) !! Bits (Long)&lt;br /&gt;
|-&lt;br /&gt;
| L0 || Switched MA predictor of LSP quantizer || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| L1 || First stage vector of quantizer || 7 || 7&lt;br /&gt;
|-&lt;br /&gt;
| L2 || Second stage lower vector of LSP quantizer || 5 || 5&lt;br /&gt;
|-&lt;br /&gt;
| L3 || Second stage higher vector of LSP quantizer || 5 || 5&lt;br /&gt;
|-&lt;br /&gt;
| P1 || Pitch delay first subframe || 8 || 8&lt;br /&gt;
|-&lt;br /&gt;
| P0 || Parity bit for Pitch delay || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Fixed codebook first subframe || 13 || 17&lt;br /&gt;
|-&lt;br /&gt;
| S1 || Signs of fixed-codebook pulses 1st subframe || 4 || 4&lt;br /&gt;
|-&lt;br /&gt;
| GA1 || Gain codebook (stage 1) 1st subframe || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| GB1 || Gain codebook (stage 1) 1st subframe || 4 || 4&lt;br /&gt;
|-&lt;br /&gt;
| P2 || Pitch delay second subframe || 5 || 5&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Fixed codebook 2nd subframe || 13 || 17&lt;br /&gt;
|-&lt;br /&gt;
| S2 || Signs of fixed-codebook pulses 2nd subframe || 4 || 4&lt;br /&gt;
|-&lt;br /&gt;
| GA2 || Gain codebook (stage 1) 2nd subframe || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| GB2 || Gain codebook (stage 1) 2nd subframe || 4 || 4&lt;br /&gt;
|-&lt;br /&gt;
! !! Total !! 80 !! 88&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In Long mode one ACT frame forms two G.729 frames and thus 40ms of audio data.&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=UB_Video_MPEG-4&amp;diff=15023</id>
		<title>UB Video MPEG-4</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=UB_Video_MPEG-4&amp;diff=15023"/>
		<updated>2014-03-25T14:43:14Z</updated>

		<summary type="html">&lt;p&gt;Ce: UMP4 works since a very long time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: UMP4&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/V-codecs/UMP4/&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Broadway_MPEG&amp;diff=15022</id>
		<title>Broadway MPEG</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Broadway_MPEG&amp;diff=15022"/>
		<updated>2014-03-25T14:39:51Z</updated>

		<summary type="html">&lt;p&gt;Ce: Implemented since over two years&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: BW10&lt;br /&gt;
* Company: [http://www.datx.com/ Data Translation]&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/V-codecs/BW10/&lt;br /&gt;
&lt;br /&gt;
The [http://fourcc.org/ FourCC list] states that BW10 corresponds to a &amp;quot;Codec for Broadway hardware-based MPEG compression system.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=YUV8&amp;diff=15021</id>
		<title>YUV8</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=YUV8&amp;diff=15021"/>
		<updated>2014-03-25T14:30:00Z</updated>

		<summary type="html">&lt;p&gt;Ce: Supported since 2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Samples: http://samples.mplayerhq.hu/V-codecs/yuv8/&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=AVUI&amp;diff=15020</id>
		<title>AVUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=AVUI&amp;diff=15020"/>
		<updated>2014-03-25T14:26:51Z</updated>

		<summary type="html">&lt;p&gt;Ce: AVUI was implemented in 2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: AVUI&lt;br /&gt;
* Samples: http://samples.ffmpeg.org/V-codecs/AVUI/&lt;br /&gt;
* Useful link: http://lists.apple.com/archives/quicktime-api/2012/Mar/msg00039.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP7&amp;diff=15019</id>
		<title>On2 VP7</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP7&amp;diff=15019"/>
		<updated>2014-03-25T12:37:14Z</updated>

		<summary type="html">&lt;p&gt;Ce: VP7 was implemented&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCCs: VP70, VP71, VP72&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: http://www.on2.com/cms-data/pdf/1123531744838491.pdf ([[Mirrored Files|mirrored]])&lt;br /&gt;
* Specification: http://multimedia.cx/mirror/VP7_Data_Format_and_Decoder_Overview.pdf&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/V-codecs/VP7/&lt;br /&gt;
&lt;br /&gt;
There are two known variants of the VP7 codec, VP70 (General Profile), and VP71 (Error Resilient Profile).&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code&amp;diff=15007</id>
		<title>FFmpeg / Libav Summer Of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code&amp;diff=15007"/>
		<updated>2014-02-08T20:48:19Z</updated>

		<summary type="html">&lt;p&gt;Ce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[FFmpeg]] project has been a participant in the [http://code.google.com/soc/ Google Summer of Code] program since 2006. In 2011, the [[Libav]] fork became part of the same Summer of Code effort.&lt;br /&gt;
&lt;br /&gt;
* [[FFmpeg_Summer_of_Code_2014|2014 FFmpeg Project page]]&lt;br /&gt;
* [[FFmpeg_Summer_of_Code_2013|2013 FFmpeg Project page]]&lt;br /&gt;
* [[Libav Summer Of Code 2013|2013 Libav project page]]&lt;br /&gt;
* [[Libav Summer Of Code 2012|2012 Libav project page]]&lt;br /&gt;
* [[FFmpeg_Summer_of_Code_2012|2012 FFmpeg Project page]]&lt;br /&gt;
* [[FFmpeg / Libav Summer Of Code 2011|2011 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2010|2010 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2009|2009 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2008|2008 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2007|2007 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2006|2006 project page]]&lt;br /&gt;
&lt;br /&gt;
Each accepted project is developed in its own sandbox, separate from the main FFmpeg / Libav 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;br /&gt;
&lt;br /&gt;
== 2006 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== VC-1 Decoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor: [[User:Multimedia Mike|Mike Melanson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AMR-NB Decoder ===&lt;br /&gt;
* Student: [[User:superdump|Robert Swain]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;Project not finished during SoC.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Continued in another Summer of Code [[FFmpeg Summer Of Code#Finish AMR-NB decoder and write an encoder|task]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AC-3 Decoder ===&lt;br /&gt;
* Student: [[User:Cloud9|Kartikey Mahendra BHATT]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:Jruggle|Justin Ruggles]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AAC Decoder ===&lt;br /&gt;
* Student: Maxim Gavrilov&lt;br /&gt;
* Mentor: [[User:ods15|Oded Shimon]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:andoma|Andreas Öman]] and [[User:superdump|Robert Swain]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Vorbis Encoder ===&lt;br /&gt;
* Student: Mathew Philip&lt;br /&gt;
* Mentor: [[User:ods15|Oded Shimon]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project barely started&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:ods15|Oded Shimon]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 2007 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== RealVideo 4 Decoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor: [[User:Multimedia Mike|Mike Melanson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt; The project goal morphed to include a RealVideo 3 decoder since the 2 schemes are so similar.&lt;br /&gt;
&lt;br /&gt;
=== QCELP Decoder ===&lt;br /&gt;
* Student: [[User:Reynaldo|Reynaldo Verdejo Pinochet]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg commiter&amp;lt;/font&amp;gt;. &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;Produced a working decoder during SoC but the code didn't reach SVN before the end of the program&amp;lt;/font&amp;gt;.&lt;br /&gt;
* Code Status: Picked up by Kenan Gillet and with the help of [[User:Reynaldo|Reynaldo]] &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;. Some features still missing, though.&lt;br /&gt;
&lt;br /&gt;
=== Matroska Muxer ===&lt;br /&gt;
* Student: David Conrad&lt;br /&gt;
* Mentor: [[User:aurel|Aurélien Jacobs]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video Filter API (AKA [[Libavfilter|libavfilter]]) ===&lt;br /&gt;
* Student: [[User:Koorogi|Bobby Bingham]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]] and Michael Niedermayer&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== E-AC-3 Decoder ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec&lt;br /&gt;
* Mentor:  [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;; &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;code produced worked for most available samples, but there were some unimplemented features.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:Jruggle|Justin Ruggles]], finished and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JPEG 2000 Encoder and Decoder ===&lt;br /&gt;
* Student: Kamil Nowosad&lt;br /&gt;
* Mentor: [[User:pengvado|Loren Merritt]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;The code is working but not all features are supported.&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Dirac Encoder and Decoder ===&lt;br /&gt;
* Student: Marco Gerards&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Decoder committed to FFmpeg,&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt; the encoder still needs more work.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TS Muxer ===&lt;br /&gt;
* Student: Xiaohui Sun&lt;br /&gt;
* Mentor:  [[User:bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt; [[Interesting Patches#PES packetizer by Xiaohui Sun|Changes]] requested during the review process for FFmpeg inclusion were never made.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2008 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== Generic frame-level multithreading support  ===&lt;br /&gt;
* Student: Alexander Strange &lt;br /&gt;
* Mentor: Kristian Jerpetjoen&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nellymoser Encoder ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec &lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  ALAC Encoder ===&lt;br /&gt;
* Student: [[User:Jai|Jai Menon]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LGPL reimplementation of GPL sws_scale parts ===&lt;br /&gt;
* Student: Keiji Costantini&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: The GPL YUV table generator has since been &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;implemented as LGPL by [[User:Kostya|Kostya Shishkov]]&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AAC-LC Encoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya]]&lt;br /&gt;
* Mentor: [[User:Andoma|Andreas Öman]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;merged but terrible&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLP/TrueHD encoder ===&lt;br /&gt;
* Student: [[User:Angustia|Ramiro Polla]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;MLP encoder never finished&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;MLP decoder committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== WMA Pro Decoder ===&lt;br /&gt;
* Student: Sascha Sommer&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MXF Muxer ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;finished project&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2009 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== RTMP Support (Flash streaming) ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor:  [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libswscale cleanup ===&lt;br /&gt;
* Student: [[User:Angustia|Ramiro Polla]]&lt;br /&gt;
* Mentor: [[User:reimar|Reimar Döffinger]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;partially committed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== S/PDIF muxer ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec &lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Playlist/Concatenation Support for FFmpeg ===&lt;br /&gt;
* Student: [[User:Gkovacs|Geza Kovacs]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JPEG2000 decoder and encoder ===&lt;br /&gt;
* Student: [[User:Jai|Jai Menon]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;abandoned project&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement the New Seeking API in Libavformat ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[MPEG-4 Audio Lossless Coding (ALS)|MPEG-4 ALS]] decoder ===&lt;br /&gt;
* Student: Thilo Borgmann&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implementation of AVFilter infrastructure and various audio filters ===&lt;br /&gt;
* Student: Kevin Dubois&lt;br /&gt;
* Mentor:  [[User:Vitor|Vitor Sessak]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finish AMR-NB decoder and write an encoder ===&lt;br /&gt;
* Student: Colin McQuillan&lt;br /&gt;
* Mentor:  [[User:superdump|Robert Swain]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;AMR-NB decoder almost finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;AMR-NB decoder accepted into the FFmpeg codebase&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;AMR-NB encoder not started&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 2010 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== Improve RTSP/RTP layer ===&lt;br /&gt;
* Student: Josh Allmann&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Active contributor&amp;lt;/font&amp;gt;&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]], [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Fully integrated ([[Improve RTSP/RTP layer|checklist]])&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Writing an AMR-WB audio decoder ===&lt;br /&gt;
* Student: Marcelo Povoa&lt;br /&gt;
* Mentor: [[User:superdump|Robert Swain]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;AMR-WB decoder accepted into the FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MMS protocol Implementation ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor: [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;MMSH and MMST protocols accepted into FFmpeg codebase&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;MMSU protocol not started&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== G.723.1 Decoder/Encoder ===&lt;br /&gt;
* Student: Mohamed Naufal&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Libavfilter audio framework and filters ===&lt;br /&gt;
* Student: S.N. Hemanth Meenakshisundaram&lt;br /&gt;
* Mentor: Stefano Sabatini&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#AAAA00&amp;quot;&amp;gt;partially integrated in the FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;final evaluation passed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MOD audio playback support ===&lt;br /&gt;
* Student: Sebastian Vater&lt;br /&gt;
* Mentor: Stefano Sabatini, Vitor Sessak&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#AAAA00&amp;quot;&amp;gt;implemented in external repo, not integrated into FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;final evaluation passed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accurate Seeking API ===&lt;br /&gt;
* Student: Michael Chinen&lt;br /&gt;
* Mentor: [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
&lt;br /&gt;
== 2011 Projects (FFmpeg / Libav) ==&lt;br /&gt;
&lt;br /&gt;
=== BSAC AAC Decoder ===&lt;br /&gt;
* Student: Young Han Lee&lt;br /&gt;
* Mentor: [[User:AConverse|Alex Converse]]&lt;br /&gt;
* Code Status: [http://github.com/yhlee/bsac Started]&lt;br /&gt;
&lt;br /&gt;
=== Playlist Support ===&lt;br /&gt;
* Student: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
&lt;br /&gt;
=== Improve the audio filtering support in libavfilter ===&lt;br /&gt;
* Student: Mina Nagy&lt;br /&gt;
* Mentor: [[User:stefanosa|Stefano Sabatini]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;partially committed&amp;lt;/font&amp;gt;&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;final evaluation passed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DTS Encoder ===&lt;br /&gt;
* Student: Xiang Wang&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;failed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VC-1 decoder missing features implementation ===&lt;br /&gt;
* Student: Mashiat Sarker Shakkhar&lt;br /&gt;
* Mentor: [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Code Status: [https://github.com/shahriman/libav WiP]&lt;br /&gt;
&lt;br /&gt;
=== Complete WMVP/WVP2 decoder ===&lt;br /&gt;
* Student: Alberto Delmás&lt;br /&gt;
* Mentor: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement Windows Television (WTV) muxer ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor: [[User:suxen_drol|Peter Ross]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Accelerated H264 Decoding on Android ===&lt;br /&gt;
* Student: Mohamed Naufal&lt;br /&gt;
* Mentor: [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flash screen video (1)/2 ===&lt;br /&gt;
* Student: [[User:DonDiego|Diego Biurrun]]&lt;br /&gt;
* Mentor: [[User:Jumpyshoes|Daniel Kang]]&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;failed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dirac Video Codec update ===&lt;br /&gt;
* Student: Jordi Ortiz&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Decoder accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2012 Projects (Libav) ==&lt;br /&gt;
&lt;br /&gt;
=== HEVC/H.265 video decoder ===&lt;br /&gt;
* Student: Guillaume Martres&lt;br /&gt;
* Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]&lt;br /&gt;
* Code Status: [https://github.com/smarter/libav/tree/hevc &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;in progress&amp;lt;/font&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Opus decoder ===&lt;br /&gt;
* Student: Andrew D'Addesio&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Code Status: [https://github.com/Fatbag/libav &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;in progress&amp;lt;/font&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
* Student: Jordi Ortiz&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RTMP[E|S|T|TE] protocol implementation ===&lt;br /&gt;
* Student: Samuel Pitoiset&lt;br /&gt;
* Mentor: [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ut Video encoder ===&lt;br /&gt;
* Student: Jan Ekström&lt;br /&gt;
* Mentor: Derek Buitenhuis&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15003</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15003"/>
		<updated>2014-02-08T12:18:27Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* H.264 Multiview Video Coding (MVC) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintainance. It might be moved back later.&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]] and [[FFmpeg Summer Of Code 2010|2010]]), 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/gsoc2014 Google Summer of Code 2014]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
# '''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;
# '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentor(s) 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. If a project description is unclear or you have any questions, do not hesitate to contact its mentor or admin.&lt;br /&gt;
# '''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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
# '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org 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 Admin:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
* '''FFmpeg GSoC Backup Admin:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&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 respective mentor(s) to get more information about the project and the requested qualification task.&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Animated PNG example bouncing beach ball.png|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc Libavfilter extension ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lavfi-gsoc-filter-vintage-illustration.jpg|right|link=]]&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Postproc optimizations ==&lt;br /&gt;
&lt;br /&gt;
[[File:PostProc.jpg|right|link=]]&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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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;
[[File:350px-Bayer_pattern_on_sensor.svg.png|right|link=]]&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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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 Audio Lossless Coding (ALS) encoder ==&lt;br /&gt;
&lt;br /&gt;
[[File:Showwaves_green.png|240px|right|link=]]&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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 API Software/Tracing Implementation ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps and in part since it requires specific operating systems and hardware.&lt;br /&gt;
&lt;br /&gt;
The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and the data they get to allow for easy comparison and thus regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what apitrace https://github.com/apitrace/apitrace does for OpenGL.&lt;br /&gt;
&lt;br /&gt;
A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 Decoder Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder, but its missing several features&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://trac.ffmpeg.org/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, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DCA Encoder improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Add more complete multichannel support, subband adpcm support and optimize the decorrelation transform. A [http://wiki.multimedia.cx/index.php?title=Mirror specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add 3.0 / 3.1 support and fix the channel order for 5.1&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The MXF demuxer needs a proper, compact way to map EssenceContainer ULs to WrappingKind. See [https://trac.ffmpeg.org/ticket/2776 ticket #2776] in our bug tracker, and [https://trac.ffmpeg.org/ticket/2776 ticket #1916] contains additional relevant information.&lt;br /&gt;
&lt;br /&gt;
Essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (such as 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket [https://trac.ffmpeg.org/ticket/2776 ticket #2776] should demux correctly. Add a test case in [http://ffmpeg.org/fate.html FATE]. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind mapping specified in the [http://www.smpte-ra.org/mdd/RP224v10-publication-20081215.xls official RP224 Excel document]. The tables takes up about half a megabyte verbatim which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symmetric-key block ciphers ==&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
FFmpeg contains the libavutil library, which is a utility library to aid portable multimedia programming. It contains, among other things, standard cryptographic algorithms, like AES or Blowfish. The goal of this project is to add support for three other common block ciphers: CAST-128, Twofish and Camellia.&lt;br /&gt;
&lt;br /&gt;
'''Specification:'''&lt;br /&gt;
* http://tools.ietf.org/search/rfc2144&lt;br /&gt;
* https://www.schneier.com/twofish.html&lt;br /&gt;
* http://tools.ietf.org/html/rfc3713&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Implement CAST-128, Twofish and Camellia in C&lt;br /&gt;
* Support for ECB and CBC modes&lt;br /&gt;
* Ensure code works with all key sizes supported by an algorithm&lt;br /&gt;
* Ensure code is conformant to the standard and passes test vectors&lt;br /&gt;
* Ensure code does not attempt any invalid read or write using valgrind&lt;br /&gt;
* Simple C-level optimization to get comparable speed with other crypto libraries&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
C coding skills, basic familiarity with git. Basic understanding of cryptography. Understanding of block ciphers. C-level code optimization.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to cryptography, like proving you can implement a cryptographic hash function or a HMAC function in C. The student can also propose his own qualification task.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Giorgio Vazzana (''Holden'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
== VDPAU filter ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' VDPAU is not only about hardware-accelerated decoding but also allows some postprocessing, most notably deinterlacing. Other features of the API include scaling, noise removal and a sharpening filter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement a filter that allows using the postprocessing features as defined by the VDPAU API. This should particularly include the deinterlacer, ideally all features should be usable to allow comparing the quality and performance of different hardware and hardware vs. software.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, you will need hardware that allows VDPAU post-processing.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Show that you are familiar with the FFmpeg filter system, either by porting one or more of the remaining postprocessing filters from the MPlayer compatibility layer (files ''vf_*pp*.c'' in ''libavfilter/libmpcodecs'', see for comparison commit [http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=a2c547ff a2c547ff]) to a native filter or by implementing a very simple inverse telecine filter under LGPL that allows to reverse the effect of the telecine filter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:ce|Carl Eugen Hoyos]] (''cehoyos'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, Reimar.Doeffinger [at] gmx.de)&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 propose their own project.&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;
[[File:Opus.png|right|link=]]&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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. This task is difficult.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Implement missing parts of interlacing&lt;br /&gt;
* Make more reference samples bit-exact&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Find a bug in the current decoder implementation and fix it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JPEG 2000 ==&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. This task is difficult&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A jpeg 2000 decoder which can decode most lossy samples without artifacts and lossless samples exactly.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Fix an issue (for example from the bug tracker) to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, good knowledge of Jpeg-2000&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;
[[File:Hardware.jpg|right|link=]]&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, basic familiarity with git, 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. add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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;
== H.264 Multiview Video Coding (MVC) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Mmspg-epfl-ch-double-camera.jpg|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' &lt;br /&gt;
MVC is used in 3D Blu-ray disks, but FFmpeg is missing a decoder which supports it. The goal of this project is to add support for MVC and 3D-Blu rays.&lt;br /&gt;
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]. There also exists a [http://article.gmane.org/gmane.comp.video.ffmpeg.devel/174155 patch] and a [https://github.com/kodabb/libav/commits/MVC_orig_clean git branch] which are in rather bad shape but could be used as basis for this project.&lt;br /&gt;
This task is difficult because it involves several design decisions that affect third party projects (video players).&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, basic familiarity with git. Understanding of H.264&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:'''&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Your Own Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15002</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15002"/>
		<updated>2014-02-08T11:52:43Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* VDPAU filter */ prerequisites&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintainance. It might be moved back later.&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]] and [[FFmpeg Summer Of Code 2010|2010]]), 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/gsoc2014 Google Summer of Code 2014]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
# '''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;
# '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentor(s) 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. If a project description is unclear or you have any questions, do not hesitate to contact its mentor or admin.&lt;br /&gt;
# '''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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
# '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org 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 Admin:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
* '''FFmpeg GSoC Backup Admin:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&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 respective mentor(s) to get more information about the project and the requested qualification task.&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Animated PNG example bouncing beach ball.png|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc Libavfilter extension ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lavfi-gsoc-filter-vintage-illustration.jpg|right|link=]]&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Postproc optimizations ==&lt;br /&gt;
&lt;br /&gt;
[[File:PostProc.jpg|right|link=]]&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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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;
[[File:350px-Bayer_pattern_on_sensor.svg.png|right|link=]]&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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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 Audio Lossless Coding (ALS) encoder ==&lt;br /&gt;
&lt;br /&gt;
[[File:Showwaves_green.png|240px|right|link=]]&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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 API Software/Tracing Implementation ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps and in part since it requires specific operating systems and hardware.&lt;br /&gt;
&lt;br /&gt;
The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and the data they get to allow for easy comparison and thus regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what apitrace https://github.com/apitrace/apitrace does for OpenGL.&lt;br /&gt;
&lt;br /&gt;
A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 Decoder Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder, but its missing several features&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://trac.ffmpeg.org/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, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DCA Encoder improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Add more complete multichannel support, subband adpcm support and optimize the decorrelation transform. A [http://wiki.multimedia.cx/index.php?title=Mirror specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add 3.0 / 3.1 support and fix the channel order for 5.1&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The MXF demuxer needs a proper, compact way to map EssenceContainer ULs to WrappingKind. See [https://trac.ffmpeg.org/ticket/2776 ticket #2776] in our bug tracker, and [https://trac.ffmpeg.org/ticket/2776 ticket #1916] contains additional relevant information.&lt;br /&gt;
&lt;br /&gt;
Essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (such as 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket [https://trac.ffmpeg.org/ticket/2776 ticket #2776] should demux correctly. Add a test case in [http://ffmpeg.org/fate.html FATE]. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind mapping specified in the [http://www.smpte-ra.org/mdd/RP224v10-publication-20081215.xls official RP224 Excel document]. The tables takes up about half a megabyte verbatim which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symmetric-key block ciphers ==&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
FFmpeg contains the libavutil library, which is a utility library to aid portable multimedia programming. It contains, among other things, standard cryptographic algorithms, like AES or Blowfish. The goal of this project is to add support for three other common block ciphers: CAST-128, Twofish and Camellia.&lt;br /&gt;
&lt;br /&gt;
'''Specification:'''&lt;br /&gt;
* http://tools.ietf.org/search/rfc2144&lt;br /&gt;
* https://www.schneier.com/twofish.html&lt;br /&gt;
* http://tools.ietf.org/html/rfc3713&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Implement CAST-128, Twofish and Camellia in C&lt;br /&gt;
* Support for ECB and CBC modes&lt;br /&gt;
* Ensure code works with all key sizes supported by an algorithm&lt;br /&gt;
* Ensure code is conformant to the standard and passes test vectors&lt;br /&gt;
* Ensure code does not attempt any invalid read or write using valgrind&lt;br /&gt;
* Simple C-level optimization to get comparable speed with other crypto libraries&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
C coding skills, basic familiarity with git. Basic understanding of cryptography. Understanding of block ciphers. C-level code optimization.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to cryptography, like proving you can implement a cryptographic hash function or a HMAC function in C. The student can also propose his own qualification task.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Giorgio Vazzana (''Holden'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
== VDPAU filter ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' VDPAU is not only about hardware-accelerated decoding but also allows some postprocessing, most notably deinterlacing. Other features of the API include scaling, noise removal and a sharpening filter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement a filter that allows using the postprocessing features as defined by the VDPAU API. This should particularly include the deinterlacer, ideally all features should be usable to allow comparing the quality and performance of different hardware and hardware vs. software.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, you will need hardware that allows VDPAU post-processing.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Show that you are familiar with the FFmpeg filter system, either by porting one or more of the remaining postprocessing filters from the MPlayer compatibility layer (files ''vf_*pp*.c'' in ''libavfilter/libmpcodecs'', see for comparison commit [http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=a2c547ff a2c547ff]) to a native filter or by implementing a very simple inverse telecine filter under LGPL that allows to reverse the effect of the telecine filter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:ce|Carl Eugen Hoyos]] (''cehoyos'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, Reimar.Doeffinger [at] gmx.de)&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 propose their own project.&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;
[[File:Opus.png|right|link=]]&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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. This task is difficult.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Implement missing parts of interlacing&lt;br /&gt;
* Make more reference samples bit-exact&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Find a bug in the current decoder implementation and fix it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JPEG 2000 ==&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. This task is difficult&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A jpeg 2000 decoder which can decode most lossy samples without artifacts and lossless samples exactly.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Fix an issue (for example from the bug tracker) to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, good knowledge of Jpeg-2000&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;
[[File:Hardware.jpg|right|link=]]&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, basic familiarity with git, 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. add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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;
== H.264 Multiview Video Coding (MVC) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Mmspg-epfl-ch-double-camera.jpg|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' &lt;br /&gt;
MVC is used in 3D Blu-ray disks, but FFmpeg is missing a decoder which supports it. The goal of this project is to add support for MVC and 3D-Blu rays.&lt;br /&gt;
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]. There also exists a [http://article.gmane.org/gmane.comp.video.ffmpeg.devel/174155 patch] and a [https://github.com/kodabb/libav/commits/MVC_orig_clean git branch] which are in rather bad shape but could be used as basis for this project.&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, basic familiarity with git. Understanding of H.264&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:'''&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Your Own Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15001</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=15001"/>
		<updated>2014-02-08T11:50:11Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Mentored Projects */ VDPAU filter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintainance. It might be moved back later.&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]] and [[FFmpeg Summer Of Code 2010|2010]]), 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/gsoc2014 Google Summer of Code 2014]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
# '''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;
# '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentor(s) 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. If a project description is unclear or you have any questions, do not hesitate to contact its mentor or admin.&lt;br /&gt;
# '''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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
# '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org 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 Admin:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
* '''FFmpeg GSoC Backup Admin:''' [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&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 respective mentor(s) to get more information about the project and the requested qualification task.&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Animated PNG example bouncing beach ball.png|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc Libavfilter extension ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lavfi-gsoc-filter-vintage-illustration.jpg|right|link=]]&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Postproc optimizations ==&lt;br /&gt;
&lt;br /&gt;
[[File:PostProc.jpg|right|link=]]&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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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;
[[File:350px-Bayer_pattern_on_sensor.svg.png|right|link=]]&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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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 Audio Lossless Coding (ALS) encoder ==&lt;br /&gt;
&lt;br /&gt;
[[File:Showwaves_green.png|240px|right|link=]]&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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 API Software/Tracing Implementation ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps and in part since it requires specific operating systems and hardware.&lt;br /&gt;
&lt;br /&gt;
The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and the data they get to allow for easy comparison and thus regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what apitrace https://github.com/apitrace/apitrace does for OpenGL.&lt;br /&gt;
&lt;br /&gt;
A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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 Decoder Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder, but its missing several features&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://trac.ffmpeg.org/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, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DCA Encoder improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Add more complete multichannel support, subband adpcm support and optimize the decorrelation transform. A [http://wiki.multimedia.cx/index.php?title=Mirror specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add 3.0 / 3.1 support and fix the channel order for 5.1&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The MXF demuxer needs a proper, compact way to map EssenceContainer ULs to WrappingKind. See [https://trac.ffmpeg.org/ticket/2776 ticket #2776] in our bug tracker, and [https://trac.ffmpeg.org/ticket/2776 ticket #1916] contains additional relevant information.&lt;br /&gt;
&lt;br /&gt;
Essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (such as 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket [https://trac.ffmpeg.org/ticket/2776 ticket #2776] should demux correctly. Add a test case in [http://ffmpeg.org/fate.html FATE]. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind mapping specified in the [http://www.smpte-ra.org/mdd/RP224v10-publication-20081215.xls official RP224 Excel document]. The tables takes up about half a megabyte verbatim which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symmetric-key block ciphers ==&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
FFmpeg contains the libavutil library, which is a utility library to aid portable multimedia programming. It contains, among other things, standard cryptographic algorithms, like AES or Blowfish. The goal of this project is to add support for three other common block ciphers: CAST-128, Twofish and Camellia.&lt;br /&gt;
&lt;br /&gt;
'''Specification:'''&lt;br /&gt;
* http://tools.ietf.org/search/rfc2144&lt;br /&gt;
* https://www.schneier.com/twofish.html&lt;br /&gt;
* http://tools.ietf.org/html/rfc3713&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Implement CAST-128, Twofish and Camellia in C&lt;br /&gt;
* Support for ECB and CBC modes&lt;br /&gt;
* Ensure code works with all key sizes supported by an algorithm&lt;br /&gt;
* Ensure code is conformant to the standard and passes test vectors&lt;br /&gt;
* Ensure code does not attempt any invalid read or write using valgrind&lt;br /&gt;
* Simple C-level optimization to get comparable speed with other crypto libraries&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
C coding skills, basic familiarity with git. Basic understanding of cryptography. Understanding of block ciphers. C-level code optimization.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to cryptography, like proving you can implement a cryptographic hash function or a HMAC function in C. The student can also propose his own qualification task.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Giorgio Vazzana (''Holden'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
== VDPAU filter ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' VDPAU is not only about hardware-accelerated decoding but also allows some postprocessing, most notably deinterlacing. Other features of the API include scaling, noise removal and a sharpening filter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement a filter that allows using the postprocessing features as defined by the VDPAU API. This should particularly include the deinterlacer, ideally all features should be usable to allow comparing the quality and performance of different hardware and hardware vs. software.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Show that you are familiar with the FFmpeg filter system, either by porting one or more of the remaining postprocessing filters from the MPlayer compatibility layer (files ''vf_*pp*.c'' in ''libavfilter/libmpcodecs'', see for comparison commit [http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=a2c547ff a2c547ff]) to a native filter or by implementing a very simple inverse telecine filter under LGPL that allows to reverse the effect of the telecine filter.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:ce|Carl Eugen Hoyos]] (''cehoyos'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, Reimar.Doeffinger [at] gmx.de)&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 propose their own project.&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;
[[File:Opus.png|right|link=]]&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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. This task is difficult.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Implement missing parts of interlacing&lt;br /&gt;
* Make more reference samples bit-exact&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Find a bug in the current decoder implementation and fix it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JPEG 2000 ==&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. This task is difficult&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A jpeg 2000 decoder which can decode most lossy samples without artifacts and lossless samples exactly.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Fix an issue (for example from the bug tracker) to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, good knowledge of Jpeg-2000&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;
[[File:Hardware.jpg|right|link=]]&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, basic familiarity with git, 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. add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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;
== H.264 Multiview Video Coding (MVC) ==&lt;br /&gt;
&lt;br /&gt;
[[File:Mmspg-epfl-ch-double-camera.jpg|right|link=]]&lt;br /&gt;
&lt;br /&gt;
'''Description:''' &lt;br /&gt;
MVC is used in 3D Blu-ray disks, but FFmpeg is missing a decoder which supports it. The goal of this project is to add support for MVC and 3D-Blu rays.&lt;br /&gt;
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]. There also exists a [http://article.gmane.org/gmane.comp.video.ffmpeg.devel/174155 patch] and a [https://github.com/kodabb/libav/commits/MVC_orig_clean git branch] which are in rather bad shape but could be used as basis for this project.&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, basic familiarity with git. Understanding of H.264&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:'''&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Your Own Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=User:Ce&amp;diff=15000</id>
		<title>User:Ce</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=User:Ce&amp;diff=15000"/>
		<updated>2014-02-08T11:41:39Z</updated>

		<summary type="html">&lt;p&gt;Ce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Carl Eugen Hoyos works on [[MPlayer]] and [[FFmpeg]].&lt;br /&gt;
&lt;br /&gt;
His email address is ce AT hoyos.ws&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14983</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14983"/>
		<updated>2014-02-07T09:14:20Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* screen capture codec */ Does not look like a task&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implement Phantom Cine demuxer and Bayer format support for swscale ===&lt;br /&gt;
The format is described here:&lt;br /&gt;
http://wiki.multimedia.cx/index.php?title=Phantom_Cine&lt;br /&gt;
It will need support for Bayer -&amp;gt; RGB conversion in swscale to make the demuxer useful though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14982</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14982"/>
		<updated>2014-02-07T09:13:37Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Extend GIF Encoder to support Animated GIFs */ Either implemented or incomplete&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implement Phantom Cine demuxer and Bayer format support for swscale ===&lt;br /&gt;
The format is described here:&lt;br /&gt;
http://wiki.multimedia.cx/index.php?title=Phantom_Cine&lt;br /&gt;
It will need support for Bayer -&amp;gt; RGB conversion in swscale to make the demuxer useful though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
==== screen capture codec ====&lt;br /&gt;
screen capture codecs are usually very simple and based on zlib.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14981</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14981"/>
		<updated>2014-02-07T09:12:34Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* HNM4 Playback System */ Implemented by David Kment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implement Phantom Cine demuxer and Bayer format support for swscale ===&lt;br /&gt;
The format is described here:&lt;br /&gt;
http://wiki.multimedia.cx/index.php?title=Phantom_Cine&lt;br /&gt;
It will need support for Bayer -&amp;gt; RGB conversion in swscale to make the demuxer useful though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
=== Extend GIF Encoder to support Animated GIFs ===&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
==== screen capture codec ====&lt;br /&gt;
screen capture codecs are usually very simple and based on zlib.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14980</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14980"/>
		<updated>2014-02-07T09:11:10Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* 16-bit VQA Video Decoder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308&lt;br /&gt;
&lt;br /&gt;
=== HNM4 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[HNM4]] variant of the [[HNM]] format. This will entail writing a new file demuxer and video decoder, both of which are considered fairly easy by FFmpeg standards. [[HNM4|The HNM4 page]] contains the specs necessary to complete this task and links to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implement Phantom Cine demuxer and Bayer format support for swscale ===&lt;br /&gt;
The format is described here:&lt;br /&gt;
http://wiki.multimedia.cx/index.php?title=Phantom_Cine&lt;br /&gt;
It will need support for Bayer -&amp;gt; RGB conversion in swscale to make the demuxer useful though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
=== Extend GIF Encoder to support Animated GIFs ===&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
==== screen capture codec ====&lt;br /&gt;
screen capture codecs are usually very simple and based on zlib.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14978</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14978"/>
		<updated>2014-02-06T19:53:15Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintaince. It might be moved back later.&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]] and [[FFmpeg Summer Of Code 2010|2010]]), 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/gsoc2014 Google Summer of Code 2014]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
# '''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;
# '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentor(s) 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. If a project description is unclear or you have any questions, do not hesitate to contact its mentor or admin.&lt;br /&gt;
# '''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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
# '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org 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:''' TBA&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 respective 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:''' &lt;br /&gt;
MVC is used in 3D Blu-ray disks, but FFmpeg is missing a decoder which supports it. The goal of this project is to add support for MVC and 3D-Blu rays.&lt;br /&gt;
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]. There also exists a [http://article.gmane.org/gmane.comp.video.ffmpeg.devel/174155 patch] and a [https://github.com/kodabb/libav/commits/MVC_orig_clean git branch] which are in rather bad shape but could be used as basis for this project.&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, basic familiarity with git. Understanding of H.264&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:''' TBA, possibly [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly Kieran Kunhya (''kierank'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&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;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 API Software/Tracing Implementation ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps and in part since it requires specific operating systems and hardware.&lt;br /&gt;
&lt;br /&gt;
The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and the data they get to allow for easy comparison and thus regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what apitrace https://github.com/apitrace/apitrace does for OpenGL.&lt;br /&gt;
&lt;br /&gt;
A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)&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, basic familiarity with git, 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. add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' &lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 Decoder Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder, but its missing several features&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://trac.ffmpeg.org/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, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DCA Encoder improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Add more complete multichannel support, subband adpcm support and optimize the decorrelation transform. A [http://wiki.multimedia.cx/index.php?title=Mirror specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add 3.0 / 3.1 support and fix the channel order for 5.1&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg's MXF demuxer needs a proper, compact way to map EssenceContainer? ULs to WrappingKind?. See ticket #2776. I wrote stuff in ticket #1916 which is also relevant.&lt;br /&gt;
&lt;br /&gt;
The gist of this is that essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (like 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket #2776 demuxes fine and there's a test case in FATE for it. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind? mapping specified in the official RP224 Excel document. The tables takes up about half a megabyte verbatim, which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symmetric-key block ciphers ==&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
FFmpeg contains the libavutil library, which is a utility library to aid portable multimedia programming. It contains, among other things, standard cryptographic algorithms, like AES or Blowfish. The goal of this project is to add support for three other common block ciphers: CAST-128, Twofish and Camellia.&lt;br /&gt;
&lt;br /&gt;
'''Specification:'''&lt;br /&gt;
* http://tools.ietf.org/search/rfc2144&lt;br /&gt;
* https://www.schneier.com/twofish.html&lt;br /&gt;
* http://tools.ietf.org/html/rfc3713&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Implement CAST-128, Twofish and Camellia in C&lt;br /&gt;
* Support for ECB and CBC modes&lt;br /&gt;
* Ensure code works with all key sizes supported by an algorithm&lt;br /&gt;
* Ensure code is conformant to the standard and passes test vectors&lt;br /&gt;
* Ensure code does not attempt any invalid read or write using valgrind&lt;br /&gt;
* Simple C-level optimization to get comparable speed with other crypto libraries&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
C coding skills, basic familiarity with git. Basic understanding of cryptography. Understanding of block ciphers. C-level code optimization.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to cryptography, like proving you can implement a cryptographic hash function or a HMAC function in C. The student can also propose his own qualification task.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Giorgio Vazzana (''Holden'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:'''&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
== Your Own Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14977</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14977"/>
		<updated>2014-02-06T19:51:56Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* DCA Encoder improvments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintaince. It might be moved back later.&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/gsoc2014 Google Summer of Code 2014]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.&lt;br /&gt;
&lt;br /&gt;
== Information for Students ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
# '''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;
# '''Find a project.''' Listed on this page are mentored and unmentored projects. Mentored projects are well-defined and mentor(s) 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. If a project description is unclear or you have any questions, do not hesitate to contact its mentor or admin.&lt;br /&gt;
# '''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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
# '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org 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:''' TBA&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 respective 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:''' &lt;br /&gt;
MVC is used in 3D Blu-ray disks, but FFmpeg is missing a decoder which supports it. The goal of this project is to add support for MVC and 3D-Blu rays.&lt;br /&gt;
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]. There also exists a [http://article.gmane.org/gmane.comp.video.ffmpeg.devel/174155 patch] and a [https://github.com/kodabb/libav/commits/MVC_orig_clean git branch] which are in rather bad shape but could be used as basis for this project.&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, basic familiarity with git. Understanding of H.264&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:''' TBA, possibly [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly Kieran Kunhya (''kierank'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&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;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 API Software/Tracing Implementation ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps and in part since it requires specific operating systems and hardware.&lt;br /&gt;
&lt;br /&gt;
The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and the data they get to allow for easy comparison and thus regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what apitrace https://github.com/apitrace/apitrace does for OpenGL.&lt;br /&gt;
&lt;br /&gt;
A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Reimar Döffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)&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, basic familiarity with git, 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. add JPEG decoding support with VA-API, etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' &lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 Decoder Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder, but its missing several features&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket [https://trac.ffmpeg.org/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, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DCA Encoder improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Add more complete multichannel support, subband adpcm support and optimize the decorrelation transform. A [http://wiki.multimedia.cx/index.php?title=Mirror specification] is available.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Add 3.0 / 3.1 support and fix the channel order for 5.1&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg's MXF demuxer needs a proper, compact way to map EssenceContainer? ULs to WrappingKind?. See ticket #2776. I wrote stuff in ticket #1916 which is also relevant.&lt;br /&gt;
&lt;br /&gt;
The gist of this is that essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (like 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket #2776 demuxes fine and there's a test case in FATE for it. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind? mapping specified in the official RP224 Excel document. The tables takes up about half a megabyte verbatim, which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symmetric-key block ciphers ==&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
FFmpeg contains the libavutil library, which is a utility library to aid portable multimedia programming. It contains, among other things, standard cryptographic algorithms, like AES or Blowfish. The goal of this project is to add support for three other common block ciphers: CAST-128, Twofish and Camellia.&lt;br /&gt;
&lt;br /&gt;
'''Specification:'''&lt;br /&gt;
* http://tools.ietf.org/search/rfc2144&lt;br /&gt;
* https://www.schneier.com/twofish.html&lt;br /&gt;
* http://tools.ietf.org/html/rfc3713&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
* Implement CAST-128, Twofish and Camellia in C&lt;br /&gt;
* Support for ECB and CBC modes&lt;br /&gt;
* Ensure code works with all key sizes supported by an algorithm&lt;br /&gt;
* Ensure code is conformant to the standard and passes test vectors&lt;br /&gt;
* Ensure code does not attempt any invalid read or write using valgrind&lt;br /&gt;
* Simple C-level optimization to get comparable speed with other crypto libraries&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:'''&lt;br /&gt;
C coding skills, basic familiarity with git. Basic understanding of cryptography. Understanding of block ciphers. C-level code optimization.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Anything related to cryptography, like proving you can implement a cryptographic hash function or a HMAC function in C. The student can also propose his own qualification task.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Giorgio Vazzana (''Holden'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:'''&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&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;
== Your Own Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14948</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14948"/>
		<updated>2014-02-05T17:00:55Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* AAC Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintaince. It might be moved back later.&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/gsoc2014 Google Summer of Code 2014]. See the GSoC Timeline for important dates.&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 mentor(s) 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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
&lt;br /&gt;
3. '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. Browse the [https://trac.ffmpeg.org 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:''' TBA&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 respective 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, basic familiarity with git.&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:''' TBA, possibly [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly Kieran Kunhya (''kierank'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&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;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode 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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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, basic familiarity with git.&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:''' TBA, possibly [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 hwaccel 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, basic familiarity with git, 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:''' TBA, possibly [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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, basic familiarity with git, 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:''' TBA, possibly [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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 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;
&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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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://trac.ffmpeg.org/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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Benjamin Larsson (''merbanan'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg's MXF demuxer needs a proper, compact way to map EssenceContainer? ULs to WrappingKind?. See ticket #2776. I wrote stuff in ticket #1916 which is also relevant.&lt;br /&gt;
&lt;br /&gt;
The gist of this is that essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (like 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket #2776 demuxes fine and there's a test case in FATE for it. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind? mapping specified in the official RP224 Excel document. The tables takes up about half a megabyte verbatim, which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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;
== 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 Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14947</id>
		<title>FFmpeg Summer of Code 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2014&amp;diff=14947"/>
		<updated>2014-02-05T17:00:29Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* AAC Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is on wiki.multimedia.cx due to trac.ffmpeg.org being down for maintaince. It might be moved back later.&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/gsoc2014 Google Summer of Code 2014]. See the GSoC Timeline for important dates.&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 mentor(s) 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 respective mentor(s) so that the task can be claimed.&lt;br /&gt;
&lt;br /&gt;
3. '''Apply.''' Student proposal period begins 10 March 19:00 UTC and ends 21 March 19:00 UTC. See the See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/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 successfully finish a project.&lt;br /&gt;
&lt;br /&gt;
The qualification task is usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. Browse the [https://trac.ffmpeg.org 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:''' TBA&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 respective 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, basic familiarity with git.&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:''' TBA, possibly [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly Kieran Kunhya (''kierank'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== Animated Portable Network Graphics (APNG) ==&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;
'''Description:''' FFmpeg currently does not support Animated PNGs, the goal of this project is to change that and add support. The little bouncing ball animation shown to the right is such a APNG file.&lt;br /&gt;
&lt;br /&gt;
'''Specification:''' https://wiki.mozilla.org/APNG_Specification&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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement format autodetection for imagepipe and image demuxer.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Pbm|Paul B Mahol]] (''durandal_1707'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA, possibly [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== FFv1 P frame support ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' TBA&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 [https://trac.ffmpeg.org/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, basic familiarity with git. 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:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup mentor:''' [[User:Ubitux|Clément Bœsch]] (''ubitux'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode 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). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. 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, basic familiarity with git.&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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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, basic familiarity with git.&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:''' TBA, possibly [[User:Suxen_drol|Peter Ross]] (''pross-au'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' [[User:Michael|Michael Niedermayer]] (''michaelni'' in #ffmpeg-devel on Freenode 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;
'''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, basic familiarity with git. 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'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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 hwaccel 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, basic familiarity with git, 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:''' TBA, possibly [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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, basic familiarity with git, 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:''' TBA, possibly [[User:Gwenole_Beauchesne|Gwenole Beauchesne]] (''__gb__'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly 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 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, basic familiarity with git, knowledge about transform based audio coding would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode 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://trac.ffmpeg.org/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, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Benjamin Larsson (''merbanan'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA, possibly [[User:Stefanosa|Stefano Sabatini]] (''saste'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
== MXF Demuxer Improvements ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg's MXF demuxer needs a proper, compact way to map EssenceContainer? ULs to WrappingKind?. See ticket #2776. I wrote stuff in ticket #1916 which is also relevant.&lt;br /&gt;
&lt;br /&gt;
The gist of this is that essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (like 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but has worked due to a lack of samples demonstrating the contrary.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The sample in ticket #2776 demuxes fine and there's a test case in FATE for it. The solution should grow libavformat by no more than 32 KiB.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, basic familiarity with git.&lt;br /&gt;
&lt;br /&gt;
'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -&amp;gt; WrappingKind? mapping specified in the official RP224 Excel document. The tables takes up about half a megabyte verbatim, which is unacceptable in a library as large as libavformat.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' TBA, possibly Tomas Härdin (''thardin'' in #ffmpeg-devel on Freenode IRC)&lt;br /&gt;
&lt;br /&gt;
'''Backup Mentor:''' TBA&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;
== 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 Project 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://trac.ffmpeg.org/ 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 for more information.&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FourCC&amp;diff=14645</id>
		<title>FourCC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FourCC&amp;diff=14645"/>
		<updated>2014-01-09T10:01:33Z</updated>

		<summary type="html">&lt;p&gt;Ce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Four Character Codes''', abbreviated as '''FourCC''' are 4 byte (32 bit) character sequences used as format identifiers in Microsoft's [[AVI]] (a.k.a. [[RIFF]]) container format. But it is also employed for the Video identifiers of other formats (because they also use 4 bytes) like Apple's QuickTime [[MOV]] container format. For MultimediaWiki's list of known video FourCCs see [[:Category:Video FourCCs|here]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note!''' The audio counterpart to FourCC is called [[TwoCC]].&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20100922105522/http://www.microsoft.com/whdc/archive/fourcc.mspx Historic list of registered FourCC's at microsoft.com]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/aa367377.aspx Microsoft list of registered FOURCC codes and WAVE formats, December 2010]&lt;br /&gt;
* [http://fourcc.org FOURCC.org, a site dedicated to video codec and pixel format information]&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimedia Terminology]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Apple_Intermediate_Codec&amp;diff=14578</id>
		<title>Apple Intermediate Codec</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Apple_Intermediate_Codec&amp;diff=14578"/>
		<updated>2013-05-17T13:07:43Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Band coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: icod&lt;br /&gt;
* Company: [[Apple]]&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/V-codecs/icod/&lt;br /&gt;
* Decoder: http://www.apple.com/support/downloads/appleintermediatecodec101.html&lt;br /&gt;
* Description: http://support.apple.com/kb/HT2704&lt;br /&gt;
&lt;br /&gt;
Lossy codec used in Final Cut Express HD and iLife ’05&lt;br /&gt;
&lt;br /&gt;
Apple Lists its Features as:&lt;br /&gt;
* Intra Only&lt;br /&gt;
* 4:2:0 color&lt;br /&gt;
* 8-bits per sample&lt;br /&gt;
&lt;br /&gt;
== More technical details ==&lt;br /&gt;
&lt;br /&gt;
Each frame starts with 24-byte header:&lt;br /&gt;
&lt;br /&gt;
  6- 7  frame width&lt;br /&gt;
  8- 9  frame height&lt;br /&gt;
 10-11  frame width (or maybe tile width)&lt;br /&gt;
 12-13  frame height(or maybe tile height)&lt;br /&gt;
&lt;br /&gt;
 16     high nibble is ?, low nibble is ?&lt;br /&gt;
 18     high nibble is ?, low nibble is ?&lt;br /&gt;
 19     high 2 bits are ?, next 2 bits are ?, low 3 bits are ?&lt;br /&gt;
&lt;br /&gt;
It is followed by some tables consisting of 16-bit little-endian entries (Huffman weights?).&lt;br /&gt;
&lt;br /&gt;
There are 4 versions of coded data which differ by coded colourspaces (the same YUV420 but 8/16 bits per component and linear/non-linear?).&lt;br /&gt;
&lt;br /&gt;
Each tile has data coded as 4 bands (probably in YYUV order) and DCT is employed.&lt;br /&gt;
Bits are coded MSB in big-endian words.&lt;br /&gt;
&lt;br /&gt;
==== Band coding ====&lt;br /&gt;
&lt;br /&gt;
Each band is an array of 16-bit entries.&lt;br /&gt;
&lt;br /&gt;
Used codes:&lt;br /&gt;
* unary code -  &amp;lt;code&amp;gt;00...01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rice code - unary prefix and &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bits of residue.&lt;br /&gt;
* code2 - signed codes with unary prefix: &amp;lt;code&amp;gt;k = get_unary(); value = get_bits(k*2) - (1 &amp;lt;&amp;lt; N); &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First 5 bits re used to select coding method:&lt;br /&gt;
&lt;br /&gt;
  A = 1 bit&lt;br /&gt;
  B = 1 bit (looks like when it's zero, Rice code is used for reading pixel, when it's set - code2 is used)&lt;br /&gt;
  C = 3 bits (number of bits in code residue)&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;code&amp;gt;A = 0, B = 0&amp;lt;/code&amp;gt; then it's simple Rice codes with parameter &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;&lt;br /&gt;
if &amp;lt;code&amp;gt;A = 0, B = 1&amp;lt;/code&amp;gt; then it's simple code2 with parameter &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;&lt;br /&gt;
otherwise, read two additional variables&lt;br /&gt;
&lt;br /&gt;
  D = 1 bit (if zero, use simple skip/pixel scheme, if set - use something more complicated)&lt;br /&gt;
  E = 3 bits (number of bits in skip residue)&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;code&amp;gt;A = 1, B = 0, D = 0&amp;lt;/code&amp;gt; then zero all line before decoding and then apply this simple scheme:&lt;br /&gt;
&lt;br /&gt;
  x = 0;&lt;br /&gt;
  do{&lt;br /&gt;
    t = get_rice(E);&lt;br /&gt;
    x += t;&lt;br /&gt;
    if (x &amp;lt; width)&lt;br /&gt;
      pixels[x++] = get_rice(C);&lt;br /&gt;
  }while(x &amp;lt; width);&lt;br /&gt;
&lt;br /&gt;
if &amp;lt;code&amp;gt;A = 1, B = 1, D = 0&amp;lt;/code&amp;gt; then scheme is almost the same, but with &amp;lt;code&amp;gt;pixels[x] = get_code2(C);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=DFA&amp;diff=14563</id>
		<title>DFA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=DFA&amp;diff=14563"/>
		<updated>2013-04-08T09:47:25Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* TDLT chunk */ Uploaded to game-formats/chronomaster-dfa/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: dfa&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/chronomaster-dfa/ http://samples.mplayerhq.hu/game-formats/chronomaster-dfa/]&lt;br /&gt;
&lt;br /&gt;
DFA is a FMV format used in PC games developed by DreamForge.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are little endian. These files are comprised of chunks with the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-3    chunk fourcc&lt;br /&gt;
  bytes 4-7    chunk size, not including 12-byte preamble&lt;br /&gt;
  bytes 8-11   chunk type, essentially numeric equivalent of fourcc&lt;br /&gt;
  bytes 12..   chunk payload&lt;br /&gt;
&lt;br /&gt;
A DFA file begins with a 128- (0x80-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-3    file signature: 'DFIA'&lt;br /&gt;
  byte  4      version (= 0)&lt;br /&gt;
  byte  5      ? (output)&lt;br /&gt;
  bytes 6-7    number of frames&lt;br /&gt;
  bytes 8-9    frame width&lt;br /&gt;
  bytes 10-11  frame height&lt;br /&gt;
  bytes 12-15  frame rate&lt;br /&gt;
  bytes 16-19  first frame offset (= 0x80)&lt;br /&gt;
  bytes 20-23  ? (odirectory)&lt;br /&gt;
  bytes 24-127 unused&lt;br /&gt;
&lt;br /&gt;
Chunk types include:&lt;br /&gt;
&lt;br /&gt;
  EOFR (type 0)    end of frame, empty chunk&lt;br /&gt;
  PAL1 (type 1)    768-byte chunk containing a 6-bit VGA palette components&lt;br /&gt;
  COPY (type 2)    raw frame data&lt;br /&gt;
  TSW1 (type 3)    video frame, intra LZ-coded&lt;br /&gt;
  BDLT (type 4)    video frame, inter RLE-coded bytes&lt;br /&gt;
  WDLT (type 5)    video frame, inter RLE-coded words&lt;br /&gt;
  TDLT (type 6)    video frame, inter chains&lt;br /&gt;
  DSW1 (type 7)    video frame, inter LZ-coded&lt;br /&gt;
  BLCK (type 8)    solid frame, fill whole frame with the first byte of payload&lt;br /&gt;
  DDS1 (type 9)    video frame, inter LZ-coded, double-scaled&lt;br /&gt;
&lt;br /&gt;
=== TSW1 chunk ===&lt;br /&gt;
&lt;br /&gt;
First four bytes store number of stripes to change, next four bytes - offset inside frame. The rest is stripe data.&lt;br /&gt;
&lt;br /&gt;
Every stripe is coded with 16-bit LSB little-endian words in LZ77-like scheme:&lt;br /&gt;
&lt;br /&gt;
  mask = 0x10000;&lt;br /&gt;
  while (stripes--) {&lt;br /&gt;
    if (mask == 0x10000) {&lt;br /&gt;
      mask = 1;&lt;br /&gt;
      bitbuf = get_le16();&lt;br /&gt;
    }&lt;br /&gt;
    if (bitbuf &amp;amp; mask) {&lt;br /&gt;
      v = get_le16();&lt;br /&gt;
      offset = (v &amp;amp; 0x1FFF) * 2;&lt;br /&gt;
      count  = ((v &amp;gt;&amp;gt; 13) + 2) * 2;&lt;br /&gt;
      memmove(cur_frame_pos, cur_frame_pos - offset, count);&lt;br /&gt;
    } else {&lt;br /&gt;
      *cur_frame_pos++ = get_byte();&lt;br /&gt;
      *cur_frame_pos++ = get_byte();&lt;br /&gt;
    }&lt;br /&gt;
    mask &amp;lt;&amp;lt;= 1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BDLT chunk ===&lt;br /&gt;
&lt;br /&gt;
First two bytes code number of lines to skip in frame before decoding, next two bytes code number of lines to decode.&lt;br /&gt;
&lt;br /&gt;
Every line is coded into segments, first byte of data tells how many segments are there. Every segment is coded as RLE, first byte&lt;br /&gt;
tells how many pixels to skip before decoding segment, second byte is treated as signed value with sign telling if it's copy or run:&lt;br /&gt;
&lt;br /&gt;
  while (segments--) {&lt;br /&gt;
     cur_line_ptr += get_byte();&lt;br /&gt;
     count = (int8_t)get_byte();&lt;br /&gt;
     if (count &amp;gt;= 0)&lt;br /&gt;
         get_buffer(cur_line_ptr, count);&lt;br /&gt;
     else&lt;br /&gt;
         memset(cur_line_ptr, get_byte(), -count);&lt;br /&gt;
     cur_line_ptr += abs(count);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== WDLT chunk ===&lt;br /&gt;
&lt;br /&gt;
First two bytes code number of lines to decode. Overall decoding is similar to BDLT chunk but with words copy instead of byte copy and different segment handling scheme:&lt;br /&gt;
&lt;br /&gt;
  while (lines--) {&lt;br /&gt;
    stripes = (int16_t)get_le16();&lt;br /&gt;
    while (stripes &amp;amp; 0xC000) {&lt;br /&gt;
      *frame_ptr += -stripes * width;&lt;br /&gt;
      stripes = (int16_t)get_le16();&lt;br /&gt;
    }&lt;br /&gt;
    if (stripes &amp;lt; 0) {&lt;br /&gt;
      frame_ptr[width - 1] = stripes &amp;amp; 0xFF;&lt;br /&gt;
      stripes = (int16_t)get_le16();&lt;br /&gt;
    }&lt;br /&gt;
    line_ptr = frame_ptr;&lt;br /&gt;
    while (stripes--) {&lt;br /&gt;
      line_ptr += get_byte();&lt;br /&gt;
      count = (int8_t)get_byte();&lt;br /&gt;
      if (count &amp;gt; 0) {&lt;br /&gt;
        get_buffer(line_ptr, count * 2);&lt;br /&gt;
        line_ptr += count * 2;&lt;br /&gt;
      } else {&lt;br /&gt;
        val = get_le16();&lt;br /&gt;
        for (i = 0; i &amp;lt; -count * 2; i++) {&lt;br /&gt;
          put_le16(line_ptr, val);&lt;br /&gt;
          line_ptr += 2;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    frame_ptr += width;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== TDLT chunk ===&lt;br /&gt;
&lt;br /&gt;
First four bytes code number of segments, each segment contains number of words to skip before decoding, number of words to copy and bytes to copy.&lt;br /&gt;
&lt;br /&gt;
  segments = getdword()&lt;br /&gt;
  while(segments--)&lt;br /&gt;
  {&lt;br /&gt;
    numcopy = getbyte()&lt;br /&gt;
    numskip = getbyte()&lt;br /&gt;
    output += numskip * 2&lt;br /&gt;
    output &amp;lt;- getbytes(numcopy * 2)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== DSW1 chunk ===&lt;br /&gt;
&lt;br /&gt;
Almost the same as TSW1 chunk with the following differences:&lt;br /&gt;
&lt;br /&gt;
* first two bytes code number of stripes&lt;br /&gt;
* if getbit() returned zero, get and test another bit. If that bit is zero too then read literal (two bytes), else read 2-byte number and skip corresponding number of pixels. And report two bits read in any case.&lt;br /&gt;
&lt;br /&gt;
=== DDS1 chunk ===&lt;br /&gt;
&lt;br /&gt;
Almost the same as DSW1 chunk but it decodes in scaled mode - every skip is twice that large, literal is used to set 2x2 block and copying also fills 2x2 block with pixel value:&lt;br /&gt;
&lt;br /&gt;
  mask = 0x10000;&lt;br /&gt;
  while (stripes--) {&lt;br /&gt;
    if (mask == 0x10000) {&lt;br /&gt;
      mask = 1;&lt;br /&gt;
      bitbuf = get_le16();&lt;br /&gt;
    }&lt;br /&gt;
    if (bitbuf &amp;amp; mask) {&lt;br /&gt;
      v = get_le16();&lt;br /&gt;
      offset = (v &amp;amp; 0x1FFF) * 2 * 2;&lt;br /&gt;
      count  = ((v &amp;gt;&amp;gt; 13) + 2) * 2;&lt;br /&gt;
      for (i = 0; i &amp;lt; count; i++) {&lt;br /&gt;
        cur_frame_pos[0] = cur_frame_pos[1] =&lt;br /&gt;
        cur_frame_pos[width] = cur_frame_pos[width + 1] = cur_frame_pos[-offset];&lt;br /&gt;
        cur_frame_pos += 2;&lt;br /&gt;
      }&lt;br /&gt;
      memmove(cur_frame_pos, cur_frame_pos - offset, count);&lt;br /&gt;
    } else if (!(bitbuf &amp;amp; (mask &amp;lt;&amp;lt; 1)) {&lt;br /&gt;
      cur_frame_pos[0] = cur_frame_pos[1] =&lt;br /&gt;
      cur_frame_pos[width] = cur_frame_pos[width + 1] = get_byte();&lt;br /&gt;
      cur_frame_pos += 2;&lt;br /&gt;
      cur_frame_pos[0] = cur_frame_pos[1] =&lt;br /&gt;
      cur_frame_pos[width] = cur_frame_pos[width + 1] = get_byte();&lt;br /&gt;
      cur_frame_pos += 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      cur_frame_pos += get_le16() * 2;&lt;br /&gt;
    }&lt;br /&gt;
    mask &amp;lt;&amp;lt;= 2;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Games using DFI ==&lt;br /&gt;
* [http://www.mobygames.com/game/anvil-of-dawn Anvil of Dawn]&lt;br /&gt;
* [http://www.mobygames.com/game/dos/chronomaster Chronomaster]&lt;br /&gt;
 &lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14550</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14550"/>
		<updated>2013-04-02T17:22:27Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* DTS / DCA Improvments */&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;
== 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'' in 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;
&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;
&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;
&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 usefull.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' 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;
&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>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14545</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14545"/>
		<updated>2013-04-02T08:17:48Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Hardware Acceleration (hwaccel) API v2 */&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;
== 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'' in 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;
&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;
&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;
&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 usefull.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Baptiste Coudurier (''bcoudurier'' 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;
== DTS / DCA ==&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;
== 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>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14360</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14360"/>
		<updated>2013-02-23T02:06:32Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* VP7 */ I did believe that the available specification was released by Google, it appears that this is incorrect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
= Proposing Ideas =&lt;br /&gt;
&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
== Example Title ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
= GSoC task proposal ideas =&lt;br /&gt;
&lt;br /&gt;
== Audio codecs ==&lt;br /&gt;
&lt;br /&gt;
=== AAC ===&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
=== DTS / DCA ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket #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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS encoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&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;
'''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;
== Video codecs ==&lt;br /&gt;
&lt;br /&gt;
=== GotoMeeting Decoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The [[GoToMeeting_Codec]] has been figured out and we need a decoder for it. We don't have samples for G2M1 so this decoder will focus on G2M2, G2M3 and G2M4 versions.&lt;br /&gt;
&lt;br /&gt;
=== HEVC / H265 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
=== H264 MVC ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
=== 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;
=== 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;
'''Expected results:'''&lt;br /&gt;
* APNG demuxer&lt;br /&gt;
** implement robust probing, so that normal PNG images are not misdetected as APNG animations&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 not 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 not invalid reads/writes happen&lt;br /&gt;
&lt;br /&gt;
* APNG muxer &amp;amp;&amp;amp; APNG encoder&lt;br /&gt;
** write compliant files, make sure they play correctly in major web browsers that support APNG&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Pbm|Paul B Mahol]]'''&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
=== JPEG 2000 ===&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 as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
=== VP7 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Not many VP7 samples are in the wild, but no open-source decoder exists although a 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;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== glplay ===&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;
=== Misc Libavfilter extension ===&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 filter&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14354</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14354"/>
		<updated>2013-02-22T14:44:21Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* DTS / DCA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
= Proposing Ideas =&lt;br /&gt;
&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
== Example Title ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
= GSoC Ideas =&lt;br /&gt;
&lt;br /&gt;
== Audio codecs ==&lt;br /&gt;
&lt;br /&gt;
=== AAC ===&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
=== DTS / DCA ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS decoder improvements&lt;br /&gt;
** Add support for LBR extension&lt;br /&gt;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS encoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&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;
'''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;
== Video codecs ==&lt;br /&gt;
&lt;br /&gt;
=== GotoMeeting Decoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The [[GoToMeeting_Codec]] has been figured out and we need a decoder for it. We don't have samples for G2M1 so this decoder will focus on G2M2, G2M3 and G2M4 versions.&lt;br /&gt;
&lt;br /&gt;
=== HEVC / H265 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
=== H264 MVC ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
=== 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;
=== 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;
'''Expected results:'''&lt;br /&gt;
* APNG demuxer&lt;br /&gt;
** implement robust probing, so that normal PNG images are not misdetected as APNG animations&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 not 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 not invalid reads/writes happen&lt;br /&gt;
&lt;br /&gt;
* APNG muxer &amp;amp;&amp;amp; APNG encoder&lt;br /&gt;
** write compliant files, make sure they play correctly in major web browsers that support APNG&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Pbm|Paul B Mahol]]'''&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
=== JPEG 2000 ===&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 as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
=== VP7 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Not many VP7 samples are in the wild, but no open-source decoder exists although Google has released a specification. 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;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14353</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14353"/>
		<updated>2013-02-22T14:23:28Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* H264 MVC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
= Proposing Ideas =&lt;br /&gt;
&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
== Example Title ==&lt;br /&gt;
&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
= GSoC Ideas =&lt;br /&gt;
&lt;br /&gt;
== Audio codecs ==&lt;br /&gt;
&lt;br /&gt;
=== AAC ===&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
=== DTS / DCA ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder improvements: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
=== MPEG-4 ALS encoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&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;
'''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;
== Video codecs ==&lt;br /&gt;
&lt;br /&gt;
=== GotoMeeting Decoder ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The [[GoToMeeting_Codec]] has been figured out and we need a decoder for it. We don't have samples for G2M1 so this decoder will focus on G2M2, G2M3 and G2M4 versions.&lt;br /&gt;
&lt;br /&gt;
=== HEVC / H265 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
=== H264 MVC ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
=== 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;
=== 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;
'''Expected results:'''&lt;br /&gt;
* APNG demuxer&lt;br /&gt;
** implement robust probing, so that normal PNG images are not misdetected as APNG animations&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 not 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 not invalid reads/writes happen&lt;br /&gt;
&lt;br /&gt;
* APNG muxer &amp;amp;&amp;amp; APNG encoder&lt;br /&gt;
** write compliant files, make sure they play correctly in major web browsers that support APNG&lt;br /&gt;
&lt;br /&gt;
'''Mentor: [[User:Pbm|Paul B Mahol]]'''&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.&lt;br /&gt;
&lt;br /&gt;
=== JPEG 2000 ===&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 as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
=== VP7 ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' Not many VP7 samples are in the wild, but no open-source decoder exists although Google has released a specification. 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;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14343</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14343"/>
		<updated>2013-02-22T10:47:47Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Video codecs */ vp7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
'''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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
==== animated png ====&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
* animated png decoder&lt;br /&gt;
* animated png encoder&lt;br /&gt;
&lt;br /&gt;
==== JPEG 2000 ====&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 as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
==== VP7 ====&lt;br /&gt;
'''Description:''' Not many VP7 samples are in the wild, but no open-source decoder exists although Google has released a specification. 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;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14342</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14342"/>
		<updated>2013-02-22T10:41:30Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Video codecs */ j2k&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
'''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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
==== animated png ====&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
* animated png decoder&lt;br /&gt;
* animated png encoder&lt;br /&gt;
&lt;br /&gt;
==== JPEG 2000 ====&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 as a qualification task to show that you are capable of improving the codec implementation.&lt;br /&gt;
&lt;br /&gt;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code&amp;diff=14341</id>
		<title>FFmpeg / Libav Summer Of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_/_Libav_Summer_Of_Code&amp;diff=14341"/>
		<updated>2013-02-22T10:35:20Z</updated>

		<summary type="html">&lt;p&gt;Ce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[FFmpeg]] project has been a participant in the [http://code.google.com/soc/ Google Summer of Code] program since 2006. In 2011, the [[Libav]] fork became part of the same Summer of Code effort.&lt;br /&gt;
&lt;br /&gt;
* [[FFmpeg_Summer_of_Code_2013|2013 FFmpeg Project page]]&lt;br /&gt;
* [[Libav Summer Of Code 2013|2013 Libav project page]]&lt;br /&gt;
* [[Libav Summer Of Code 2012|2012 Libav project page]]&lt;br /&gt;
* [[FFmpeg_Summer_of_Code_2012|2012 FFmpeg Project page]]&lt;br /&gt;
* [[FFmpeg / Libav Summer Of Code 2011|2011 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2010|2010 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2009|2009 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2008|2008 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2007|2007 project page]]&lt;br /&gt;
* [[FFmpeg Summer Of Code 2006|2006 project page]]&lt;br /&gt;
&lt;br /&gt;
Each accepted project is developed in its own sandbox, separate from the main FFmpeg / Libav 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;br /&gt;
&lt;br /&gt;
== 2006 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== VC-1 Decoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor: [[User:Multimedia Mike|Mike Melanson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AMR-NB Decoder ===&lt;br /&gt;
* Student: [[User:superdump|Robert Swain]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;Project not finished during SoC.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Continued in another Summer of Code [[FFmpeg Summer Of Code#Finish AMR-NB decoder and write an encoder|task]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AC-3 Decoder ===&lt;br /&gt;
* Student: [[User:Cloud9|Kartikey Mahendra BHATT]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:Jruggle|Justin Ruggles]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AAC Decoder ===&lt;br /&gt;
* Student: Maxim Gavrilov&lt;br /&gt;
* Mentor: [[User:ods15|Oded Shimon]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:andoma|Andreas Öman]] and [[User:superdump|Robert Swain]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Vorbis Encoder ===&lt;br /&gt;
* Student: Mathew Philip&lt;br /&gt;
* Mentor: [[User:ods15|Oded Shimon]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project barely started&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:ods15|Oded Shimon]] and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 2007 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== RealVideo 4 Decoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor: [[User:Multimedia Mike|Mike Melanson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt; The project goal morphed to include a RealVideo 3 decoder since the 2 schemes are so similar.&lt;br /&gt;
&lt;br /&gt;
=== QCELP Decoder ===&lt;br /&gt;
* Student: [[User:Reynaldo|Reynaldo Verdejo Pinochet]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg commiter&amp;lt;/font&amp;gt;. &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;Produced a working decoder during SoC but the code didn't reach SVN before the end of the program&amp;lt;/font&amp;gt;.&lt;br /&gt;
* Code Status: Picked up by Kenan Gillet and with the help of [[User:Reynaldo|Reynaldo]] &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;. Some features still missing, though.&lt;br /&gt;
&lt;br /&gt;
=== Matroska Muxer ===&lt;br /&gt;
* Student: David Conrad&lt;br /&gt;
* Mentor: [[User:aurel|Aurélien Jacobs]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video Filter API (AKA [[Libavfilter|libavfilter]]) ===&lt;br /&gt;
* Student: [[User:Koorogi|Bobby Bingham]]&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]] and Michael Niedermayer&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== E-AC-3 Decoder ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec&lt;br /&gt;
* Mentor:  [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;; &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;code produced worked for most available samples, but there were some unimplemented features.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: Picked up by [[User:Jruggle|Justin Ruggles]], finished and &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== JPEG 2000 Encoder and Decoder ===&lt;br /&gt;
* Student: Kamil Nowosad&lt;br /&gt;
* Mentor: [[User:pengvado|Loren Merritt]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;The code is working but not all features are supported.&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Dirac Encoder and Decoder ===&lt;br /&gt;
* Student: Marco Gerards&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Decoder committed to FFmpeg,&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt; the encoder still needs more work.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TS Muxer ===&lt;br /&gt;
* Student: Xiaohui Sun&lt;br /&gt;
* Mentor:  [[User:bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;disappeared, project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt; [[Interesting Patches#PES packetizer by Xiaohui Sun|Changes]] requested during the review process for FFmpeg inclusion were never made.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2008 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== Generic frame-level multithreading support  ===&lt;br /&gt;
* Student: Alexander Strange &lt;br /&gt;
* Mentor: Kristian Jerpetjoen&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nellymoser Encoder ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec &lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  ALAC Encoder ===&lt;br /&gt;
* Student: [[User:Jai|Jai Menon]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LGPL reimplementation of GPL sws_scale parts ===&lt;br /&gt;
* Student: Keiji Costantini&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;project unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: The GPL YUV table generator has since been &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;implemented as LGPL by [[User:Kostya|Kostya Shishkov]]&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AAC-LC Encoder ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya]]&lt;br /&gt;
* Mentor: [[User:Andoma|Andreas Öman]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;merged but terrible&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MLP/TrueHD encoder ===&lt;br /&gt;
* Student: [[User:Angustia|Ramiro Polla]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;MLP encoder never finished&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;MLP decoder committed to FFmpeg&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== WMA Pro Decoder ===&lt;br /&gt;
* Student: Sascha Sommer&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MXF Muxer ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;finished project&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2009 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== RTMP Support (Flash streaming) ===&lt;br /&gt;
* Student: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Mentor:  [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libswscale cleanup ===&lt;br /&gt;
* Student: [[User:Angustia|Ramiro Polla]]&lt;br /&gt;
* Mentor: [[User:reimar|Reimar Döffinger]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;partially committed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== S/PDIF muxer ===&lt;br /&gt;
* Student: Bartlomiej Wolowiec &lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Playlist/Concatenation Support for FFmpeg ===&lt;br /&gt;
* Student: [[User:Gkovacs|Geza Kovacs]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JPEG2000 decoder and encoder ===&lt;br /&gt;
* Student: [[User:Jai|Jai Menon]]&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;abandoned project&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement the New Seeking API in Libavformat ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor:  [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[MPEG-4 Audio Lossless Coding (ALS)|MPEG-4 ALS]] decoder ===&lt;br /&gt;
* Student: Thilo Borgmann&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;FFmpeg committer&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implementation of AVFilter infrastructure and various audio filters ===&lt;br /&gt;
* Student: Kevin Dubois&lt;br /&gt;
* Mentor:  [[User:Vitor|Vitor Sessak]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;project not finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;unfinished&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finish AMR-NB decoder and write an encoder ===&lt;br /&gt;
* Student: Colin McQuillan&lt;br /&gt;
* Mentor:  [[User:superdump|Robert Swain]]&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;AMR-NB decoder almost finished during SoC&amp;lt;/font&amp;gt;&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;AMR-NB decoder accepted into the FFmpeg codebase&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;AMR-NB encoder not started&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 2010 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== Improve RTSP/RTP layer ===&lt;br /&gt;
* Student: Josh Allmann&lt;br /&gt;
* Student Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Active contributor&amp;lt;/font&amp;gt;&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]], [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Fully integrated ([[Improve RTSP/RTP layer|checklist]])&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Writing an AMR-WB audio decoder ===&lt;br /&gt;
* Student: Marcelo Povoa&lt;br /&gt;
* Mentor: [[User:superdump|Robert Swain]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;AMR-WB decoder accepted into the FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MMS protocol Implementation ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor: [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;MMSH and MMST protocols accepted into FFmpeg codebase&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;MMSU protocol not started&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== G.723.1 Decoder/Encoder ===&lt;br /&gt;
* Student: Mohamed Naufal&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Libavfilter audio framework and filters ===&lt;br /&gt;
* Student: S.N. Hemanth Meenakshisundaram&lt;br /&gt;
* Mentor: Stefano Sabatini&lt;br /&gt;
* Code status: &amp;lt;font color=&amp;quot;#AAAA00&amp;quot;&amp;gt;partially integrated in the FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MOD audio playback support ===&lt;br /&gt;
* Student: Sebastian Vater&lt;br /&gt;
* Mentor: Stefano Sabatini, Vitor Sessak&lt;br /&gt;
* Code status: &amp;lt;font color=&amp;quot;#AAAA00&amp;quot;&amp;gt;implemented in external repo, not integrated into FFmpeg codebase&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accurate Seeking API ===&lt;br /&gt;
* Student: Michael Chinen&lt;br /&gt;
* Mentor: [[User:Bcoudurier|Baptiste Coudurier]]&lt;br /&gt;
&lt;br /&gt;
== 2011 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== BSAC AAC Decoder ===&lt;br /&gt;
* Student: Young Han Lee&lt;br /&gt;
* Mentor: [[User:AConverse|Alex Converse]]&lt;br /&gt;
* Code Status: [http://github.com/yhlee/bsac Started]&lt;br /&gt;
&lt;br /&gt;
=== Playlist Support ===&lt;br /&gt;
* Student: [[User:elenril|Anton Khirnov]]&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
&lt;br /&gt;
=== Improve the audio filtering support in libavfilter ===&lt;br /&gt;
* Student: Mina Nagy&lt;br /&gt;
* Mentor: [[User:stefanosa|Stefano Sabatini]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;partially committed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DTS Encoder ===&lt;br /&gt;
* Student: Xiang Wang&lt;br /&gt;
* Mentor: [[User:Merbanan|Benjamin Larsson]]&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;failed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VC-1 decoder missing features implementation ===&lt;br /&gt;
* Student: Mashiat Sarker Shakkhar&lt;br /&gt;
* Mentor: [[User:Ronald S. Bultje|Ronald Bultje]]&lt;br /&gt;
* Code Status: [https://github.com/shahriman/libav WiP]&lt;br /&gt;
&lt;br /&gt;
=== Complete WMVP/WVP2 decoder ===&lt;br /&gt;
* Student: Alberto Delmás&lt;br /&gt;
* Mentor: [[User:Kostya|Kostya Shishkov]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement Windows Television (WTV) muxer ===&lt;br /&gt;
* Student: [[User:spyfeng|Zhentan Feng]]&lt;br /&gt;
* Mentor: [[User:suxen_drol|Peter Ross]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Accelerated H264 Decoding on Android ===&lt;br /&gt;
* Student: Mohamed Naufal&lt;br /&gt;
* Mentor: [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flash screen video (1)/2 ===&lt;br /&gt;
* Student: [[User:DonDiego|Diego Biurrun]]&lt;br /&gt;
* Mentor: [[User:Jumpyshoes|Daniel Kang]]&lt;br /&gt;
* Project Status: &amp;lt;font color=&amp;quot;#CC0000&amp;quot;&amp;gt;failed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dirac Video Codec update ===&lt;br /&gt;
* Student: Jordi Ortiz&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Decoder accepted into the FFmpeg codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2012 Projects ==&lt;br /&gt;
&lt;br /&gt;
=== HEVC/H.265 video decoder ===&lt;br /&gt;
* Student: Guillaume Martres&lt;br /&gt;
* Mentor: [[User:Shahriman|Mashiat Sarker Shakkhar]]&lt;br /&gt;
* Code Status: [https://github.com/smarter/libav/tree/hevc &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;in progress&amp;lt;/font&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Opus decoder ===&lt;br /&gt;
* Student: Andrew D'Addesio&lt;br /&gt;
* Mentor: [[User:Jruggle|Justin Ruggles]]&lt;br /&gt;
* Code Status: [https://github.com/Fatbag/libav &amp;lt;font color=&amp;quot;#CCCC00&amp;quot;&amp;gt;in progress&amp;lt;/font&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
=== Rewrite avserver ===&lt;br /&gt;
* Student: Jordi Ortiz&lt;br /&gt;
* Mentor: [[User:Lu_zero|Luca Barbato]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RTMP[E|S|T|TE] protocol implementation ===&lt;br /&gt;
* Student: Samuel Pitoiset&lt;br /&gt;
* Mentor: [[User:Mstorsjo|Martin Storsjö]]&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ut Video encoder ===&lt;br /&gt;
* Student: Jan Ekström&lt;br /&gt;
* Mentor: Derek Buitenhuis&lt;br /&gt;
* Code Status: &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Accepted into the Libav codebase.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14340</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14340"/>
		<updated>2013-02-22T10:27:20Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Audio codecs */ Opus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
'''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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
==== animated png ====&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
* animated png decoder&lt;br /&gt;
* animated png encoder&lt;br /&gt;
&lt;br /&gt;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14339</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14339"/>
		<updated>2013-02-22T10:21:57Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* DTS / DCA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
** Add support for mixed Core + DTS-HD stream structure&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;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
==== animated png ====&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
* animated png decoder&lt;br /&gt;
* animated png encoder&lt;br /&gt;
&lt;br /&gt;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14338</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14338"/>
		<updated>2013-02-22T10:20:00Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* Video codecs */ Animated png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
==== animated png ====&lt;br /&gt;
'''Description:''' FFmpeg currently does not support Animated PNGs.&lt;br /&gt;
* animated png decoder&lt;br /&gt;
* animated png encoder&lt;br /&gt;
&lt;br /&gt;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14337</id>
		<title>FFmpeg Summer of Code 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_of_Code_2013&amp;diff=14337"/>
		<updated>2013-02-22T10:17:26Z</updated>

		<summary type="html">&lt;p&gt;Ce: /* GSoC Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FFmpeg Summer of Code Ideas List&lt;br /&gt;
&lt;br /&gt;
== Proposing Ideas ==&lt;br /&gt;
If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the [http://ffmpeg.org/contact.html ffmpeg-devel mailing list]. A good source of ideas is the [https://ffmpeg.org/trac/ffmpeg/ FFmpeg bug tracker] and [[FFmpeg_Summer_of_Code_2012|FFmpeg Summer of Code 2012 Ideas List]].&lt;br /&gt;
&lt;br /&gt;
When adding an idea follow this template for consistency:&lt;br /&gt;
&lt;br /&gt;
=== Example Title ===&lt;br /&gt;
'''Description:''' A few sentences or a short paragraph describing the task.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Bulleted list or paragraph describing what the student is expected to achieve.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' Skills or knowledge required by student.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' List mentor and backup mentor if there is one and contact info such as IRC name or email address.&lt;br /&gt;
&lt;br /&gt;
== GSoC Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== Audio codecs ===&lt;br /&gt;
&lt;br /&gt;
==== AAC ====&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;
See also the FFmpeg bug tracker for AAC issues, fixing one of them or rebasing the existing incomplete BSAC decoder for current git head fixing one or more existing bugs are possible qualification tasks.&lt;br /&gt;
&lt;br /&gt;
==== DTS / DCA ====&lt;br /&gt;
'''Description:''' FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.&lt;br /&gt;
* DTS-HD decoder: A possible qualification task is to implement ticket #1920&lt;br /&gt;
* DTS encoder improvements&lt;br /&gt;
&lt;br /&gt;
==== MPEG-4 ALS encoder ====&lt;br /&gt;
'''Description:''' An ALS decoder was implemented several years ago, an encoder is still missing.&lt;br /&gt;
&lt;br /&gt;
==== TrueHD encoder ====&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;
=== Video codecs ===&lt;br /&gt;
&lt;br /&gt;
==== HEVC / H265 ====&lt;br /&gt;
'''Description:''' The specification was finished, FFmpeg needs a decoder for this new format.&lt;br /&gt;
* Write a basic decoder supporting I, P, and, only 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;
&lt;br /&gt;
==== H264 MVC ====&lt;br /&gt;
'''Description:''' MVC samples exist, the codec is used on Bluray media, FFmpeg is missing a decoder. Since this task also consists of some changes in the current architecture, it is especially important that this task is discussed on the ffmpeg-devel mailing list.&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;
==== VC-1 interlaced ====&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;
=== FFplay ===&lt;br /&gt;
&lt;br /&gt;
==== glplay ====&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;
=== Libavfilter extension ===&lt;br /&gt;
&lt;br /&gt;
'''Description:''' 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;
* This 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 and checking that the new integrated filter is not slower.&lt;br /&gt;
* For more ideas read 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;
'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design.&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;
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=AVUI&amp;diff=14282</id>
		<title>AVUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=AVUI&amp;diff=14282"/>
		<updated>2013-01-05T08:17:46Z</updated>

		<summary type="html">&lt;p&gt;Ce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FourCC: AVUI&lt;br /&gt;
* Samples: http://samples.ffmpeg.org/V-codecs/AVUI/&lt;br /&gt;
* Useful link: http://lists.apple.com/archives/quicktime-api/2012/Mar/msg00039.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14275</id>
		<title>Small FFmpeg Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Small_FFmpeg_Tasks&amp;diff=14275"/>
		<updated>2013-01-03T14:33:30Z</updated>

		<summary type="html">&lt;p&gt;Ce: FFmpeg supports YUV &amp;gt;8bit for some time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains ideas for small, relatively simple tasks for the [[FFmpeg]] project. People who might be interested in trying one of these tasks:&lt;br /&gt;
* Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with&lt;br /&gt;
* Someone who wishes to qualify for one of FFmpeg's coveted [[FFmpeg Summer Of Code|Summer of Code]] project slots&lt;br /&gt;
* An existing FFmpeg developer who has been away from the project for a while and needs a smaller task as motivation for re-learning the codebase&lt;br /&gt;
&lt;br /&gt;
For other tasks of varying difficulty, see the [[Interesting Patches]] page.&lt;br /&gt;
&lt;br /&gt;
'''If you would like to work on one of these tasks''', please take these steps:&lt;br /&gt;
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest&lt;br /&gt;
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki&lt;br /&gt;
&lt;br /&gt;
'''If you would like to add to this list''', please be prepared to explain some useful details about the task. Excessively vague tasks with no supporting details will be ruthlessly deleted.&lt;br /&gt;
&lt;br /&gt;
The FFmpeg project always needs people to do the following tasks:&lt;br /&gt;
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]&lt;br /&gt;
##verifying bugreports are complete with 'ffmpeg -i' output&lt;br /&gt;
##making sure samples are mirrored/available&lt;br /&gt;
##verifying bugs against current git master&lt;br /&gt;
#Review patches posted to ffmpeg-devel mailing list&lt;br /&gt;
##also test to make sure they compile against git master and dont break 'make fate' / compilation&lt;br /&gt;
#Review documentation and update examples in documentation.&lt;br /&gt;
##updating and adding more information to the howto and api documents&lt;br /&gt;
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc&lt;br /&gt;
&lt;br /&gt;
== Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Finish up a previous incomplete SoC project ===&lt;br /&gt;
&lt;br /&gt;
Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the [[FFmpeg Summer Of Code]] overview page and look for the unfinished projects, like the TS muxer.&lt;br /&gt;
&lt;br /&gt;
=== Add code to validate get_buffer usage of decoders ===&lt;br /&gt;
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.&lt;br /&gt;
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).&lt;br /&gt;
If the decoder does not use reget_buffer, always return a buffer initialized with random data.&lt;br /&gt;
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.&lt;br /&gt;
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.&lt;br /&gt;
Probably more things that could be done.&lt;br /&gt;
&lt;br /&gt;
=== Port missing demuxers from MPlayer ===&lt;br /&gt;
MPlayer supports a few container formats in libmpdemux that are not yet present in libavformat. Porting them over and gettting them relicensed as LGPL or reimplementing them from scratch should make reasonable small tasks.&lt;br /&gt;
&lt;br /&gt;
# TiVo --&lt;br /&gt;
# SL support for MPEG-TS (anyone got samples?)&lt;br /&gt;
# MNG -- ''Paul B Mahol is working on this''&lt;br /&gt;
&lt;br /&gt;
=== Optimal Huffman tables for (M)JPEG ===&lt;br /&gt;
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://ffmpeg.org/trac/ffmpeg/ticket/134&lt;br /&gt;
&lt;br /&gt;
=== M95 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which should be fairly easy by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== BRP Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[BRP]] files. This will entail writing a new file demuxer as well as a video decoder that can handle at least 2 variations of format data. Further, write an audio decoder for the custom DPCM format in the file. All of these tasks are considered fairly easy by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.&lt;br /&gt;
&lt;br /&gt;
=== 16-bit VQA Video Decoder ===&lt;br /&gt;
Westwood [[VQA]] files are already supported. However, there are three variations of its custom video codec, only the first two of which are supported. This task involves implementing support for the third variation. Visit the VQA samples repository: http://samples.multimedia.cx/game-formats/vqa/ -- The files in the directories Tiberian Sun VQAs/, bladerunner/, and dune2000/ use the 3rd variation of this codec. The [[VQA|VQA page]] should link to all the details you need to support this format.&lt;br /&gt;
&lt;br /&gt;
Discussion/patch:&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433&lt;br /&gt;
&lt;br /&gt;
=== HNM4 Playback System ===&lt;br /&gt;
This task is to implement a playback subsystem for [[HNM4]] variant of the [[HNM]] format. This will entail writing a new file demuxer and video decoder, both of which are considered fairly easy by FFmpeg standards. [[HNM4|The HNM4 page]] contains the specs necessary to complete this task and links to downloadable samples.&lt;br /&gt;
&lt;br /&gt;
=== Apple RPZA encoder ===&lt;br /&gt;
A patch was once sent to the ffmpeg-devel mailing list to include an encoder for the [[Apple RPZA]] video codec. That code can be found on the &amp;quot;[[Interesting Patches]]&amp;quot; page. This qualification task involves applying that patch so that it can compile with current HEAD and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.&lt;br /&gt;
&lt;br /&gt;
=== QuickTime Edit List Support ===&lt;br /&gt;
Implement edit list support in the QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The [http://xine.cvs.sourceforge.net/xine/xine-lib/src/demuxers/demux_qt.c?view=markup Xine demuxer] has support for this, it might be useful for hints.&lt;br /&gt;
&lt;br /&gt;
(patch was submitted to ffmpeg-devel , around 14 March 2009) &lt;br /&gt;
&lt;br /&gt;
=== merge all fixed point decoders back into libavcodec ===&lt;br /&gt;
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.&lt;br /&gt;
&lt;br /&gt;
=== flip flag for upside-down codecs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;about the flip, a patch that decodes images fliped when&lt;br /&gt;
codec_tag == ff_get_fourcc(&amp;quot;GEOX&amp;quot;) is welcome.&lt;br /&gt;
its a metter of 2lines manipulating data/linesize of imgages after&lt;br /&gt;
get_buffer() or something similar&lt;br /&gt;
[...]&lt;br /&gt;
-- &lt;br /&gt;
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
more info:&lt;br /&gt;
http://ffmpeg.org/trac/ffmpeg/ticket/317&lt;br /&gt;
&lt;br /&gt;
=== vcr1 encoder ===&lt;br /&gt;
According to this: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-February/063555.html vcr1 encoder is disabled, and won't compile if enabled.  Michael would prefer to keep it around, and have someone grow it into full encoder.&lt;br /&gt;
&lt;br /&gt;
=== Implement Phantom Cine demuxer and Bayer format support for swscale ===&lt;br /&gt;
The format is described here:&lt;br /&gt;
http://wiki.multimedia.cx/index.php?title=Phantom_Cine&lt;br /&gt;
It will need support for Bayer -&amp;gt; RGB conversion in swscale to make the demuxer useful though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===&lt;br /&gt;
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec&lt;br /&gt;
&lt;br /&gt;
This would add a free lossless intra-frame RGB codec for all supported platforms (most important OS X + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)&lt;br /&gt;
&lt;br /&gt;
=== [[IFF#ANIM|IFF ANIM]] decoder ===&lt;br /&gt;
Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at [[IFF#ANIM|IFF ANIM]] has links to more information and source code. Samples can be found at http://www-user.tu-chemnitz.de/~womar/projects/iffanim/iffanim_samplepack.zip .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== port missing decoders/demuxers from other open source projects. ===&lt;br /&gt;
&lt;br /&gt;
http://www.mega-nerd.com/libsndfile/#Features&lt;br /&gt;
 GNU Octave 2.0 MAT4&lt;br /&gt;
 GNU Octave 2.1 MAT5&lt;br /&gt;
 Designer II SD2&lt;br /&gt;
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz&lt;br /&gt;
&lt;br /&gt;
http://www.hawksoft.com/hawkvoice/&lt;br /&gt;
 HVDI_VOICE_DATA- packet&lt;br /&gt;
 [[GSM]]&lt;br /&gt;
 LPC&lt;br /&gt;
 CELP&lt;br /&gt;
 LPC10&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/vgmstream&lt;br /&gt;
 150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt&lt;br /&gt;
&lt;br /&gt;
http://www.imagemagick.org&lt;br /&gt;
http://www.graphicsmagick.org/formats.html&lt;br /&gt;
 many image formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://gpac.sourceforge.net/&lt;br /&gt;
 [[MPEG-4 BIFS]]&lt;br /&gt;
 3GPP DIMS&lt;br /&gt;
 [[LASeR]]&lt;br /&gt;
 SAF&lt;br /&gt;
 SVG&lt;br /&gt;
 [[Synchronized Multimedia Integration Language|SMIL]]&lt;br /&gt;
 VRML&lt;br /&gt;
 X3D&lt;br /&gt;
 XMT&lt;br /&gt;
&lt;br /&gt;
http://adplug.sourceforge.net/&lt;br /&gt;
http://adplug.sourceforge.net/library/&lt;br /&gt;
 many OPL2/OPL3 audio formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://mikmod.raphnet.net/&lt;br /&gt;
http://mikmod.raphnet.net/#features&lt;br /&gt;
 many music pattern formats not supported yet.&lt;br /&gt;
&lt;br /&gt;
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&lt;br /&gt;
 AY&lt;br /&gt;
 GBS&lt;br /&gt;
 GYM&lt;br /&gt;
 HES&lt;br /&gt;
 KSS&lt;br /&gt;
 NSF, NSFE&lt;br /&gt;
 SAP&lt;br /&gt;
 [[SNES-SPC700 Sound Format]]&lt;br /&gt;
 VGM, VGZ&lt;br /&gt;
&lt;br /&gt;
=== vloopback output support ===&lt;br /&gt;
&lt;br /&gt;
vloopback is a linux kernel device which allows to create a virtual video device where&lt;br /&gt;
programs can write, and can be accessed as a normal video device:&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice&lt;br /&gt;
&lt;br /&gt;
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a&lt;br /&gt;
program reading from such device (e.g. skype, a voip client etc.).&lt;br /&gt;
&lt;br /&gt;
An example of a program which uses vloopback:&lt;br /&gt;
http://www.ws4gl.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===&lt;br /&gt;
&lt;br /&gt;
There are plenty programs providing their own filters, many of them may be easily ported to the &lt;br /&gt;
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries&lt;br /&gt;
(e.g. opencv, libgimp, libshowphoto, libaa).&lt;br /&gt;
&lt;br /&gt;
=== rar/zip/gz/bz2 etc demuxer ===&lt;br /&gt;
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.&lt;br /&gt;
&lt;br /&gt;
=== Less common AAC decoder features ===&lt;br /&gt;
&lt;br /&gt;
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.&lt;br /&gt;
&lt;br /&gt;
=== arithmetic decoding (and encoding) for mjpeg ===&lt;br /&gt;
Following marker codes are not supported by our mjpeg decoder:&lt;br /&gt;
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.&lt;br /&gt;
*any samples?&lt;br /&gt;
&lt;br /&gt;
=== [[Enhanced Variable Rate Codec]] decoder ===&lt;br /&gt;
samples and specs available.&lt;br /&gt;
&lt;br /&gt;
=== adobe http f4f segmented fragmentation dynamic streaming format ===&lt;br /&gt;
sample streams on http://www.fox.com . command line instructions for creating such files: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html . spec is available under adobe NDA. not to be confused with freely available F4V specification. open source php to convert f4f to flv: https://github.com/svnpenn/dotfiles/blob/master/etc/AdobeHDS.php&lt;br /&gt;
&lt;br /&gt;
=== get 3IV1 decoder working and benchmark ===&lt;br /&gt;
we have a decoder for 3IV1. its currently if 0'd in the mpeg4 decoder. your task is to test if it still builds and works, and fix it so that it does not slow down mpeg4 decoder if enabled. the end goal is to enable it by default.&lt;br /&gt;
&lt;br /&gt;
== Reverse Engineering Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Demuxer for csf format and video codec ===&lt;br /&gt;
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060&lt;br /&gt;
&lt;br /&gt;
=== realplayer's ivr format and create a demuxer for it ===&lt;br /&gt;
samples on [[IVR]] page.&lt;br /&gt;
&lt;br /&gt;
=== pick a random binary codec from mplayer ===&lt;br /&gt;
[[MPlayer]] has over 100 binary codecs which have no opensource decoder. pick one, find a sample and try to reverse engineer it. note that some work has been done on some codecs, and its a good idea to ask on the mailing list before starting.&lt;br /&gt;
&lt;br /&gt;
==== screen capture codec ====&lt;br /&gt;
screen capture codecs are usually very simple and based on zlib.&lt;br /&gt;
&lt;br /&gt;
=== emblaze demuxer/decoder from java code ===&lt;br /&gt;
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/&lt;br /&gt;
&lt;br /&gt;
=== audio sample suite ===&lt;br /&gt;
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html&lt;br /&gt;
&lt;br /&gt;
== Non-Programming Tasks ==&lt;br /&gt;
&lt;br /&gt;
=== Check Linux distributions for patches to ffmpeg ===&lt;br /&gt;
&lt;br /&gt;
check various distros like Fedora, Ubuntu, Debian, Mint, Arch, Suse etc for patches to ffmpeg. write down location of patches so it can be checked on an annual basis. if patches are found , report to ffmpeg-devel mailing list or bug trac.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== improve layout and accessability of ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
test ffmpeg.org with various browsers, including screen readers and get it optimized and available to people with poor vision. check wording and general ease of use. for example putting large download links for users like vlc and firefox have.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== restore and update compatability page on ffmpeg website ===&lt;br /&gt;
&lt;br /&gt;
we used to have a page that detailed how to create files for other software players and operating systems. restore this page from git history and update it for new devices and standardized codecs (h264 is the preferred codec now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== contact large ffmpeg users for broken / unplayable samples ===&lt;br /&gt;
contact the largest users of ffmpeg, like youtube, facebook, archive.org, blip.tv and others and ask them for access to samples that do not decode correctly.&lt;br /&gt;
&lt;br /&gt;
=== review sample request error messages ===&lt;br /&gt;
ffmpeg has an av_log_ask_for_sample generic log message to ask the user for a sample when there is a problem. your task is to review ffmpeg decoders and demuxers (and possibly other inputs) and replace regular av_log messages requesting samples with it. example commit here: http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/036509.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write bluray and 3d howtos ===&lt;br /&gt;
write a document or wiki article or just link to some info on how to play + encode + rip bluray using ffmpeg/mplayer and the various bluray libs required. also a guide on how to use ffmpeg/mplayer/vlc to encode and play various 3D formats. including maybe some supported hardware screens/video cards w/ examples. includes updating this wiki page [[Blu Ray and HD-DVD Playback Status]]&lt;br /&gt;
[[How to make a 3d movie with ffmpeg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== write ipad/iphone/ios howto ===&lt;br /&gt;
write up some documentation on how to compile ffmpeg/ffplay/ffserver for iOS. exact tool versions, command lines, library requirements. both native compilation on the device and cross-compile using OS X. an android howto for various devices would be useful too.&lt;br /&gt;
&lt;br /&gt;
=== talk to downstream ===&lt;br /&gt;
talk to the big projects that use ffmpeg. see if there is anything ffmpeg can do to make things easier, be it api stabilization, backwards compatability, or turning private functions into public headers.&lt;br /&gt;
&lt;br /&gt;
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.&lt;br /&gt;
&lt;br /&gt;
==== migrate bugs from other projects ====&lt;br /&gt;
many projects that use ffmpeg or libavcodec have bugs that are meant for ffmpeg. some of these projects dont have time to send them to us, so they rot on bugzillas.&lt;br /&gt;
&lt;br /&gt;
==== review any local patches ====&lt;br /&gt;
some projects may patch ffmpeg. collect these patches and compare them with other projects. see if there is anything we can do to reduce external patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;br /&gt;
[[Category:Libav]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=14274</id>
		<title>Interesting Patches</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=14274"/>
		<updated>2013-01-03T14:24:36Z</updated>

		<summary type="html">&lt;p&gt;Ce: The framebuffer input device was committed to FFmpeg in 2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page tries to collect some useful patches for FFmpeg that didn't make into the repository for some reason or another.&lt;br /&gt;
&lt;br /&gt;
== native [[Zlib]] decoder by [[User:Mans|Mans Rullgard]] ==&lt;br /&gt;
https://github.com/michaelni/FFmpeg/tree/inflate&lt;br /&gt;
&lt;br /&gt;
== [[WMV3]] encoder by Denis Fortin ==&lt;br /&gt;
http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2007-June/031326.html&lt;br /&gt;
&lt;br /&gt;
== [[Apple RPZA]] encoder by Todd Kirby ==&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/87327/focus=87771&lt;br /&gt;
&lt;br /&gt;
== PES packetizer by Xiaohui Sun ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/52773/focus=56011&lt;br /&gt;
&lt;br /&gt;
Part of the work of [[FFmpeg Summer Of Code#TS Muxer|Summer Of Code TS Muxer]]&lt;br /&gt;
&lt;br /&gt;
== vf_imlib2: a libavfilter filter by [[User:Wzrlpy|Víctor Paesa]] ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/2007-December/002161.html&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;mem&amp;quot; file protocol by Lagrange Multiplier ==&lt;br /&gt;
The &amp;quot;mem&amp;quot; protocol simply uses RAM as a source for input multimedia data, akin to how the &amp;quot;file&amp;quot; and &amp;quot;pipe&amp;quot; protocols use filesystem files and pipes as sources.&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/49711&lt;br /&gt;
&lt;br /&gt;
== Presets/profiles for usual targets by Panagiotis Issaris ==&lt;br /&gt;
Allow to keep in a text file groups of command options, and apply them at once by specifying the target name.&lt;br /&gt;
&lt;br /&gt;
Handy for iPod, PSP, or any other picky multimedia player that otherwise requires lengthy command lines.&lt;br /&gt;
&lt;br /&gt;
http://article.gmane.org/gmane.comp.video.ffmpeg.devel/37244&lt;br /&gt;
&lt;br /&gt;
== H264 encoder by Jori Liesenborgs &amp;amp; Panagiotis Issaris ==&lt;br /&gt;
http://research.edm.uhasselt.be/~h264/&lt;br /&gt;
&lt;br /&gt;
== [[Chinese AVS]] video encoder by [[User:StefanG|Stefan Gehrer]] ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54415/focus=124500&lt;br /&gt;
&lt;br /&gt;
==  Lossless msmpeg4v3 to mpeg4 transcoder ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/17074&lt;br /&gt;
&lt;br /&gt;
== Fixed point cook decoder ==&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/46024&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/53003/focus=46913&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54008&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54553&lt;br /&gt;
&lt;br /&gt;
== GDI screen grabbing for Win32 ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/43589&lt;br /&gt;
&lt;br /&gt;
There are two implementations in the thread above.&lt;br /&gt;
&lt;br /&gt;
== [[MPEG-4 ALS]] encoder by [[User:Jruggle|Justin Ruggles]] ==&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
== [[Bayer RGB]] decoder by Guennadi Liakhovetski ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2008-March/056719.html&lt;br /&gt;
&lt;br /&gt;
== Chromium security patches ==&lt;br /&gt;
Security/stability patches from Google's web browser&lt;br /&gt;
http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/ffmpeg/&lt;br /&gt;
&lt;br /&gt;
== TS ARIB STD-B24 caption decoder by Michael Wu ==&lt;br /&gt;
&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2009-October/062725.html&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=14267</id>
		<title>Interesting Patches</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Interesting_Patches&amp;diff=14267"/>
		<updated>2012-12-23T14:01:54Z</updated>

		<summary type="html">&lt;p&gt;Ce: SGI demuxer and decoder was committed to FFmpeg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page tries to collect some useful patches for FFmpeg that didn't make into the repository for some reason or another.&lt;br /&gt;
&lt;br /&gt;
== native [[Zlib]] decoder by [[User:Mans|Mans Rullgard]] ==&lt;br /&gt;
https://github.com/michaelni/FFmpeg/tree/inflate&lt;br /&gt;
&lt;br /&gt;
== [[WMV3]] encoder by Denis Fortin ==&lt;br /&gt;
http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2007-June/031326.html&lt;br /&gt;
&lt;br /&gt;
== [[Apple RPZA]] encoder by Todd Kirby ==&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/87327/focus=87771&lt;br /&gt;
&lt;br /&gt;
== PES packetizer by Xiaohui Sun ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/52773/focus=56011&lt;br /&gt;
&lt;br /&gt;
Part of the work of [[FFmpeg Summer Of Code#TS Muxer|Summer Of Code TS Muxer]]&lt;br /&gt;
&lt;br /&gt;
== vf_imlib2: a libavfilter filter by [[User:Wzrlpy|Víctor Paesa]] ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/2007-December/002161.html&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;mem&amp;quot; file protocol by Lagrange Multiplier ==&lt;br /&gt;
The &amp;quot;mem&amp;quot; protocol simply uses RAM as a source for input multimedia data, akin to how the &amp;quot;file&amp;quot; and &amp;quot;pipe&amp;quot; protocols use filesystem files and pipes as sources.&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/49711&lt;br /&gt;
&lt;br /&gt;
== Presets/profiles for usual targets by Panagiotis Issaris ==&lt;br /&gt;
Allow to keep in a text file groups of command options, and apply them at once by specifying the target name.&lt;br /&gt;
&lt;br /&gt;
Handy for iPod, PSP, or any other picky multimedia player that otherwise requires lengthy command lines.&lt;br /&gt;
&lt;br /&gt;
http://article.gmane.org/gmane.comp.video.ffmpeg.devel/37244&lt;br /&gt;
&lt;br /&gt;
== H264 encoder by Jori Liesenborgs &amp;amp; Panagiotis Issaris ==&lt;br /&gt;
http://research.edm.uhasselt.be/~h264/&lt;br /&gt;
&lt;br /&gt;
== [[Chinese AVS]] video encoder by [[User:StefanG|Stefan Gehrer]] ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54415/focus=124500&lt;br /&gt;
&lt;br /&gt;
==  Lossless msmpeg4v3 to mpeg4 transcoder ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/17074&lt;br /&gt;
&lt;br /&gt;
== Fixed point cook decoder ==&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/46024&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/53003/focus=46913&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54008&lt;br /&gt;
* http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/54553&lt;br /&gt;
&lt;br /&gt;
== GDI screen grabbing for Win32 ==&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/43589&lt;br /&gt;
&lt;br /&gt;
There are two implementations in the thread above.&lt;br /&gt;
&lt;br /&gt;
== [[MPEG-4 ALS]] encoder by [[User:Jruggle|Justin Ruggles]] ==&lt;br /&gt;
https://github.com/justinruggles/FFmpeg-alsenc&lt;br /&gt;
&lt;br /&gt;
== [[Bayer RGB]] decoder by Guennadi Liakhovetski ==&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2008-March/056719.html&lt;br /&gt;
&lt;br /&gt;
== Chromium security patches ==&lt;br /&gt;
Security/stability patches from Google's web browser&lt;br /&gt;
http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/ffmpeg/&lt;br /&gt;
&lt;br /&gt;
==  Framebuffer input device by Giliard ==&lt;br /&gt;
&lt;br /&gt;
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/91238&lt;br /&gt;
&lt;br /&gt;
== TS ARIB STD-B24 caption decoder by Michael Wu ==&lt;br /&gt;
&lt;br /&gt;
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2009-October/062725.html&lt;br /&gt;
&lt;br /&gt;
[[Category:FFmpeg]]&lt;/div&gt;</summary>
		<author><name>Ce</name></author>
	</entry>
</feed>