SoC x264 2008

From VideoLAN Wiki
Revision as of 05:40, 14 March 2008 by Dark Shikari (talk | contribs) (mentor)
Jump to navigation Jump to search

x264 has loads of possibilities for SoC 2008 projects. Here's just a few I thought up with. I'm willing to mentor any reasonable project on x264 to the best of my ability. I'm being pretty conservative here, so I'm picking projects that are probably not at all too ambitious for a good student. If anything, I might be underestimating the amount of work that can be done!

Mentor (and author of this page): Dark Shikari

Introduction to x264

x264 is probably the most efficient, compression-wise, open source video encoder there is. It is quite competitive with commercial encoders, outclassing a large number of them. While not actually part of VLC or ffmpeg (it has its own codebase), it is a major library used by both, in addition to being a standalone encoder. As the only major open-source H.264 encoder, x264 has a near-complete monopoly on H.264 encoding in the consumer world, along with being used by many major corporations, including Facebook and Google. Some companies, such as Avail Media, have in the past offered bounties on improvements to the encoder.

x264 project ideas

This is not at all an exhaustive list.

Size key

Depends heavily on the skill and willingness to work of the student. An extremely dedicated and talented student might be able to implement MBAFF in a summer, but it is certainly not fair to expect such a thing from most students.

  • Very Large: Probably too large to completed in one summer.
  • Large: Probably the right size for a full-summer project.
  • Medium: Probably too small. Could be combined with another project, of course.
  • Small: A small project, but definitely useful, and could be part of a larger project.

Skills needed

These are required for all listed projects and probably anything not listed, too.

  • Basic C programming.
  • Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.


Fast inter refinement

Size: Medium to large. Description: Improve heuristics and decision-making for inter refinement to improve efficiency on non-insane encoding settings. This would involve various early termination heuristics along with methods of deciding which partition modes need to be searched while performing minimal actual searching on those partition modes. This would be similar to, but a vastly more in-depth analysis of what I proposed in my "Fast-Ref-Search" patch. Difficulty: Medium

Fast intra refinement

Size: Small to medium Description: Similar to above, but covering intra modes instead. Would probably involve considerable statistical analysis of intra mode data, along with creative solutions for improved RDO refinement. We already have some ideas on this one, but haven't implemented any of them. Difficulty: Medium

RDO B-frame decision

Size: Medium to large Description: x264's biggest weakness is its B-frame decision algorithm, which can often be extremely subtopimal, with OPSNR losses as high as 1db in some cases. Improving this would drastically increase the effectiveness of the encoder. Difficulty: Medium-high

Other possible projects

Anything here (and not here) can potentially be picked from at the request of a student.

  • Assembly optimizations of any sort
  • Extra skills: Assembly coding
  • Difficulty: Medium
  • Psychovisual optimizations for mode decision and quantization (e.g. QNS)
  • Extra skills: Creativity and perhaps some understanding of DCT/Fourier math.
  • Difficulty: Medium-high
  • Implementing MBAFF or PicAFF (potentially too difficult for a SoC project, however)
  • Difficulty: Very high
  • Fast RD optimization using heuristics
  • Extra skills: Reading lots of IEEE papers
  • Difficulty: Medium
  • Motion search improvements
  • Difficulty: Medium
  • Anything else that I think is reasonable, honestly. There's all sorts of ideas floating around, and these are just the ones off the top of my head.

Contact info

If you are interested, drop by #x264 or #x264dev on Freenode.