Difference between revisions of "Small FFmpeg Tasks"

From MultimediaWiki
Jump to navigation Jump to search
(waveformat extensible muxer support is available)
(remove Implemented stuff in FFmpeg)
 
(130 intermediate revisions by 18 users not shown)
Line 7: Line 7:


'''If you would like to work on one of these tasks''', please take these steps:
'''If you would like to work on one of these tasks''', please take these steps:
* Subscribe to the [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest
* Subscribe to the [https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki
* Ask [[User:Multimedia Mike|Multimedia Mike]] for a Wiki account so you can claim your task on this Wiki


'''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.
'''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.


=== Finish up a previous incomplete SoC project ===
The FFmpeg project always needs people to do the following tasks:
#Review bugs on the [https://ffmpeg.org/trac/ffmpeg/report/1 FFmpeg bug tracker]
##verifying bugreports are complete with 'ffmpeg -i' output
##making sure samples are mirrored/available
##verifying bugs against current git master
#Review patches posted to ffmpeg-devel mailing list
##also test to make sure they compile against git master and dont break 'make fate' / compilation
#Review documentation and update examples in documentation.
##updating and adding more information to the howto and api documents
##make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc


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 AMR-NB, Dirac, TS muxer, JPEG 2000.
== Programming Tasks ==


=== Generic Colorspace system ===
=== Finish up a previous incomplete SoC project ===
This task involves adding support more than 8 bits per component (Y on 10 bits, U on 10 bits, V on 10 bits for example)
and generic simple conversion to other colorspaces.
 
''Does this have to do with revising FFmpeg's infrastructure? If so, then it doesn't feel like a qualification task. If it's something simpler, then the vague description does not convey that simplicity. Please expound.'' --[[User:Multimedia Mike|Multimedia Mike]] 12:56, 25 February 2008 (EST)
 
''I don't think so, extending PixFmt to extended structure with finegrained description like depth, range values, colorspace, sample period, and write generic simple conversion from all formats to all others, like suggested by Michael on the mailing list. Conversion routine can be a good qualification task for video encoders/decoders. What do you think ?
--[[User:Bcoudurier|Baptiste Coudurier]] 00:30, 29 February 2008 (EST)
 
''* Adding the [[YCoCg]] colorspace (with different sized planes) for RGB sourced pictures would be nice too. [[User:Elte|Elte]] 07:15, 16 March 2009 (EDT)
 
=== Make the SoC dts encoder multichannel capable ===
Here is a skeleton for a dts encoder http://svn.mplayerhq.hu/soc/dcaenc/, currently it can only encode stereo streams.
The task is to extend it to support 5.1 channels also.


Specs and info can be found here:
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.
http://wiki.multimedia.cx/index.php?title=DTS


=== GIF LZW Encoder and extend Encoder and Decoder to support Animated GIFs ===
=== Add code to validate get_buffer usage of decoders ===
Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests.
E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect).
If the decoder does not use reget_buffer, always return a buffer initialized with random data.
If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible.
Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used.
Probably more things that could be done.


Lzw encoder is already used for TIFF, it must be extended to support GIF flavor.
=== Port missing demuxers from MPlayer ===
 
:''Claimed by Samuel Simon''
 
=== Implement a Vivo demuxer for FFmpeg ===
Implement an FFmpeg demuxer for the [[Vivo]] file format. The best reference for understanding the format would be MPlayer's [http://svn.mplayerhq.hu/mplayer/trunk/libmpdemux/demux_viv.c?view=markup existing .viv demuxer].
 
This task corresponds to issue 99: http://roundup.ffmpeg.org/roundup/ffmpeg/issue99
 
''I am ready to help out with understanding MPlayer's demuxer, esp. MPlayer API stuff if necessary.
--[[User:Reimar|Reimar]] 15:46, 1 March 2008 (EST)
:Daniel Verkamp is currently working on this task as a qualification for Google SoC 2009 --[[User:Ce|Ce]] 05:30, 21 March 2009 (EDT)
 
=== Port missing demuxers from MPlayer to FFmpeg ===
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.
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.


# TiVo -- ''Jai Menon is working on this''
# TiVo --
# VIVO -- ''Daniel Verkamp has a patch for this''
# SL support for MPEG-TS (anyone got samples?)
# XMMS
# MNG -- ''Paul B Mahol is working on this''
# libnemesi (the RTSP/RTP client library)
# SL support for MPEG-TS
# MNG
 
=== Optimal Huffman tables for (M)JPEG ===
This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://roundup.ffmpeg.org/roundup/ffmpeg/issue267
:Indrani Kundu Saha is currently working on this task as a qualification for Google SoC 2009 --[[User:Ce|Ce]] 19:41, 13 March 2009 (EDT)
 
=== YOP Playback System ===
This task is to implement an FFmpeg playback subsystem for [[Psygnosis YOP]] files. This will entail writing a new file demuxer and video decoder, both of which are trivial by FFmpeg standards. [[Psygnosis YOP|The Psygnosis YOP page]] contains the specs necessary to complete this task and points to downloadable samples.


=== M95 Playback System ===
=== M95 Playback System ===
This task is to implement an FFmpeg playback subsystem for [[M95]] files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which are trivial by FFmpeg standards. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.
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.
:''Claimed by Tomren


=== BRP Playback System ===
=== BRP Playback System ===
This task is to implement an FFmpeg 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 trivial by FFmpeg standards. [[BRP|The BRP page]] contains the specs necessary to complete this task and points to downloadable samples for both known variations.
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.
 
=== 16-bit Interplay Video Decoder ===
FFmpeg already supports [[Interplay MVE]] files with [[Interplay Video|8-bit video data]] inside. This task involves supporting 16-bit video data. The video encoding format is mostly the same but the pixel size is twice as large. Engage the ffmpeg-devel list to discuss how best to approach this task.


=== 16-bit VQA Video Decoder ===
=== 16-bit VQA Video Decoder ===
FFmpeg already supports Westwood [[VQA]] files. However, there are 3 variations of its custom video codec. The first 2 are supported in FFmpeg. This task involves implementing support for the 3rd variation. Visit the VQA samples repository: http://samples.mplayerhq.hu/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.
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.


:''Claimed by Deep Pal/The Deep Explorer ([http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-March/065522.html reference])''
Discussion/patch:
 
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433
=== HNM4 Playback System ===
http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308
This task is to implement an FFmpeg playback subsystem for [[HNM4]] variant of the [[HNM]] format. This will entail writing a new file demuxer and video decoder, both of which are trivial by FFmpeg standards. [[HNM4|The HNM4 page]] contains the specs necessary to complete this task and links to downloadable samples.


=== Apple RPZA encoder ===
=== Apple RPZA encoder ===
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 "[[Interesting Patches]]" page. This qualification task involves applying that patch so that it can compile with current FFmpeg SVN code and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.
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 "[[Interesting Patches]]" 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.
:''Claimed by Jai Menon''


=== QuickTime Edit List Support ===
=== QuickTime Edit List Support ===
Implement edit list support in FFmpeg's 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.
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.


:Krishna Gadepalli is working on this (patch submitted to ffmpeg-devel , currently in review) --[[User:Compn|Compn]] 10:35, 14 March 2009 (EDT)
(patch was submitted to ffmpeg-devel , around 14 March 2009)  


=== Implement the Flash Screen Video codec version 2 ===
=== merge all fixed point decoders back into libavcodec ===
FFmpeg is missing both a decoder and an encoder. Would be nice to have that.
http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.


:''Daniel Verkamp is working on this''
=== flip flag for upside-down codecs ===


=== Add wma fixed point decoder back into libavcodec ===
<pre>about the flip, a patch that decodes images fliped when
http://svn.rockbox.org/viewvc.cgi/trunk/apps/codecs/libwma/
codec_tag == ff_get_fourcc("GEOX") is welcome.
Rockbox's fixed-point WMA decoder was adapted from the decoder in libavcodec.
its a metter of 2lines manipulating data/linesize of imgages after
get_buffer() or something similar
[...]
--
Michael    GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
</pre>
more info:
http://ffmpeg.org/trac/ffmpeg/ticket/317
 
=== support for [[YCoCg]]/RGB colorspace in FFV1 ===
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec


=== RealAudio 14.4 encoder ===
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)
FFmpeg contains a decoder for [[RealAudio 14.4]], a farily simple integer CELP codec.  Write an encoder.  This would be a good qualification task for anyone interested in working on AMR, Speex, or sipr.


