Small FFmpeg Tasks: Difference between revisions
m (Small FFmpeg Tasks moved to Small Libav Tasks: Go Libav!) |
(Update for Libav.) |
||
Line 1: | Line 1: | ||
This page contains ideas for small, relatively simple tasks for the [[ | This page contains ideas for small, relatively simple tasks for the [[Libav]] project. People who might be interested in trying one of these tasks: | ||
* Someone who wants to contribute to | * Someone who wants to contribute to Libav and needs to find a well-defined task to start with | ||
* Someone who wishes to qualify for one of | * Someone who wishes to qualify for one of Libav's coveted [[Libav Summer Of Code|Summer of Code]] project slots | ||
* An existing | * An existing Libav 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. | 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 work on one of these tasks''', please take these steps: | ||
* Subscribe to the [https://lists. | * Subscribe to the [https://lists.libav.org/mailman/listinfo/libav-devel Libav 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 | ||
Line 15: | Line 15: | ||
=== Finish up a previous incomplete SoC project === | === Finish up a previous incomplete SoC project === | ||
Several SoC projects from previous years have not yet made it into | Several SoC projects from previous years have not yet made it into Libav. 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 [[Libav Summer Of Code]] overview page and look for the unfinished projects. | ||
=== Generic Colorspace system === | === Generic Colorspace system === | ||
Line 21: | Line 21: | ||
and generic simple conversion to other colorspaces. | and generic simple conversion to other colorspaces. | ||
''Does this have to do with revising | ''Does this have to do with revising Libav'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 ? | ''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 ? | ||
Line 40: | Line 40: | ||
samples on [[IVR]] page. | samples on [[IVR]] page. | ||
=== Implement a Vivo demuxer | === Implement a Vivo demuxer === | ||
Implement | Implement a 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. | This task corresponds to issue 99: http://roundup.libav.org/issue99 | ||
''I am ready to help out with understanding MPlayer's demuxer, esp. MPlayer API stuff if necessary. | ''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) | --[[User:Reimar|Reimar]] 15:46, 1 March 2008 (EST) | ||
=== Port missing demuxers from MPlayer | === 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. | 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. | ||
Line 57: | Line 57: | ||
=== Optimal Huffman tables for (M)JPEG === | === 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. | This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://roundup.libav.org/issue267 | ||
=== M95 Playback System === | === M95 Playback System === | ||
This task is to implement | 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. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples. | ||
=== BRP Playback System === | === BRP Playback System === | ||
This task is to implement | 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. [[BRP|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 === | === 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.libav.org/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. | |||
Discussion/patch: ([http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-March/065348.html reference]) | Discussion/patch: ([http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-March/065348.html reference]) | ||
=== HNM4 Playback System === | === HNM4 Playback System === | ||
This task is to implement | 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. [[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 | 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 === | === QuickTime Edit List Support === | ||
Implement edit list support in | 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. | ||
(patch was submitted to ffmpeg-devel , around 14 March 2009) | (patch was submitted to ffmpeg-devel , around 14 March 2009) | ||
=== Implement the Flash Screen Video codec version 2 === | === Implement the Flash Screen Video codec version 2 === | ||
Both a decoder and an encoder are missing, but would be nice to have. | |||
:''Daniel Verkamp is working on this'' | :''Daniel Verkamp is working on this'' | ||
Line 100: | Line 100: | ||
=== CJPG format === | === CJPG format === | ||
Extend | Extend the MJPEG decoder to handle the different frames/packing of CJPG. Samples at: http://roundup.libav.org/issue777 | ||
=== flip flag for upside-down codecs === | === flip flag for upside-down codecs === | ||
Line 117: | Line 117: | ||
=== lavf-based concatenation tool === | === lavf-based concatenation tool === | ||
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. | |||
=== cljr and vcr1 encoders === | === cljr and vcr1 encoders === | ||
Line 130: | Line 130: | ||
and V-codecs/yuv8/MAILTEST.AVI . | and V-codecs/yuv8/MAILTEST.AVI . | ||
it might decode with current pixfmts, | it might decode with current pixfmts, a sample commit is 9853bbb21a19d540850de60d3e9cf7c6ef9da7dc | ||
a sample commit for adding new input formats to swscale is 4884b9e50d416f84e64bfaf546a03e490cb83a2f | |||
the hunks 3 and 5 you do not need, they are optional special converters | |||
also the change to isSupportedOut() you do not need | |||
the hunks 3 and 5 you | |||
also the change to isSupportedOut() you | |||
above will add a new input format | above will add a new input format | ||
another example for adding an input format | another example for adding an input format is a43fb6b37efa5b01f2c9bdc414570691229bcfab | ||
=== Implement Phantom Cine demuxer and Bayer format support for swscale === | === Implement Phantom Cine demuxer and Bayer format support for swscale === | ||
Line 155: | Line 149: | ||
Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec | Add support for [[YCoCg]] and [[RGB]] encoded sources for the [[FFV1]] codec | ||
This would add a free lossless intra-frame RGB codec for all | 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) | ||
=== Metal Gear Solid Video format demuxer === | === 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 | 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 mailing list or IRC with questions. | ||
=== [[IFF#ANIM|IFF ANIM]] decoder === | === [[IFF#ANIM|IFF ANIM]] decoder === | ||
Line 164: | Line 158: | ||
=== [[CDXL]] decoder === | === [[CDXL]] decoder === | ||
http://roundup. | http://roundup.libav.org/issue1012 | ||
Write a decoder for this format using the information in the [[CDXL]] wiki page | Write a decoder for this format using the information in the [[CDXL]] wiki page | ||
Line 192: | Line 186: | ||
http://www.imagemagick.org | http://www.imagemagick.org | ||
http://www.graphicsmagick.org/formats.html | http://www.graphicsmagick.org/formats.html | ||
many image formats not | many image formats not supported yet. | ||
http://gpac.sourceforge.net/ | http://gpac.sourceforge.net/ | ||
Line 207: | Line 201: | ||
http://adplug.sourceforge.net/ | http://adplug.sourceforge.net/ | ||
http://adplug.sourceforge.net/library/ | http://adplug.sourceforge.net/library/ | ||
many OPL2/OPL3 audio formats not | many OPL2/OPL3 audio formats not supported yet. | ||
http://mikmod.raphnet.net/ | http://mikmod.raphnet.net/ | ||
http://mikmod.raphnet.net/#features | http://mikmod.raphnet.net/#features | ||
many music pattern formats not | many music pattern formats not supported yet. | ||
http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu | http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu | ||
Line 274: | Line 268: | ||
[[Category:FFmpeg]] | [[Category:FFmpeg]] | ||
[[Category:Libav]] |
Revision as of 08:33, 28 April 2011
This page contains ideas for small, relatively simple tasks for the Libav project. People who might be interested in trying one of these tasks:
- Someone who wants to contribute to Libav and needs to find a well-defined task to start with
- Someone who wishes to qualify for one of Libav's coveted Summer of Code project slots
- An existing Libav 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:
- Subscribe to the Libav development mailing list and indicate your interest
- Ask 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.
Finish up a previous incomplete SoC project
Several SoC projects from previous years have not yet made it into Libav. 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 Libav Summer Of Code overview page and look for the unfinished projects.
Generic Colorspace system
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 Libav'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. --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 ? --Baptiste Coudurier 00:30, 29 February 2008 (EST)
* Adding the YCoCg colorspace (with different sized planes) for RGB sourced pictures would be nice too. 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: http://wiki.multimedia.cx/index.php?title=DTS
Extend GIF Encoder and Decoder to support Animated GIFs
reverse engineer realplayer's ivr format and create a demuxer for it
samples on IVR page.
Implement a Vivo demuxer
Implement a demuxer for the Vivo file format. The best reference for understanding the format would be MPlayer's existing .viv demuxer.
This task corresponds to issue 99: http://roundup.libav.org/issue99
I am ready to help out with understanding MPlayer's demuxer, esp. MPlayer API stuff if necessary. --Reimar 15:46, 1 March 2008 (EST)
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.
- TiVo -- Jai Menon is working on this
- VIVO -- Daniel Verkamp has a patch for this
- SL support for MPEG-TS (anyone got samples?)
- 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.libav.org/issue267
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. 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. 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.libav.org/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: (reference)
HNM4 Playback System
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. The HNM4 page contains the specs necessary to complete this task and links to downloadable samples.
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)
Implement the Flash Screen Video codec version 2
Both a decoder and an encoder are missing, but would be nice to have.
- Daniel Verkamp is working on this
Add wma fixed point decoder back into libavcodec
http://svn.rockbox.org/viewvc.cgi/trunk/apps/codecs/libwma/ Rockbox's fixed-point WMA decoder was adapted from the decoder in libavcodec.
VC1 timestamps in m2ts
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.
FLIC work
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.
CJPG format
Extend the MJPEG decoder to handle the different frames/packing of CJPG. Samples at: http://roundup.libav.org/issue777
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://roundup.ffmpeg.org/roundup/ffmpeg/issue741
lavf-based concatenation tool
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.
cljr and vcr1 encoders
According to this: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-February/063555.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.
implement some colorspace fourcc/codecs
some colorspace formats were uploaded to http://samples.mplayerhq.hu/V-codecs/ including:
CYUV.AVI is 8 Bit Interleaved 4:2:2 a12v.avi is 4:2:2:4 10 Bit Interleaved auv2.avi is 4:2:2:4 8 Bit Interleaved and V-codecs/yuv8/MAILTEST.AVI .
it might decode with current pixfmts, a sample commit is 9853bbb21a19d540850de60d3e9cf7c6ef9da7dc
a sample commit for adding new input formats to swscale is 4884b9e50d416f84e64bfaf546a03e490cb83a2f
the hunks 3 and 5 you do not need, they are optional special converters also the change to isSupportedOut() you do not need above will add a new input format
another example for adding an input format is a43fb6b37efa5b01f2c9bdc414570691229bcfab
Implement Phantom Cine demuxer and Bayer format support for swscale
The format is described here: http://wiki.multimedia.cx/index.php?title=Phantom_Cine It will need support for Bayer -> RGB conversion in swscale to make the demuxer useful though.
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)
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 mailing list or IRC with questions.
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 .
CDXL decoder
http://roundup.libav.org/issue1012
Write a decoder for this format using the information in the CDXL wiki page Discussed for the 2009 SoC
port missing decoders/demuxers from other open source projects.
http://www.mega-nerd.com/libsndfile/#Features
Paris Audio File PAF 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://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.
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
port Ut Video decoder/encoder
gpl v2 decoder/encoder at wiki page
Sony psp demuxer
create/port a demuxer for the sony playstation portable format PMP.
- Samples: http://samples.mplayerhq.hu/playstation/psp/
- mplayer demuxer: http://mplayer-ww.svn.sourceforge.net/viewvc/mplayer-ww/trunk/mplayer/libmpdemux/demux_pmp.c
libswscale PAL8 output
See the thread: "[RFC] libswscale palette output implementation": http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/101397
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).
Add weighted motion compensation for B-frames in RV3/4
RealVideo 3 and 4 uses weighted motion compensation for B-frames (like H.264) but current code always uses simple averaging. Reverse-engineer weighted MC functions for B-frames and make RV3/4 decoder use them.
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.
rewrite rm demuxer
the rm demuxer was written before specs were available and has guesses, hacks and generally needs a cleanup/update.