FFmpeg Summer of Code 2013: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
(→‎GSoC Ideas: GSoC ideas -> GSoC Task proposal ideas)
(→‎Libavfilter extension: Extend/add more ideas)
Line 128: Line 128:
'''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.
'''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.


=== Libavfilter extension ===
=== Misc Libavfilter extension ===


'''Description:''' Libavfilter is the FFmpeg filtering library. It currently supports audio and video filtering and generation support. This work may focus on porting or writing new audio and video filters from scratch.  
'''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.  


Candidate filters may be the remaining MPlayer filters currently supported through the mp wrapper, libaf MPlayer filters, and filters from other frameworks (e.g. 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.
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.
 
Some ideas for more filters:
* a frequency filtering domain filter relying on the FFT utils in libavcodec
* 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
* a lua scripting filter, which allows to implement filtering custom logic in lua


For more ideas check:
For more ideas check:
Line 140: Line 145:


'''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.
'''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.
'''Qualification task:''' write or port one or more filter


'''Mentor:''' Stefano Sabatini (''saste'' on IRC).
'''Mentor:''' Stefano Sabatini (''saste'' on IRC).


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

Revision as of 11:10, 22 February 2013

FFmpeg Summer of Code Ideas List

Proposing Ideas

If you have a project idea please contact a developer first at the #ffmpeg-devel IRC channel on Freenode or via the ffmpeg-devel mailing list. A good source of ideas is the FFmpeg bug tracker and FFmpeg Summer of Code 2012 Ideas List.

When adding an idea follow this template for consistency:

Example Title

Description: A few sentences or a short paragraph describing the task.

Expected results: Bulleted list or paragraph describing what the student is expected to achieve.

Prerequisites: Skills or knowledge required by student.

Mentor: List mentor and backup mentor if there is one and contact info such as IRC name or email address.

GSoC task proposal ideas

Audio codecs

AAC

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.

  • AAC LD decoder
  • AAC BSAC decoder: This has already been started, but the existing decoder still fails on many samples
  • AAC SSR decoder
  • AAC 960/120 MDCT window
  • AAC multi-channel encoding

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.

DTS / DCA

Description: FFmpeg contains a DTS decoder and an experimental DTS encoder. Both are missing some features.

  • DTS-HD decoder: A possible qualification task is to implement ticket #1920
    • Add support for mixed Core + DTS-HD stream structure
    • Add support for X96 extension (96khz)
    • Add support for XLL extension (lossless)
    • Add support for pure DTS-HD streams that do not contain a DTS core
    • Add support for multiple assets
  • DTS decoder improvements
    • Add support for LBR extension
  • DTS encoder improvements

MPEG-4 ALS encoder

Description: An ALS decoder was implemented several years ago, an encoder is still missing.

TrueHD encoder

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.

Opus decoder

Description: Opus decoding is currently supported through the external libopus library

  • Write a native decoder, continue working on the existing unfinished implementation

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.

Video codecs

GotoMeeting Decoder

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.

HEVC / H265

Description: The specification was finished, FFmpeg needs a decoder for this new format.

  • Write a basic decoder supporting I, P, and, only if time permits, B slices.
  • It does not need to be ASM/SIMD optimized but its high level structure must permit such optimizations to be easily added later.

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.

H264 MVC

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. As qualification you have to do some work that demonstrates your understanding of MVC and that is a subpart of the whole MVC implementation.

VC-1 interlaced

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.

  • Implement missing interlace features
  • Make more reference samples bit-exact

As a qualification task, you should try to find a bug in the current decoder implementation and fix it.

Animated Portable Network Graphics (APNG)

Description: FFmpeg currently does not support Animated PNGs.

Specification: https://wiki.mozilla.org/APNG_Specification

Expected results:

  • APNG demuxer
    • implement robust probing, so that normal PNG images are not misdetected as APNG animations
    • splits stream into sensible packets (so they can be easily reused in APNG muxer)
    • survives fuzzing (zzuf)
    • add FATE coverage, coverage should be at least 70%
    • test code under valgrind so not invalid reads/writes happen
  • APNG decoder
    • use existing PNG decoder code (write decoder in same file)
    • implement parsing of all APNG chunks (acTL, fcTL, fdAT)
    • error handling
    • survives fuzzing (zzuf)
    • add test for FATE, coverage should be at least 75%
    • CRC checksum validation
    • test code under valgrind so not invalid reads/writes happen
  • APNG muxer && APNG encoder
    • write compliant files, make sure they play correctly in major web browsers that support APNG

Mentor: Paul B Mahol

Prerequisites: C coding skills, familiarity with git/source code control systems.

JPEG 2000

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. Work on an issue as a qualification task to show that you are capable of improving the codec implementation.

VP7

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.

FFplay

glplay

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.

Misc Libavfilter extension

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.

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.

Some ideas for more filters:

  • a frequency filtering domain filter relying on the FFT utils in libavcodec
  • 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
  • a lua scripting filter, which allows to implement filtering custom logic in lua

For more ideas check: trac libavfilter tickets.

Expected results: Write or port audio and video filters and possibly fix/extend libavfilter API and design when required.

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.

Qualification task: write or port one or more filter

Mentor: Stefano Sabatini (saste on IRC).