=== VC1 timestamps in m2ts ===
=== [[IFF#ANIM|IFF ANIM]] decoder ===
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 .


Codec copy of VC1 from m2ts currently doesn't work. Either extend the VC1 parser to output/fix timestamps, or fix the timestamps from m2ts demuxing.




=== port missing decoders/demuxers from other open source projects. ===
http://www.mega-nerd.com/libsndfile/#Features
GNU Octave 2.0 MAT4
GNU Octave 2.1 MAT5
Designer II SD2
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz
http://www.hawksoft.com/hawkvoice/
HVDI_VOICE_DATA- packet
[[GSM]]
LPC
CELP
LPC10


=== FLIC work ===
http://sourceforge.net/projects/vgmstream
150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt


Revise the [[Flic Video]] decoder at libavcodec/flicvideo.c to support video transported in AVI or MOV files while making sure that data coming from the usual FLI files still works. 'AFLC' and 'flic' FourCC samples are linked from the [[Flic Video]] page.
http://www.imagemagick.org
http://www.graphicsmagick.org/formats.html
many image formats not supported yet.


http://gpac.sourceforge.net/
[[MPEG-4 BIFS]]
3GPP DIMS
[[LASeR]]
SAF
SVG
[[Synchronized Multimedia Integration Language|SMIL]]
VRML
X3D
XMT


http://adplug.sourceforge.net/
http://adplug.sourceforge.net/library/
many OPL2/OPL3 audio formats not supported yet.


=== CorePNG Decoder ===
http://mikmod.raphnet.net/
http://mikmod.raphnet.net/#features
many music pattern formats not supported yet.


Extend FFmpeg's PNG decoder to handle the difference frames and [[YUV]] colorspace added in [[CorePNG]]. Sample at [http://samples.mplayerhq.hu/V-codecs/PNG1/ http://samples.mplayerhq.hu/V-codecs/PNG1/]
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu
:''Claimed by Thilo Borgmann''
AY
GBS
GYM
HES
KSS
NSF, NSFE
SAP
[[SNES-SPC700 Sound Format]]
VGM, VGZ


=== Extend PNG Decoder / swscale ===
=== vloopback output support ===


get this png working in ffpng: http://roundup.ffmpeg.org/roundup/ffmpeg/issue813 .
vloopback is a linux kernel device which allows to create a virtual video device where
programs can write, and can be accessed as a normal video device:
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice


http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-February/063450.html
This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a
program reading from such device (e.g. skype, a voip client etc.).


This does more than just simple rgb48 input also it does not try to preserve
An example of a program which uses vloopback:
the 16bit per component.
http://www.ws4gl.org/
anyway, if someone wants to do something in this direction like trying to push
this patch in (its yuv2rgb part needs to be adapted to what we have in svn
now) or try to do rgb48 input with preserving of 16bits per component then
IMHO thats a valid qualification task


=== CJPG format ===


Extend FFmpeg's MJPEG decoder to handle the different frames/packing of CJPG. Samples at: http://roundup.ffmpeg.org/roundup/ffmpeg/issue777
=== Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter ===


=== Optimize Theora Decoder ===
There are plenty programs providing their own filters, many of them may be easily ported to the
superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries
(e.g. opencv, libgimp, libshowphoto, libaa).


speed up the Theora decoder. [http://www.archive.org/download/AlternativeFreedom/alternative_freedom.ogg 720:480 sample] hits 100% cpu on a p4 1.5ghz.
=== rar/zip/gz/bz2 etc demuxer ===
:''Do you have any specific optimizations tips? I like these small tasks to present a clearer jumping-off point. --[[User:Multimedia Mike|Multimedia Mike]] 18:57, 22 December 2008 (EST)''
there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.
::''did theora make use of the mmx/sse functions of ffvp3? i was looking at the xiph GSOC page which mentioned a similar task. --[[User:Compn|Compn]] 21:17, 22 December 2008 (EST)''
::''The major optimization I can think of is reworking coefficient decoding to avoid the continue in unpack_vlcs() (basically by having a list of coefficient VLCs for each position rather than for each block, then decoding them when actually rendering the block.) Unfortunately this also requires reworking render_slice() and reverse_dc_prediction() quite significantly which is why I haven't done it yet. [[User:Yuvi|Yuvi]] 18:25, 23 December 2008 (EST)''


=== Less common AAC decoder features ===


=== flip flag for upside-down codecs ===
Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.


<pre>about the flip, a patch that decodes images fliped when
=== arithmetic decoding (and encoding) for mjpeg ===
codec_tag == ff_get_fourcc("GEOX") is welcome.
Following marker codes are not supported by our mjpeg decoder:
its a metter of 2lines manipulating data/linesize of imgages after
DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.
get_buffer() or something similar
*any samples?
[...]
--
Michael    GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
</pre>
more info:
http://roundup.ffmpeg.org/roundup/ffmpeg/issue741


=== lavf-based concatenation tool ===


Unless we have multiple files input in FFmpeg, it would be nice to have some libavformat-based tool that would extract frames from multiple files (possible different containers as well) and put them into single one.


:''Claimed by Geza Kovacs''
=== adobe http f4f segmented fragmentation dynamic streaming format ===
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


=== cljr and vcr1 encoders ===
=== get 3IV1 decoder working and benchmark ===
According to this: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-February/063647.html both of the encoders are disabled, and won't compile if enabled. Michael would prefer to keep them around, and have someone grow them into full encoders.
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.


=== implement some colorspace fourcc/codecs ===
== Reverse Engineering Tasks ==
some colorspace formats were uploaded to http://samples.mplayerhq.hu/V-codecs/
including:
2vuy.avi
CYUV.AVI
P422.AVI
UYNV.AVI
UYNY.avi
V422.AVI
YUNV.AVI
a12v.avi
auv2.avi
and V-codecs/yuv8/MAILTEST.AVI .


step by step tutorial for adding new input formats to swscale:
=== Demuxer for csf format and video codec ===
cd mplayer/libswscale/
This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060
svn di -r20426:20427
the hunks 3 and 5 you dont need, they are optional special converters
also the change to isSupportedOut() you dont need
above will add a new input format


another example for adding an input format
=== pick a random binary codec from mplayer ===
cd mplayer/libswscale/
[[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.
svn di -r20604:20605


=== Create a libamr compatible library of the Android amr codec ===
=== emblaze demuxer/decoder from java code ===
http://android.git.kernel.org/?p=platform/external/opencore.git;a=tree;f=codecs_v2/audio/gsm_amr/amr_nb;h=4bac3ee5bd1ae8b6955f2d0bdac7de43c0d985c1;hb=HEAD
samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/


=== audio sample suite ===
check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html


=== Make the rtp demuxer support rtcp BYE packets ===
== Non-Programming Tasks ==
rtcp BYE (203) packets are sent from the sender to the receiver to notify that a stream has ended.
FFmpeg currently ignores them.


Sample url rtsp://media.lscube.org/tests/tc.mov
=== Check Linux distributions for patches to ffmpeg ===


:Kevin DuBois is working on this GSoC qualification task
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.


=== Implement the RTP/Theora payload ===
The Theora payload is currently still a [http://svn.xiph.org/trunk/theora/doc/draft-ietf-avt-rtp-theora-00.txt draft]. Yet, it would be nice to support this payload. As per above, the [http://www.lscube.org/projects/feng feng RTSP server] supports the Theora RTP payload draft and can be used for testing your implementation of the draft, or you can use the online feng test-server (rtsp://media.lscube.org:554/tests/rms_profumo_1.ogv).


Most likely, your implementation will consist of a file called rtp_theora.c in libavformat/, which will read the header packets available in the SDP (the "configuration" piece in the fmtp: line) and which parses individual incoming RTP packets from the RTSP demuxer (minus the generic RTP header bits). It should output Theora-encoded frames which can subsequently be decoder by the Theora decoder in libavcodec/.
=== improve layout and accessability of ffmpeg website ===


:''Claimed by Ilya S. Smelykh''
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.


=== cdg decoder + demuxer ===
create a [[CD Graphics]] decoder/demuxer. implementations: http://www.kibosh.org/pykaraoke/ or http://users.fbihome.de/~glogow/ or http://miageprojet.unice.fr/twiki/bin/view/Fun/JavaKarPlayer or http://www.kibosh.org/cdgtools/ or http://code.google.com/p/cdg2video/ (which uses ffmpeg). [http://git.videolan.org/?p=vlc.git;a=blob;f=modules/codec/cdg.c vlc implementation]


=== support for [[YCoCg]]/RGB colorspace in FFV1 ===
=== restore and update compatability page on ffmpeg website ===
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec


This would add a free lossless intra-frame RGB codec for all by FFmpeg supported platforms (most important MacOS + Windows) which is often asked for video editing in video forums (e.g. slashcam.de)
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).


=== Metal Gear Solid Video format demuxer ===
Write a demuxer to play video files harvested from the game Metal Gear Solid: The Twin Snakes. The format is described on the wiki page [[Metal Gear Solid VP3]] (which also contains links to samples). This page is based on observations and conjecture, so remember to engage the ffmpeg-devel mailing list with questions.


=== [[IFF#ANIM|IFF ANIM]] decoder ===
=== contact large ffmpeg users for broken / unplayable samples ===
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 .
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.


=== [[CDXL]] decoder ===
=== review sample request error messages ===
Write a decoder for this format using the information in the [[CDXL]] wiki page
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
:Erion Omeri is currently working on this task as a qualification for Google SoC 2009 --[[User:Ce|Ce]] 10:42, 6 April 2009 (EDT)


=== Parse TrueHD and AC3 out of Blu-Ray m2ts files ===
Make libavformat properly parse this sample:
http://madshi.net/hd_dolby_true_hd.m2ts
Track #0.1 has TrueHD and AC3 interleaved. Check if the demuxer (libavformat/mpegts.c) is able to cleanly separate TrueHD and AC3. If that's impossible, call both TrueHD and AC3 parsers in a way that properly splits the packets. Use eac3to to see the expected split output.


=== [[QCP]] demuxer ===
=== write bluray and 3d howtos ===
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]]
[[How to make a 3d movie with ffmpeg]]


Write a demuxer for these cell phone recordings using the RFC and samples linked on the wiki page.


=== [[Apple Core Audio Format]] demuxer ===


Write a demuxer for the caf file format. Specs / samples linked on the wiki page.
implementation: http://www.mega-nerd.com/libsndfile/


=== port missing decoders/demuxers from other open source projects. ===
=== write ipad/iphone/ios howto ===
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.


http://www.mega-nerd.com/libsndfile/#Features
=== talk to downstream ===
Paris Audio File PAF
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.
IRCAM SF
GNU Octave 2.0 MAT4
GNU Octave 2.1 MAT5
Portable Voice Format PVFSound
Designer II SD2
samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz


http://sox.sourceforge.net/Docs/Features
examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.
[[SoX native intermediate format]]


http://www.hawksoft.com/hawkvoice/
==== migrate bugs from other projects ====
HVDI_VOICE_DATA- packet
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.
[[GSM]]
LPC
CELP
LPC10


http://sourceforge.net/projects/vgmstream
==== review any local patches ====
150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt
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.




[[Category:FFmpeg]]
[[Category:FFmpeg]]

Latest revision as of 09:00, 22 February 2017

This page contains ideas for small, relatively simple tasks for the FFmpeg project. People who might be interested in trying one of these tasks:

  • Someone who wants to contribute to FFmpeg and needs to find a well-defined task to start with
  • Someone who wishes to qualify for one of FFmpeg's coveted Summer of Code project slots
  • 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

For other tasks of varying difficulty, see the Interesting Patches page.

If you would like to work on one of these tasks, please take these steps:

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.

The FFmpeg project always needs people to do the following tasks:

  1. Review bugs on the FFmpeg bug tracker
    1. verifying bugreports are complete with 'ffmpeg -i' output
    2. making sure samples are mirrored/available
    3. verifying bugs against current git master
  2. Review patches posted to ffmpeg-devel mailing list
    1. also test to make sure they compile against git master and dont break 'make fate' / compilation
  3. Review documentation and update examples in documentation.
    1. updating and adding more information to the howto and api documents
    2. make a guide how to embed ffmpeg into various programming languages, be it c++, java, mono, c#, etc

Programming Tasks

Finish up a previous incomplete SoC project

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.

Add code to validate get_buffer usage of decoders

Change the default_get_buffer etc. functions to enforce the minimum guarantees the decoder requests. E.g. if a decoder does not set FF_BUFFER_HINTS_READABLE, return a buffer without read permissions (using e.g. mprotect). If the decoder does not use reget_buffer, always return a buffer initialized with random data. If the decoder does not set FF_BUFFER_HINTS_PRESERVE, always destroy the buffer contents as soon as possible. Make reget_buffer always fail if FF_BUFFER_HINTS_REUSABLE was not used. Probably more things that could be done.

Port missing demuxers from MPlayer

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.

  1. TiVo --
  2. SL support for MPEG-TS (anyone got samples?)
  3. MNG -- Paul B Mahol is working on this

M95 Playback System

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. The M95 page contains the specs necessary to complete this task and points to downloadable samples.

BRP Playback System

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. The BRP page contains the specs necessary to complete this task and points to downloadable samples for both known variations.

16-bit VQA Video Decoder

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 page should link to all the details you need to support this format.

Discussion/patch: http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/89902/focus=90433 http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/173307/focus=173308

Apple RPZA encoder

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 "Interesting Patches" 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.

QuickTime Edit List Support

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 Xine demuxer has support for this, it might be useful for hints.

(patch was submitted to ffmpeg-devel , around 14 March 2009)

merge all fixed point decoders back into libavcodec

http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs Rockbox's fixed-point decoders are based on decoders from libavcodec.

flip flag for upside-down codecs

about the flip, a patch that decodes images fliped when
codec_tag == ff_get_fourcc("GEOX") is welcome.
its a metter of 2lines manipulating data/linesize of imgages after
get_buffer() or something similar
[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

more info: http://ffmpeg.org/trac/ffmpeg/ticket/317

support for YCoCg/RGB colorspace in FFV1

Add support for YCoCg and RGB encoded sources for the FFV1 codec

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)

IFF ANIM decoder

Modify libavformat/iff.c to handle this chunk and write a decoder for the format. The wiki page at 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 .


port missing decoders/demuxers from other open source projects.

http://www.mega-nerd.com/libsndfile/#Features

GNU Octave 2.0 MAT4
GNU Octave 2.1 MAT5
Designer II SD2

samples are here: http://www.mega-nerd.com/tmp/SoundFileCollection-20050711-0902.tgz

http://www.hawksoft.com/hawkvoice/

HVDI_VOICE_DATA- packet
GSM
LPC
CELP
LPC10

http://sourceforge.net/projects/vgmstream

150+ formats: http://vgmstream.svn.sourceforge.net/viewvc/vgmstream/readme.txt

http://www.imagemagick.org http://www.graphicsmagick.org/formats.html

many image formats not supported yet.

http://gpac.sourceforge.net/

MPEG-4 BIFS
3GPP DIMS
LASeR
SAF
SVG
SMIL
VRML
X3D
XMT

http://adplug.sourceforge.net/ http://adplug.sourceforge.net/library/

many OPL2/OPL3 audio formats not supported yet.

http://mikmod.raphnet.net/ http://mikmod.raphnet.net/#features

many music pattern formats not supported yet.

http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu

AY
GBS
GYM
HES
KSS
NSF, NSFE
SAP
SNES-SPC700 Sound Format
VGM, VGZ

vloopback output support

vloopback is a linux kernel device which allows to create a virtual video device where programs can write, and can be accessed as a normal video device: http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice

This would allow to write the ffmpeg output to a vloopdevice and be displayed by some a program reading from such device (e.g. skype, a voip client etc.).

An example of a program which uses vloopback: http://www.ws4gl.org/


Port video filters from MPlayer/VLC/Mjpegtools/Effectv/etc etc to libavfilter

There are plenty programs providing their own filters, many of them may be easily ported to the superior ;-) framework of libavfilter. Also may be possible to create wrappers around other libraries (e.g. opencv, libgimp, libshowphoto, libaa).

rar/zip/gz/bz2 etc demuxer

there are still compressed files out there (zipped raw wav, multi-rar'ed videos etc). create a decompression demuxer for them.

Less common AAC decoder features

Add support to the AAC decoder for object type ER AAC LC or AAC LC 960.

arithmetic decoding (and encoding) for mjpeg

Following marker codes are not supported by our mjpeg decoder: DAC, SOF9, SOF10, SOF11, SOF13, SOF14 and SOF15.

  • any samples?


adobe http f4f segmented fragmentation dynamic streaming format

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

get 3IV1 decoder working and benchmark

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.

Reverse Engineering Tasks

Demuxer for csf format and video codec

This is partially analyzed in http://ffmpeg.org/trac/ffmpeg/ticket/1060

pick a random binary codec from mplayer

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.

emblaze demuxer/decoder from java code

samples and java decoder: http://samples.mplayerhq.hu/internets/emblaze/

audio sample suite

check and add support for these old audio formats: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/index.html

Non-Programming Tasks

Check Linux distributions for patches to ffmpeg

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.


improve layout and accessability of ffmpeg website

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.


restore and update compatability page on ffmpeg website

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).


contact large ffmpeg users for broken / unplayable samples

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.

review sample request error messages

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


write bluray and 3d howtos

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 How to make a 3d movie with ffmpeg



write ipad/iphone/ios howto

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.

talk to downstream

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.

examples include videolan, perian, mplayer, xbmc, ffdshow-tryouts, gstreamer.

migrate bugs from other projects

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.

review any local patches

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.