<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dark+Shikari</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dark+Shikari"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Dark_Shikari/"/>
	<updated>2026-11-04T15:48:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22756</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22756"/>
		<updated>2012-06-25T20:51:29Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do. It&#039;s organized into sections covering various parts of x264. &lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk]. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC. There are no experience or educational requirements for doing any of this, though you are expected to know how to code. &lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties. This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there. If your company is interested in offering a bounty, drop by IRC. &lt;br /&gt;
&lt;br /&gt;
=== Motion Estimation ===&lt;br /&gt;
&lt;br /&gt;
*Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs. The downside is we won&#039;t be able to use SAD_X4 anymore. &lt;br /&gt;
*(T)ESA is currently wrong for motion searches done on weightp duplicates. This effect is miniscule, but it still should be fixed. &lt;br /&gt;
*Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA. It might also help regularize motion.&lt;br /&gt;
**I have a patch for this in the lookahead, but it didn&#039;t help much, since it only added predictors.&lt;br /&gt;
*Somehow take into account the effect of motion vector decision on future blocks. &lt;br /&gt;
**Hierarchical motion estimation &lt;br /&gt;
**Approximations from lookahead MVs &lt;br /&gt;
**Iterative ME (as per Snow) &lt;br /&gt;
**Trellis motion estimation &lt;br /&gt;
*We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search. &lt;br /&gt;
**But how do we know which ones we can afford to skip, and when? &lt;br /&gt;
**Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either. &lt;br /&gt;
*libtheora does fullpel motion estimation on the source pixels instead of decoded pixels. Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs? &lt;br /&gt;
*With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search? &lt;br /&gt;
**This seems to be awful from my testing, but maybe there&#039;s something we can do?&lt;br /&gt;
*Try sub-8x8 partitions in B-frames. Is it at all useful? &lt;br /&gt;
*Try bidir motion estimation for fullpel. That is, considering L1&#039;s MV when doing L0 (or vice versa). Xvid does this. How much does it help? &lt;br /&gt;
*Fullpel chroma ME? &lt;br /&gt;
**For TESA?&lt;br /&gt;
&lt;br /&gt;
=== Intra Analysis ===&lt;br /&gt;
&lt;br /&gt;
*Make the early terminations smarter. Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
**With the SSSE3-based fast intra analysis, we no longer do any early terminations for different modes, at least in SAD/SATD analysis.  But there might still be improvements to be made.&lt;br /&gt;
*SAD (subme 1) i8x8 vs i4x4 decision is a bit bad. Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
=== Mode Decision ===&lt;br /&gt;
&lt;br /&gt;
*Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
**A while back, I tried using weaker motion searches on older refs.  This helped a bit for speed-vs-compression, but is ironically the opposite of what one wants; older refs will be harder to find good MVs in, and therefore really need better searches.&lt;br /&gt;
*On extremely fast encoding settings, fast skip is actually kind of slow. But anything dumber (e.g. SAD) is completely useless. Is there some better balance that can be achieved here?&lt;br /&gt;
**Can we do something smart by analyzing fenc?  It&#039;s impossible to tell whether a block is motionless by looking at fdec, but looking at the source pixels is useful.  There&#039;s still complexity such as lower-QP-than-reference though.&lt;br /&gt;
*See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
**I tried correcting weightp references for deblock RDO, but it didn&#039;t help.&lt;br /&gt;
**I tried chroma, too, and again, it didn&#039;t help measurably.&lt;br /&gt;
*Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision? At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
**Doing a merged 4x4/8x8 SATD would help here, but would require new asm.&lt;br /&gt;
*Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD? RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle. &lt;br /&gt;
*Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct? [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality). &lt;br /&gt;
*With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
*How about saving CABAC state between each trellis call, rather than basing them all on the CABAC state at the start of the macroblock?&lt;br /&gt;
*Make subme=11 not do thresholding in qpel RD and bidir RD.&lt;br /&gt;
&lt;br /&gt;
=== Psy ===&lt;br /&gt;
&lt;br /&gt;
*Psy-RD is a hack. It works, but it&#039;s a hack. If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results. This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric. Is there a way to make it better? &lt;br /&gt;
*Should RD be linear at all? Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see. &lt;br /&gt;
*Psy-trellis (and maybe psy-RD?) are too strong at very high QPs. &lt;br /&gt;
*Psy-trellis should be merged with Psy-RD. There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed. &lt;br /&gt;
*RD should take into account local variance. &lt;br /&gt;
*Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis. &lt;br /&gt;
*Lambda should be picked independent of quantizer (i.e. with greater precision). &lt;br /&gt;
*Classic problem: a block is mostly high complexity but has a small area of low complexity. How do we judge whether that area is important? Good example: sharp text on background with film grain; grain gets blurred out because of the text. &lt;br /&gt;
**If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou). &lt;br /&gt;
*Should motion estimation lambda be as high as it is at very high quantizers? There&#039;s some value to capturing &amp;quot;true motion&amp;quot;... &lt;br /&gt;
*Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept. Except for local illumination changes. Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
=== Lookahead ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039; &lt;br /&gt;
*Temporal MV predictors in lookahead? There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search. &lt;br /&gt;
*Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)? If so, should it take into account estimated ratecontrol quantizer, too? If so, how?&lt;br /&gt;
*B-adapt 1 could be made quite a bit better -- it&#039;s important because it&#039;s used on all the fast speed modes (and even the defaults).  &amp;quot;Harbour 4CIF&amp;quot; is a good example of a clip where it does noticeably badly.&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
*CAVLC &amp;quot;trellis&amp;quot; is a hack. It works, but it&#039;s a hack. Make it better. See the TODOs in encoder/rdo.c.&lt;br /&gt;
**This is doubly important now, as CABAC trellis has been made way faster, but CAVLC hasn&#039;t.  Many of the CABAC trellis improvements can be backported.&lt;br /&gt;
*There&#039;s room for something between trellis and deadzone in terms of complexity. libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer. This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis. A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
**How useful is this with an entropy coder that doesn&#039;t really bias towards zero-runs, as in CABAC?&lt;br /&gt;
*Floyd-Steinberg for quantization? Try pushing quantization error to nearby DCT coefficients. Should this go from high to low or low to high? &lt;br /&gt;
*Energy-preserving quantizer -- maintain L1 (or maybe L2? I&#039;m not sure) energy. Should we maintain it in the spatial domain (post-iDCT) or residual domain? Probably the former. &lt;br /&gt;
**See [https://github.com/saintdev/x264-devel/compare/enquant-base...energy-quant saintdev&#039;s github] for one attempt at this.&lt;br /&gt;
*Decimation is currently just a ripoff of the JVT recommended algorithm. Can we do this more optimally? With RD?&lt;br /&gt;
&lt;br /&gt;
=== Transform ===&lt;br /&gt;
&lt;br /&gt;
*Analyze the error characteristics of the fDCT. Is there any way to make it more accurate without much speed loss? Particularly at extremely low quantizers, this might help. &lt;br /&gt;
*Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter. See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
=== Interlacing ===&lt;br /&gt;
&lt;br /&gt;
*Lookahead currently blend-deinterlaces to get the lowres. Is this a good idea? Is there something better that isn&#039;t much slower? &lt;br /&gt;
*Constrained intra + adaptive MBAFF. Does anyone care about this? &lt;br /&gt;
*PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
=== Weighted Prediction ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Make weightp work with interlacing. Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039; &lt;br /&gt;
*Finish K-means decision for weightp. Talk to DylanZA about getting his current patch for this one. &lt;br /&gt;
*Add explicit weighting for B-frames, too. This helps in nonlinear fades, among other cases. &lt;br /&gt;
*Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
=== Ratecontrol ===&lt;br /&gt;
&lt;br /&gt;
*Current per-frame VBV is a hack. It only adapts per row and is O(N^2), where N is the number of rows. An O(N) solution would be able to react more often and thus be more accurate. &lt;br /&gt;
*Make the frame size and row size predictors better. They currently are kind of crappy. &lt;br /&gt;
*Ratecontrol code as a whole is a bit of a mess. It could be improved. There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
*1-pass ratecontrol often can&#039;t adapt fast enough when there are lots of threads (12, 16, 24, etc), especially with smallish VBV buffers.  Improve this?&lt;br /&gt;
*2-pass VBV is actually a bit more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot. This trust is often misplaced if the first pass was a fast one. This should be improved.&lt;br /&gt;
**2-pass is still better in the case of many threads, due to the above.&lt;br /&gt;
*2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
*Macroblock-tree: make it more psy-aware. Maybe we should cap how much it lowers the quantizer on extremely static scenes? This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
&lt;br /&gt;
*Motion estimation? &lt;br /&gt;
**Methods &lt;br /&gt;
***Hierarchical? &lt;br /&gt;
***2D Wave? &lt;br /&gt;
***Something else? &lt;br /&gt;
**&amp;quot;Easy&amp;quot;: lookahead motion estimation &lt;br /&gt;
***Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once. &lt;br /&gt;
**&amp;quot;Hard&amp;quot;: main motion estimation &lt;br /&gt;
***Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search. &lt;br /&gt;
***But potentially more useful... &lt;br /&gt;
*Other things?&lt;br /&gt;
*MultiCoreWare is currently looking on a GPU-based lookahead.&lt;br /&gt;
&lt;br /&gt;
=== x86 assembly ===&lt;br /&gt;
&lt;br /&gt;
*Find holger, lock him in a closet, and make him commit his local patches.  It&#039;s been years now!&lt;br /&gt;
*Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation. Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
=== Other assembly ===&lt;br /&gt;
&lt;br /&gt;
*There&#039;s still a lot of unreviewed NEON assembly.  Can we please get this in?&lt;br /&gt;
*Altivec assembly is very lacking. &lt;br /&gt;
*SPARC VIS assembly is only available when high bit-depth is disabled.  But nobody cares about SPARC anyways.&lt;br /&gt;
&lt;br /&gt;
=== Other CPU optimizations ===&lt;br /&gt;
&lt;br /&gt;
*x264 needs more prefetching. How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places? Warning: this is often hard to benchmark. &lt;br /&gt;
*Different CPUs take different relative times for some functions. Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
=== Other features ===&lt;br /&gt;
&lt;br /&gt;
*MPEG-2 encoding support&lt;br /&gt;
**[https://github.com/kierank/x262/wiki/TODO x262]&lt;br /&gt;
*VP8 encoding support&lt;br /&gt;
**[https://github.com/DarkShikari/xvp8 xvp8]&lt;br /&gt;
*Support for SMPTE timecodes &lt;br /&gt;
*Merge speedcontrol &lt;br /&gt;
*Mixed lossless/lossy encoding.&lt;br /&gt;
*Segment re-encoding&lt;br /&gt;
*Spec compliant AVC-Intra encoding (ask kierank for spec)&lt;br /&gt;
**I tried this, but the problem is that the encoders/decoders in reality don&#039;t actually abide by their own spec.  This is completely insane.&lt;br /&gt;
&lt;br /&gt;
=== x264CLI ===&lt;br /&gt;
&lt;br /&gt;
*Finish audio support. Talk to Kovensky about this one.&lt;br /&gt;
*Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
*Add more filters. &lt;br /&gt;
**Deinterlacers (YADIF). &lt;br /&gt;
**Denoisers (HQDN3D?). &lt;br /&gt;
**IVTC, decomb? &lt;br /&gt;
*Merge L-SMASH mp4 muxer. &lt;br /&gt;
*Add TS muxing support using HRD. Talk to kierank about this one. &lt;br /&gt;
*Add --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22297</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22297"/>
		<updated>2012-03-22T22:35:31Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Mode Decision */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do. It&#039;s organized into sections covering various parts of x264. &lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk]. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC. There are no experience or educational requirements for doing any of this, though you are expected to know how to code. &lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties. This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there. If your company is interested in offering a bounty, drop by IRC. &lt;br /&gt;
&lt;br /&gt;
=== Motion Estimation ===&lt;br /&gt;
&lt;br /&gt;
*Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs. The downside is we won&#039;t be able to use SAD_X4 anymore. &lt;br /&gt;
*(T)ESA is currently wrong for motion searches done on weightp duplicates. This effect is miniscule, but it still should be fixed. &lt;br /&gt;
*Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA. It might also help regularize motion.&lt;br /&gt;
**I have a patch for this in the lookahead, but it didn&#039;t help much, since it only added predictors.&lt;br /&gt;
*Somehow take into account the effect of motion vector decision on future blocks. &lt;br /&gt;
**Hierarchical motion estimation &lt;br /&gt;
**Approximations from lookahead MVs &lt;br /&gt;
**Iterative ME (as per Snow) &lt;br /&gt;
**Trellis motion estimation &lt;br /&gt;
*We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search. &lt;br /&gt;
**But how do we know which ones we can afford to skip, and when? &lt;br /&gt;
**Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either. &lt;br /&gt;
*libtheora does fullpel motion estimation on the source pixels instead of decoded pixels. Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs? &lt;br /&gt;
*With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search? &lt;br /&gt;
**This seems to be awful from my testing, but maybe there&#039;s something we can do?&lt;br /&gt;
*Try sub-8x8 partitions in B-frames. Is it at all useful? &lt;br /&gt;
*Try bidir motion estimation for fullpel. That is, considering L1&#039;s MV when doing L0 (or vice versa). Xvid does this. How much does it help? &lt;br /&gt;
*Fullpel chroma ME? &lt;br /&gt;
**For TESA?&lt;br /&gt;
&lt;br /&gt;
=== Intra Analysis ===&lt;br /&gt;
&lt;br /&gt;
*Make the early terminations smarter. Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
**With the SSSE3-based fast intra analysis, we no longer do any early terminations for different modes, at least in SAD/SATD analysis.  But there might still be improvements to be made.&lt;br /&gt;
*SAD (subme 1) i8x8 vs i4x4 decision is a bit bad. Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
=== Mode Decision ===&lt;br /&gt;
&lt;br /&gt;
*Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
**A while back, I tried using weaker motion searches on older refs.  This helped a bit for speed-vs-compression, but is ironically the opposite of what one wants; older refs will be harder to find good MVs in, and therefore really need better searches.&lt;br /&gt;
*On extremely fast encoding settings, fast skip is actually kind of slow. But anything dumber (e.g. SAD) is completely useless. Is there some better balance that can be achieved here?&lt;br /&gt;
**Can we do something smart by analyzing fenc?  It&#039;s impossible to tell whether a block is motionless by looking at fdec, but looking at the source pixels is useful.  There&#039;s still complexity such as lower-QP-than-reference though.&lt;br /&gt;
*See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
**I tried correcting weightp references for deblock RDO, but it didn&#039;t help.&lt;br /&gt;
**I tried chroma, too, and again, it didn&#039;t help measurably.&lt;br /&gt;
*Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision? At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
**Doing a merged 4x4/8x8 SATD would help here, but would require new asm.&lt;br /&gt;
*Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD? RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle. &lt;br /&gt;
*Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct? [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality). &lt;br /&gt;
*With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
*How about saving CABAC state between each trellis call, rather than basing them all on the CABAC state at the start of the macroblock?&lt;br /&gt;
*Make subme=11 not do thresholding in qpel RD and bidir RD.&lt;br /&gt;
&lt;br /&gt;
=== Psy ===&lt;br /&gt;
&lt;br /&gt;
*Psy-RD is a hack. It works, but it&#039;s a hack. If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results. This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric. Is there a way to make it better? &lt;br /&gt;
*Should RD be linear at all? Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see. &lt;br /&gt;
*Psy-trellis (and maybe psy-RD?) are too strong at very high QPs. &lt;br /&gt;
*Psy-trellis should be merged with Psy-RD. There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed. &lt;br /&gt;
*RD should take into account local variance. &lt;br /&gt;
*Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis. &lt;br /&gt;
*Lambda should be picked independent of quantizer (i.e. with greater precision). &lt;br /&gt;
*Classic problem: a block is mostly high complexity but has a small area of low complexity. How do we judge whether that area is important? Good example: sharp text on background with film grain; grain gets blurred out because of the text. &lt;br /&gt;
**If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou). &lt;br /&gt;
*Should motion estimation lambda be as high as it is at very high quantizers? There&#039;s some value to capturing &amp;quot;true motion&amp;quot;... &lt;br /&gt;
*Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept. Except for local illumination changes. Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
=== Lookahead ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039; &lt;br /&gt;
*Temporal MV predictors in lookahead? There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search. &lt;br /&gt;
*Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)? If so, should it take into account estimated ratecontrol quantizer, too? If so, how?&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
*CAVLC &amp;quot;trellis&amp;quot; is a hack. It works, but it&#039;s a hack. Make it better. See the TODOs in encoder/rdo.c.&lt;br /&gt;
**This is doubly important now, as CABAC trellis has been made way faster, but CAVLC hasn&#039;t.  Many of the CABAC trellis improvements can be backported.&lt;br /&gt;
*There&#039;s room for something between trellis and deadzone in terms of complexity. libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer. This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis. A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
**How useful is this with an entropy coder that doesn&#039;t really bias towards zero-runs, as in CABAC?&lt;br /&gt;
*Floyd-Steinberg for quantization? Try pushing quantization error to nearby DCT coefficients. Should this go from high to low or low to high? &lt;br /&gt;
*Energy-preserving quantizer -- maintain L1 (or maybe L2? I&#039;m not sure) energy. Should we maintain it in the spatial domain (post-iDCT) or residual domain? Probably the former. &lt;br /&gt;
**See [https://github.com/saintdev/x264-devel/compare/enquant-base...energy-quant saintdev&#039;s github] for one attempt at this.&lt;br /&gt;
*Decimation is currently just a ripoff of the JVT recommended algorithm. Can we do this more optimally? With RD?&lt;br /&gt;
&lt;br /&gt;
=== Transform ===&lt;br /&gt;
&lt;br /&gt;
*Analyze the error characteristics of the fDCT. Is there any way to make it more accurate without much speed loss? Particularly at extremely low quantizers, this might help. &lt;br /&gt;
*Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter. See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
=== Interlacing ===&lt;br /&gt;
&lt;br /&gt;
*Lookahead currently blend-deinterlaces to get the lowres. Is this a good idea? Is there something better that isn&#039;t much slower? &lt;br /&gt;
*Constrained intra + adaptive MBAFF. Does anyone care about this? &lt;br /&gt;
*PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
=== Weighted Prediction ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Make weightp work with interlacing. Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039; &lt;br /&gt;
*Finish K-means decision for weightp. Talk to DylanZA about getting his current patch for this one. &lt;br /&gt;
*Add explicit weighting for B-frames, too. This helps in nonlinear fades, among other cases. &lt;br /&gt;
*Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
=== Ratecontrol ===&lt;br /&gt;
&lt;br /&gt;
*Current per-frame VBV is a hack. It only adapts per row and is O(N^2), where N is the number of rows. An O(N) solution would be able to react more often and thus be more accurate. &lt;br /&gt;
*Make the frame size and row size predictors better. They currently are kind of crappy. &lt;br /&gt;
*Ratecontrol code as a whole is a bit of a mess. It could be improved. There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
*1-pass ratecontrol often can&#039;t adapt fast enough when there are lots of threads (12, 16, 24, etc), especially with smallish VBV buffers.  Improve this?&lt;br /&gt;
*2-pass VBV is actually a bit more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot. This trust is often misplaced if the first pass was a fast one. This should be improved.&lt;br /&gt;
**2-pass is still better in the case of many threads, due to the above.&lt;br /&gt;
*2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
*Macroblock-tree: make it more psy-aware. Maybe we should cap how much it lowers the quantizer on extremely static scenes? This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
&lt;br /&gt;
*Motion estimation? &lt;br /&gt;
**Methods &lt;br /&gt;
***Hierarchical? &lt;br /&gt;
***2D Wave? &lt;br /&gt;
***Something else? &lt;br /&gt;
**&amp;quot;Easy&amp;quot;: lookahead motion estimation &lt;br /&gt;
***Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once. &lt;br /&gt;
**&amp;quot;Hard&amp;quot;: main motion estimation &lt;br /&gt;
***Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search. &lt;br /&gt;
***But potentially more useful... &lt;br /&gt;
*Other things?&lt;br /&gt;
*MultiCoreWare is currently looking on a GPU-based lookahead.&lt;br /&gt;
&lt;br /&gt;
=== x86 assembly ===&lt;br /&gt;
&lt;br /&gt;
*Find holger, lock him in a closet, and make him commit his local patches.  It&#039;s been years now!&lt;br /&gt;
*Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation. Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
=== Other assembly ===&lt;br /&gt;
&lt;br /&gt;
*There&#039;s still a lot of unreviewed NEON assembly.  Can we please get this in?&lt;br /&gt;
*Altivec assembly is very lacking. &lt;br /&gt;
*SPARC VIS assembly is only available when high bit-depth is disabled.  But nobody cares about SPARC anyways.&lt;br /&gt;
&lt;br /&gt;
=== Other CPU optimizations ===&lt;br /&gt;
&lt;br /&gt;
*x264 needs more prefetching. How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places? Warning: this is often hard to benchmark. &lt;br /&gt;
*Different CPUs take different relative times for some functions. Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
=== Other features ===&lt;br /&gt;
&lt;br /&gt;
*MPEG-2 encoding support&lt;br /&gt;
**[https://github.com/kierank/x262/wiki/TODO x262]&lt;br /&gt;
*VP8 encoding support&lt;br /&gt;
**[https://github.com/DarkShikari/xvp8 xvp8]&lt;br /&gt;
*Support for SMPTE timecodes &lt;br /&gt;
*Merge speedcontrol &lt;br /&gt;
*Mixed lossless/lossy encoding.&lt;br /&gt;
*Segment re-encoding&lt;br /&gt;
*Spec compliant AVC-Intra encoding (ask kierank for spec)&lt;br /&gt;
**I tried this, but the problem is that the encoders/decoders in reality don&#039;t actually abide by their own spec.  This is completely insane.&lt;br /&gt;
&lt;br /&gt;
=== x264CLI ===&lt;br /&gt;
&lt;br /&gt;
*Finish audio support. Talk to Kovensky about this one.&lt;br /&gt;
*Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
*Add more filters. &lt;br /&gt;
**Deinterlacers (YADIF). &lt;br /&gt;
**Denoisers (HQDN3D?). &lt;br /&gt;
**IVTC, decomb? &lt;br /&gt;
*Merge L-SMASH mp4 muxer. &lt;br /&gt;
*Add TS muxing support using HRD. Talk to kierank about this one. &lt;br /&gt;
*Add --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22296</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22296"/>
		<updated>2012-03-22T21:17:57Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Motion Estimation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do. It&#039;s organized into sections covering various parts of x264. &lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk]. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC. There are no experience or educational requirements for doing any of this, though you are expected to know how to code. &lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties. This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there. If your company is interested in offering a bounty, drop by IRC. &lt;br /&gt;
&lt;br /&gt;
=== Motion Estimation ===&lt;br /&gt;
&lt;br /&gt;
*Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs. The downside is we won&#039;t be able to use SAD_X4 anymore. &lt;br /&gt;
*(T)ESA is currently wrong for motion searches done on weightp duplicates. This effect is miniscule, but it still should be fixed. &lt;br /&gt;
*Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA. It might also help regularize motion.&lt;br /&gt;
**I have a patch for this in the lookahead, but it didn&#039;t help much, since it only added predictors.&lt;br /&gt;
*Somehow take into account the effect of motion vector decision on future blocks. &lt;br /&gt;
**Hierarchical motion estimation &lt;br /&gt;
**Approximations from lookahead MVs &lt;br /&gt;
**Iterative ME (as per Snow) &lt;br /&gt;
**Trellis motion estimation &lt;br /&gt;
*We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search. &lt;br /&gt;
**But how do we know which ones we can afford to skip, and when? &lt;br /&gt;
**Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either. &lt;br /&gt;
*libtheora does fullpel motion estimation on the source pixels instead of decoded pixels. Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs? &lt;br /&gt;
*With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search? &lt;br /&gt;
**This seems to be awful from my testing, but maybe there&#039;s something we can do?&lt;br /&gt;
*Try sub-8x8 partitions in B-frames. Is it at all useful? &lt;br /&gt;
*Try bidir motion estimation for fullpel. That is, considering L1&#039;s MV when doing L0 (or vice versa). Xvid does this. How much does it help? &lt;br /&gt;
*Fullpel chroma ME? &lt;br /&gt;
**For TESA?&lt;br /&gt;
&lt;br /&gt;
=== Intra Analysis ===&lt;br /&gt;
&lt;br /&gt;
*Make the early terminations smarter. Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
**With the SSSE3-based fast intra analysis, we no longer do any early terminations for different modes, at least in SAD/SATD analysis.  But there might still be improvements to be made.&lt;br /&gt;
*SAD (subme 1) i8x8 vs i4x4 decision is a bit bad. Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
=== Mode Decision ===&lt;br /&gt;
&lt;br /&gt;
*Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
**A while back, I tried using weaker motion searches on older refs.  This helped a bit for speed-vs-compression, but is ironically the opposite of what one wants; older refs will be harder to find good MVs in, and therefore really need better searches.&lt;br /&gt;
*On extremely fast encoding settings, fast skip is actually kind of slow. But anything dumber (e.g. SAD) is completely useless. Is there some better balance that can be achieved here?&lt;br /&gt;
**Can we do something smart by analyzing fenc?  It&#039;s impossible to tell whether a block is motionless by looking at fdec, but looking at the source pixels is useful.  There&#039;s still complexity such as lower-QP-than-reference though.&lt;br /&gt;
*See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
**I tried correcting weightp references for deblock RDO, but it didn&#039;t help.&lt;br /&gt;
*Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision? At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
**Doing a merged 4x4/8x8 SATD would help here, but would require new asm.&lt;br /&gt;
*Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD? RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle. &lt;br /&gt;
*Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct? [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality). &lt;br /&gt;
*With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
*How about saving CABAC state between each trellis call, rather than basing them all on the CABAC state at the start of the macroblock?&lt;br /&gt;
*Make subme=11 not do thresholding in qpel RD and bidir RD.&lt;br /&gt;
&lt;br /&gt;
=== Psy ===&lt;br /&gt;
&lt;br /&gt;
*Psy-RD is a hack. It works, but it&#039;s a hack. If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results. This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric. Is there a way to make it better? &lt;br /&gt;
*Should RD be linear at all? Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see. &lt;br /&gt;
*Psy-trellis (and maybe psy-RD?) are too strong at very high QPs. &lt;br /&gt;
*Psy-trellis should be merged with Psy-RD. There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed. &lt;br /&gt;
*RD should take into account local variance. &lt;br /&gt;
*Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis. &lt;br /&gt;
*Lambda should be picked independent of quantizer (i.e. with greater precision). &lt;br /&gt;
*Classic problem: a block is mostly high complexity but has a small area of low complexity. How do we judge whether that area is important? Good example: sharp text on background with film grain; grain gets blurred out because of the text. &lt;br /&gt;
**If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou). &lt;br /&gt;
*Should motion estimation lambda be as high as it is at very high quantizers? There&#039;s some value to capturing &amp;quot;true motion&amp;quot;... &lt;br /&gt;
*Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept. Except for local illumination changes. Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
=== Lookahead ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039; &lt;br /&gt;
*Temporal MV predictors in lookahead? There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search. &lt;br /&gt;
*Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)? If so, should it take into account estimated ratecontrol quantizer, too? If so, how?&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
*CAVLC &amp;quot;trellis&amp;quot; is a hack. It works, but it&#039;s a hack. Make it better. See the TODOs in encoder/rdo.c.&lt;br /&gt;
**This is doubly important now, as CABAC trellis has been made way faster, but CAVLC hasn&#039;t.  Many of the CABAC trellis improvements can be backported.&lt;br /&gt;
*There&#039;s room for something between trellis and deadzone in terms of complexity. libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer. This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis. A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
**How useful is this with an entropy coder that doesn&#039;t really bias towards zero-runs, as in CABAC?&lt;br /&gt;
*Floyd-Steinberg for quantization? Try pushing quantization error to nearby DCT coefficients. Should this go from high to low or low to high? &lt;br /&gt;
*Energy-preserving quantizer -- maintain L1 (or maybe L2? I&#039;m not sure) energy. Should we maintain it in the spatial domain (post-iDCT) or residual domain? Probably the former. &lt;br /&gt;
**See [https://github.com/saintdev/x264-devel/compare/enquant-base...energy-quant saintdev&#039;s github] for one attempt at this.&lt;br /&gt;
*Decimation is currently just a ripoff of the JVT recommended algorithm. Can we do this more optimally? With RD?&lt;br /&gt;
&lt;br /&gt;
=== Transform ===&lt;br /&gt;
&lt;br /&gt;
*Analyze the error characteristics of the fDCT. Is there any way to make it more accurate without much speed loss? Particularly at extremely low quantizers, this might help. &lt;br /&gt;
*Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter. See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
=== Interlacing ===&lt;br /&gt;
&lt;br /&gt;
*Lookahead currently blend-deinterlaces to get the lowres. Is this a good idea? Is there something better that isn&#039;t much slower? &lt;br /&gt;
*Constrained intra + adaptive MBAFF. Does anyone care about this? &lt;br /&gt;
*PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
=== Weighted Prediction ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Make weightp work with interlacing. Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039; &lt;br /&gt;
*Finish K-means decision for weightp. Talk to DylanZA about getting his current patch for this one. &lt;br /&gt;
*Add explicit weighting for B-frames, too. This helps in nonlinear fades, among other cases. &lt;br /&gt;
*Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
=== Ratecontrol ===&lt;br /&gt;
&lt;br /&gt;
*Current per-frame VBV is a hack. It only adapts per row and is O(N^2), where N is the number of rows. An O(N) solution would be able to react more often and thus be more accurate. &lt;br /&gt;
*Make the frame size and row size predictors better. They currently are kind of crappy. &lt;br /&gt;
*Ratecontrol code as a whole is a bit of a mess. It could be improved. There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
*1-pass ratecontrol often can&#039;t adapt fast enough when there are lots of threads (12, 16, 24, etc), especially with smallish VBV buffers.  Improve this?&lt;br /&gt;
*2-pass VBV is actually a bit more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot. This trust is often misplaced if the first pass was a fast one. This should be improved.&lt;br /&gt;
**2-pass is still better in the case of many threads, due to the above.&lt;br /&gt;
*2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
*Macroblock-tree: make it more psy-aware. Maybe we should cap how much it lowers the quantizer on extremely static scenes? This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
&lt;br /&gt;
*Motion estimation? &lt;br /&gt;
**Methods &lt;br /&gt;
***Hierarchical? &lt;br /&gt;
***2D Wave? &lt;br /&gt;
***Something else? &lt;br /&gt;
**&amp;quot;Easy&amp;quot;: lookahead motion estimation &lt;br /&gt;
***Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once. &lt;br /&gt;
**&amp;quot;Hard&amp;quot;: main motion estimation &lt;br /&gt;
***Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search. &lt;br /&gt;
***But potentially more useful... &lt;br /&gt;
*Other things?&lt;br /&gt;
*MultiCoreWare is currently looking on a GPU-based lookahead.&lt;br /&gt;
&lt;br /&gt;
=== x86 assembly ===&lt;br /&gt;
&lt;br /&gt;
*Find holger, lock him in a closet, and make him commit his local patches.  It&#039;s been years now!&lt;br /&gt;
*Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation. Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
=== Other assembly ===&lt;br /&gt;
&lt;br /&gt;
*There&#039;s still a lot of unreviewed NEON assembly.  Can we please get this in?&lt;br /&gt;
*Altivec assembly is very lacking. &lt;br /&gt;
*SPARC VIS assembly is only available when high bit-depth is disabled.  But nobody cares about SPARC anyways.&lt;br /&gt;
&lt;br /&gt;
=== Other CPU optimizations ===&lt;br /&gt;
&lt;br /&gt;
*x264 needs more prefetching. How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places? Warning: this is often hard to benchmark. &lt;br /&gt;
*Different CPUs take different relative times for some functions. Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
=== Other features ===&lt;br /&gt;
&lt;br /&gt;
*MPEG-2 encoding support&lt;br /&gt;
**[https://github.com/kierank/x262/wiki/TODO x262]&lt;br /&gt;
*VP8 encoding support&lt;br /&gt;
**[https://github.com/DarkShikari/xvp8 xvp8]&lt;br /&gt;
*Support for SMPTE timecodes &lt;br /&gt;
*Merge speedcontrol &lt;br /&gt;
*Mixed lossless/lossy encoding.&lt;br /&gt;
*Segment re-encoding&lt;br /&gt;
*Spec compliant AVC-Intra encoding (ask kierank for spec)&lt;br /&gt;
**I tried this, but the problem is that the encoders/decoders in reality don&#039;t actually abide by their own spec.  This is completely insane.&lt;br /&gt;
&lt;br /&gt;
=== x264CLI ===&lt;br /&gt;
&lt;br /&gt;
*Finish audio support. Talk to Kovensky about this one.&lt;br /&gt;
*Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
*Add more filters. &lt;br /&gt;
**Deinterlacers (YADIF). &lt;br /&gt;
**Denoisers (HQDN3D?). &lt;br /&gt;
**IVTC, decomb? &lt;br /&gt;
*Merge L-SMASH mp4 muxer. &lt;br /&gt;
*Add TS muxing support using HRD. Talk to kierank about this one. &lt;br /&gt;
*Add --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22295</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22295"/>
		<updated>2012-03-22T21:16:51Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: More updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do. It&#039;s organized into sections covering various parts of x264. &lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk]. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC. There are no experience or educational requirements for doing any of this, though you are expected to know how to code. &lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties. This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there. If your company is interested in offering a bounty, drop by IRC. &lt;br /&gt;
&lt;br /&gt;
=== Motion Estimation ===&lt;br /&gt;
&lt;br /&gt;
*Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs. The downside is we won&#039;t be able to use SAD_X4 anymore. &lt;br /&gt;
*(T)ESA is currently wrong for motion searches done on weightp duplicates. This effect is miniscule, but it still should be fixed. &lt;br /&gt;
*Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA. It might also help regularize motion. &lt;br /&gt;
*Somehow take into account the effect of motion vector decision on future blocks. &lt;br /&gt;
**Hierarchical motion estimation &lt;br /&gt;
**Approximations from lookahead MVs &lt;br /&gt;
**Iterative ME (as per Snow) &lt;br /&gt;
**Trellis motion estimation &lt;br /&gt;
*We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search. &lt;br /&gt;
**But how do we know which ones we can afford to skip, and when? &lt;br /&gt;
**Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either. &lt;br /&gt;
*libtheora does fullpel motion estimation on the source pixels instead of decoded pixels. Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs? &lt;br /&gt;
*With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search? &lt;br /&gt;
*Try sub-8x8 partitions in B-frames. Is it at all useful? &lt;br /&gt;
*Try bidir motion estimation for fullpel. That is, considering L1&#039;s MV when doing L0 (or vice versa). Xvid does this. How much does it help? &lt;br /&gt;
*Fullpel chroma ME? &lt;br /&gt;
**For TESA?&lt;br /&gt;
&lt;br /&gt;
=== Intra Analysis ===&lt;br /&gt;
&lt;br /&gt;
*Make the early terminations smarter. Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
**With the SSSE3-based fast intra analysis, we no longer do any early terminations for different modes, at least in SAD/SATD analysis.  But there might still be improvements to be made.&lt;br /&gt;
*SAD (subme 1) i8x8 vs i4x4 decision is a bit bad. Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
=== Mode Decision ===&lt;br /&gt;
&lt;br /&gt;
*Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
**A while back, I tried using weaker motion searches on older refs.  This helped a bit for speed-vs-compression, but is ironically the opposite of what one wants; older refs will be harder to find good MVs in, and therefore really need better searches.&lt;br /&gt;
*On extremely fast encoding settings, fast skip is actually kind of slow. But anything dumber (e.g. SAD) is completely useless. Is there some better balance that can be achieved here?&lt;br /&gt;
**Can we do something smart by analyzing fenc?  It&#039;s impossible to tell whether a block is motionless by looking at fdec, but looking at the source pixels is useful.  There&#039;s still complexity such as lower-QP-than-reference though.&lt;br /&gt;
*See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
**I tried correcting weightp references for deblock RDO, but it didn&#039;t help.&lt;br /&gt;
*Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision? At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
**Doing a merged 4x4/8x8 SATD would help here, but would require new asm.&lt;br /&gt;
*Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD? RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle. &lt;br /&gt;
*Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct? [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality). &lt;br /&gt;
*With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
*How about saving CABAC state between each trellis call, rather than basing them all on the CABAC state at the start of the macroblock?&lt;br /&gt;
*Make subme=11 not do thresholding in qpel RD and bidir RD.&lt;br /&gt;
&lt;br /&gt;
=== Psy ===&lt;br /&gt;
&lt;br /&gt;
*Psy-RD is a hack. It works, but it&#039;s a hack. If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results. This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric. Is there a way to make it better? &lt;br /&gt;
*Should RD be linear at all? Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see. &lt;br /&gt;
*Psy-trellis (and maybe psy-RD?) are too strong at very high QPs. &lt;br /&gt;
*Psy-trellis should be merged with Psy-RD. There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed. &lt;br /&gt;
*RD should take into account local variance. &lt;br /&gt;
*Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis. &lt;br /&gt;
*Lambda should be picked independent of quantizer (i.e. with greater precision). &lt;br /&gt;
*Classic problem: a block is mostly high complexity but has a small area of low complexity. How do we judge whether that area is important? Good example: sharp text on background with film grain; grain gets blurred out because of the text. &lt;br /&gt;
**If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou). &lt;br /&gt;
*Should motion estimation lambda be as high as it is at very high quantizers? There&#039;s some value to capturing &amp;quot;true motion&amp;quot;... &lt;br /&gt;
*Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept. Except for local illumination changes. Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
=== Lookahead ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039; &lt;br /&gt;
*Temporal MV predictors in lookahead? There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search. &lt;br /&gt;
*Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)? If so, should it take into account estimated ratecontrol quantizer, too? If so, how?&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
*CAVLC &amp;quot;trellis&amp;quot; is a hack. It works, but it&#039;s a hack. Make it better. See the TODOs in encoder/rdo.c.&lt;br /&gt;
**This is doubly important now, as CABAC trellis has been made way faster, but CAVLC hasn&#039;t.  Many of the CABAC trellis improvements can be backported.&lt;br /&gt;
*There&#039;s room for something between trellis and deadzone in terms of complexity. libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer. This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis. A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
**How useful is this with an entropy coder that doesn&#039;t really bias towards zero-runs, as in CABAC?&lt;br /&gt;
*Floyd-Steinberg for quantization? Try pushing quantization error to nearby DCT coefficients. Should this go from high to low or low to high? &lt;br /&gt;
*Energy-preserving quantizer -- maintain L1 (or maybe L2? I&#039;m not sure) energy. Should we maintain it in the spatial domain (post-iDCT) or residual domain? Probably the former. &lt;br /&gt;
**See [https://github.com/saintdev/x264-devel/compare/enquant-base...energy-quant saintdev&#039;s github] for one attempt at this.&lt;br /&gt;
*Decimation is currently just a ripoff of the JVT recommended algorithm. Can we do this more optimally? With RD?&lt;br /&gt;
&lt;br /&gt;
=== Transform ===&lt;br /&gt;
&lt;br /&gt;
*Analyze the error characteristics of the fDCT. Is there any way to make it more accurate without much speed loss? Particularly at extremely low quantizers, this might help. &lt;br /&gt;
*Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter. See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
=== Interlacing ===&lt;br /&gt;
&lt;br /&gt;
*Lookahead currently blend-deinterlaces to get the lowres. Is this a good idea? Is there something better that isn&#039;t much slower? &lt;br /&gt;
*Constrained intra + adaptive MBAFF. Does anyone care about this? &lt;br /&gt;
*PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
=== Weighted Prediction ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Make weightp work with interlacing. Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039; &lt;br /&gt;
*Finish K-means decision for weightp. Talk to DylanZA about getting his current patch for this one. &lt;br /&gt;
*Add explicit weighting for B-frames, too. This helps in nonlinear fades, among other cases. &lt;br /&gt;
*Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
=== Ratecontrol ===&lt;br /&gt;
&lt;br /&gt;
*Current per-frame VBV is a hack. It only adapts per row and is O(N^2), where N is the number of rows. An O(N) solution would be able to react more often and thus be more accurate. &lt;br /&gt;
*Make the frame size and row size predictors better. They currently are kind of crappy. &lt;br /&gt;
*Ratecontrol code as a whole is a bit of a mess. It could be improved. There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
*1-pass ratecontrol often can&#039;t adapt fast enough when there are lots of threads (12, 16, 24, etc), especially with smallish VBV buffers.  Improve this?&lt;br /&gt;
*2-pass VBV is actually a bit more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot. This trust is often misplaced if the first pass was a fast one. This should be improved.&lt;br /&gt;
**2-pass is still better in the case of many threads, due to the above.&lt;br /&gt;
*2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
*Macroblock-tree: make it more psy-aware. Maybe we should cap how much it lowers the quantizer on extremely static scenes? This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
&lt;br /&gt;
*Motion estimation? &lt;br /&gt;
**Methods &lt;br /&gt;
***Hierarchical? &lt;br /&gt;
***2D Wave? &lt;br /&gt;
***Something else? &lt;br /&gt;
**&amp;quot;Easy&amp;quot;: lookahead motion estimation &lt;br /&gt;
***Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once. &lt;br /&gt;
**&amp;quot;Hard&amp;quot;: main motion estimation &lt;br /&gt;
***Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search. &lt;br /&gt;
***But potentially more useful... &lt;br /&gt;
*Other things?&lt;br /&gt;
*MultiCoreWare is currently looking on a GPU-based lookahead.&lt;br /&gt;
&lt;br /&gt;
=== x86 assembly ===&lt;br /&gt;
&lt;br /&gt;
*Find holger, lock him in a closet, and make him commit his local patches.  It&#039;s been years now!&lt;br /&gt;
*Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation. Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
=== Other assembly ===&lt;br /&gt;
&lt;br /&gt;
*There&#039;s still a lot of unreviewed NEON assembly.  Can we please get this in?&lt;br /&gt;
*Altivec assembly is very lacking. &lt;br /&gt;
*SPARC VIS assembly is only available when high bit-depth is disabled.  But nobody cares about SPARC anyways.&lt;br /&gt;
&lt;br /&gt;
=== Other CPU optimizations ===&lt;br /&gt;
&lt;br /&gt;
*x264 needs more prefetching. How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places? Warning: this is often hard to benchmark. &lt;br /&gt;
*Different CPUs take different relative times for some functions. Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
=== Other features ===&lt;br /&gt;
&lt;br /&gt;
*MPEG-2 encoding support&lt;br /&gt;
**[https://github.com/kierank/x262/wiki/TODO x262]&lt;br /&gt;
*VP8 encoding support&lt;br /&gt;
**[https://github.com/DarkShikari/xvp8 xvp8]&lt;br /&gt;
*Support for SMPTE timecodes &lt;br /&gt;
*Merge speedcontrol &lt;br /&gt;
*Mixed lossless/lossy encoding.&lt;br /&gt;
*Segment re-encoding&lt;br /&gt;
*Spec compliant AVC-Intra encoding (ask kierank for spec)&lt;br /&gt;
**I tried this, but the problem is that the encoders/decoders in reality don&#039;t actually abide by their own spec.  This is completely insane.&lt;br /&gt;
&lt;br /&gt;
=== x264CLI ===&lt;br /&gt;
&lt;br /&gt;
*Finish audio support. Talk to Kovensky about this one.&lt;br /&gt;
*Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
*Add more filters. &lt;br /&gt;
**Deinterlacers (YADIF). &lt;br /&gt;
**Denoisers (HQDN3D?). &lt;br /&gt;
**IVTC, decomb? &lt;br /&gt;
*Merge L-SMASH mp4 muxer. &lt;br /&gt;
*Add TS muxing support using HRD. Talk to kierank about this one. &lt;br /&gt;
*Add --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22294</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22294"/>
		<updated>2012-03-22T21:11:04Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: Some updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do. It&#039;s organized into sections covering various parts of x264. &lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk]. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC. There are no experience or educational requirements for doing any of this, though you are expected to know how to code. &lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties. This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there. If your company is interested in offering a bounty, drop by IRC. &lt;br /&gt;
&lt;br /&gt;
=== Motion Estimation ===&lt;br /&gt;
&lt;br /&gt;
*Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs. The downside is we won&#039;t be able to use SAD_X4 anymore. &lt;br /&gt;
*(T)ESA is currently wrong for motion searches done on weightp duplicates. This effect is miniscule, but it still should be fixed. &lt;br /&gt;
*Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA. It might also help regularize motion. &lt;br /&gt;
*Somehow take into account the effect of motion vector decision on future blocks. &lt;br /&gt;
**Hierarchical motion estimation &lt;br /&gt;
**Approximations from lookahead MVs &lt;br /&gt;
**Iterative ME (as per Snow) &lt;br /&gt;
**Trellis motion estimation &lt;br /&gt;
*We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search. &lt;br /&gt;
**But how do we know which ones we can afford to skip, and when? &lt;br /&gt;
**Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either. &lt;br /&gt;
*libtheora does fullpel motion estimation on the source pixels instead of decoded pixels. Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs? &lt;br /&gt;
*With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search? &lt;br /&gt;
*Try sub-8x8 partitions in B-frames. Is it at all useful? &lt;br /&gt;
*Try bidir motion estimation for fullpel. That is, considering L1&#039;s MV when doing L0 (or vice versa). Xvid does this. How much does it help? &lt;br /&gt;
*Fullpel chroma ME? &lt;br /&gt;
**For TESA?&lt;br /&gt;
&lt;br /&gt;
=== Intra Analysis ===&lt;br /&gt;
&lt;br /&gt;
*Make the early terminations smarter. Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
**With the SSSE3-based fast intra analysis, we no longer do any early terminations for different modes, at least in SAD/SATD analysis.  But there might still be improvements to be made.&lt;br /&gt;
*SAD (subme 1) i8x8 vs i4x4 decision is a bit bad. Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
=== Mode Decision ===&lt;br /&gt;
&lt;br /&gt;
*Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
**A while back, I tried using weaker motion searches on older refs.  This helped a bit for speed-vs-compression, but is ironically the opposite of what one wants; older refs will be harder to find good MVs in, and therefore really need better searches.&lt;br /&gt;
*On extremely fast encoding settings, fast skip is actually kind of slow. But anything dumber (e.g. SAD) is completely useless. Is there some better balance that can be achieved here?&lt;br /&gt;
**Can we do something smart by analyzing fenc?  It&#039;s impossible to tell whether a block is motionless by looking at fdec, but looking at the source pixels is useful.  There&#039;s still complexity such as lower-QP-than-reference though.&lt;br /&gt;
*See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
**I tried correcting weightp references for deblock RDO, but it didn&#039;t help.&lt;br /&gt;
*Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision? At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
**Doing a merged 4x4/8x8 SATD would help here, but would require new asm.&lt;br /&gt;
*Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD? RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle. &lt;br /&gt;
*Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct? [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality). &lt;br /&gt;
*With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
*How about saving CABAC state between each trellis call, rather than basing them all on the CABAC state at the start of the macroblock?&lt;br /&gt;
*Make subme=11 not do thresholding in qpel RD and bidir RD.&lt;br /&gt;
&lt;br /&gt;
=== Psy ===&lt;br /&gt;
&lt;br /&gt;
*Psy-RD is a hack. It works, but it&#039;s a hack. If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results. This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric. Is there a way to make it better? &lt;br /&gt;
*Should RD be linear at all? Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see. &lt;br /&gt;
*Psy-trellis (and maybe psy-RD?) are too strong at very high QPs. &lt;br /&gt;
*Psy-trellis should be merged with Psy-RD. There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed. &lt;br /&gt;
*RD should take into account local variance. &lt;br /&gt;
*Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis. &lt;br /&gt;
*Lambda should be picked independent of quantizer (i.e. with greater precision). &lt;br /&gt;
*Classic problem: a block is mostly high complexity but has a small area of low complexity. How do we judge whether that area is important? Good example: sharp text on background with film grain; grain gets blurred out because of the text. &lt;br /&gt;
**If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou). &lt;br /&gt;
*Should motion estimation lambda be as high as it is at very high quantizers? There&#039;s some value to capturing &amp;quot;true motion&amp;quot;... &lt;br /&gt;
*Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept. Except for local illumination changes. Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
=== Lookahead ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039; &lt;br /&gt;
*Temporal MV predictors in lookahead? There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search. &lt;br /&gt;
*Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)? If so, should it take into account estimated ratecontrol quantizer, too? If so, how?&lt;br /&gt;
&lt;br /&gt;
=== Quantization ===&lt;br /&gt;
&lt;br /&gt;
*CAVLC &amp;quot;trellis&amp;quot; is a hack. It works, but it&#039;s a hack. Make it better. See the TODOs in encoder/rdo.c. &lt;br /&gt;
*There&#039;s room for something between trellis and deadzone in terms of complexity. libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer. This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis. A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful. &lt;br /&gt;
*Floyd-Steinberg for quantization? Try pushing quantization error to nearby DCT coefficients. Should this go from high to low or low to high? &lt;br /&gt;
*Energy-preserving quantizer -- maintain L1 (or maybe L2? I&#039;m not sure) energy. Should we maintain it in the spatial domain (post-iDCT) or residual domain? Probably the former. &lt;br /&gt;
**See [https://github.com/saintdev/x264-devel/compare/enquant-base...energy-quant saintdev&#039;s github] for one attempt at this.&lt;br /&gt;
*Decimation is currently just a ripoff of the JVT recommended algorithm. Can we do this more optimally? With RD?&lt;br /&gt;
&lt;br /&gt;
=== Transform ===&lt;br /&gt;
&lt;br /&gt;
*Analyze the error characteristics of the fDCT. Is there any way to make it more accurate without much speed loss? Particularly at extremely low quantizers, this might help. &lt;br /&gt;
*Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter. See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
=== Interlacing ===&lt;br /&gt;
&lt;br /&gt;
*Lookahead currently blend-deinterlaces to get the lowres. Is this a good idea? Is there something better that isn&#039;t much slower? &lt;br /&gt;
*Constrained intra + adaptive MBAFF. Does anyone care about this? &lt;br /&gt;
*PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
=== Weighted Prediction ===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Make weightp work with interlacing. Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039; &lt;br /&gt;
*Finish K-means decision for weightp. Talk to DylanZA about getting his current patch for this one. &lt;br /&gt;
*Add explicit weighting for B-frames, too. This helps in nonlinear fades, among other cases. &lt;br /&gt;
*Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
=== Ratecontrol ===&lt;br /&gt;
&lt;br /&gt;
*VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy. &lt;br /&gt;
**Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix? This might be better than underflowing. &lt;br /&gt;
*Current per-frame VBV is a hack. It only adapts per row and is O(N^2), where N is the number of rows. An O(N) solution would be able to react more often and thus be more accurate. &lt;br /&gt;
*Make the frame size and row size predictors better. They currently are kind of crappy. &lt;br /&gt;
*Ratecontrol code as a whole is a bit of a mess. It could be improved. There&#039;s a lot of cruft left over that is probably not needed now, like qblur. &lt;br /&gt;
*2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot. This trust is often misplaced if the first pass was a fast one. This should be improved. &lt;br /&gt;
*2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving). &lt;br /&gt;
*Macroblock-tree: make it more psy-aware. Maybe we should cap how much it lowers the quantizer on extremely static scenes? This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
&lt;br /&gt;
*Motion estimation? &lt;br /&gt;
**Methods &lt;br /&gt;
***Hierarchical? &lt;br /&gt;
***2D Wave? &lt;br /&gt;
***Something else? &lt;br /&gt;
**&amp;quot;Easy&amp;quot;: lookahead motion estimation &lt;br /&gt;
***Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once. &lt;br /&gt;
**&amp;quot;Hard&amp;quot;: main motion estimation &lt;br /&gt;
***Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search. &lt;br /&gt;
***But potentially more useful... &lt;br /&gt;
*Other things?&lt;br /&gt;
&lt;br /&gt;
=== x86 assembly ===&lt;br /&gt;
&lt;br /&gt;
*Optimize more for the Phenom. &lt;br /&gt;
*Yell at holger to commit his local patches. &lt;br /&gt;
*Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation. Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
=== Other assembly ===&lt;br /&gt;
&lt;br /&gt;
*NEON assembly is nowhere near complete. &lt;br /&gt;
**Chroma MC needs to be rewritten for NV12 support. &lt;br /&gt;
*Altivec assembly is very lacking. &lt;br /&gt;
*SPARC VIS assembly is only available when high bit-depth is disabled.&lt;br /&gt;
&lt;br /&gt;
=== Other CPU optimizations ===&lt;br /&gt;
&lt;br /&gt;
*x264 needs more prefetching. How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places? Warning: this is often hard to benchmark. &lt;br /&gt;
*Different CPUs take different relative times for some functions. Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
=== Other features ===&lt;br /&gt;
&lt;br /&gt;
*MPEG-2 encoding support &lt;br /&gt;
*VP8 encoding support &lt;br /&gt;
*Support for SMPTE timecodes &lt;br /&gt;
*Merge speedcontrol &lt;br /&gt;
*Mixed lossless/lossy encoding.&lt;br /&gt;
*Segment re-encoding&lt;br /&gt;
*Spec compliant AVC-Intra encoding (ask kierank for spec)&lt;br /&gt;
&lt;br /&gt;
=== x264CLI ===&lt;br /&gt;
&lt;br /&gt;
*Finish audio support. Talk to Kovensky about this one. &lt;br /&gt;
*Make the filtering system aware of fullrange vs TV range. &lt;br /&gt;
*Make the filtering system aware of BT.601 vs BT.709. &lt;br /&gt;
*Add more filters. &lt;br /&gt;
**Deinterlacers (YADIF). &lt;br /&gt;
**Denoisers (HQDN3D?). &lt;br /&gt;
**IVTC, decomb? &lt;br /&gt;
*Merge L-SMASH mp4 muxer. &lt;br /&gt;
*Add TS muxing support using HRD. Talk to kierank about this one. &lt;br /&gt;
*Add --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19438</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19438"/>
		<updated>2011-07-16T00:01:00Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* x86 assembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
* PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
* Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Yell at holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
* SPARC VIS assembly is only available when high bit-depth is disabled.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 colorspace support&#039;&#039;&#039;&lt;br /&gt;
* Support for SMPTE timecodes&lt;br /&gt;
* Merge speedcontrol&lt;br /&gt;
* Mixed lossless/lossy encoding.&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Make the filtering system aware of fullrange vs TV range.&lt;br /&gt;
* Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;br /&gt;
* Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19437</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19437"/>
		<updated>2011-07-15T23:54:43Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Weighted Prediction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
* PAFF + MBAFF adaptive - PAFF performs better than Adaptive MBAFF on high motion scenes because it can predict from the previous field.&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
* Improve weighted prediction analysis to do more searching based on an estimated offset vs scale gradient.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of number of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for Sandy Bridge.&lt;br /&gt;
* Work more on 10-bit asm.&lt;br /&gt;
* If you read this, join #x264dev on irc://irc.freenode.net and ping holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
* SPARC VIS assembly is only available when high bit-depth is disabled.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 colorspace support&#039;&#039;&#039;&lt;br /&gt;
* Support for SMPTE timecodes&lt;br /&gt;
* Merge speedcontrol&lt;br /&gt;
* Mixed lossless/lossy encoding.&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Make the filtering system aware of fullrange vs TV range.&lt;br /&gt;
* Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;br /&gt;
* Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18936</id>
		<title>SoC x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18936"/>
		<updated>2011-03-29T23:02:15Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Introduction to x264 and Summer of Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction to x264 and Summer of Code==&lt;br /&gt;
[[x264]] is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, television broadcast, and Blu-ray authoring.  It outclasses practically all commercial implementations both speed and compression-wise.  While not actually part of VLC or ffmpeg, it is a major library used by both, licensed under the GPL.  Due to its popularity in the commercial world (for example, Youtube and Facebook rely on it), many companies have offered bounties in the past for features and improvements that they found useful.&lt;br /&gt;
&lt;br /&gt;
But don&#039;t let that all scare you.  There&#039;s still plenty of projects that a student can effectively get involved in -- we&#039;ve had tons of successful students, both in Google Summer of Code and Google Code-In, most of whom knew nothing about video compression before applying.&lt;br /&gt;
&lt;br /&gt;
x264 is part of the VideoLAN candidature for Google Summer of Code 2011.&lt;br /&gt;
&lt;br /&gt;
*Lead mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible other mentors: Ronald Bultje (BBB)?, Kieran Kunhya (kierank)&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s structure and algorithms can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].  It is somewhat outdated, but still mostly accurate.  Do note that understanding this is not necessary for all projects.&lt;br /&gt;
&lt;br /&gt;
On a lighter note, feel free to check out the [http://www.x264.nl/developers/Dark_Shikari/loren.html x264 developer quotes page].&lt;br /&gt;
&lt;br /&gt;
==Guide to getting involved==&lt;br /&gt;
*Hop on IRC--whenever!  We have a friendly community that&#039;s happy to help and to talk about pretty much whatever.  #x264 is the general discussion/user help channel and #x264dev is the development-only channel (Freenode server).  If you&#039;ve never used IRC, grab Chatzilla.  There is no such thing as a stupid question--only stupid people--so don&#039;t worry about sounding dumb.  Just get involved!&lt;br /&gt;
*Ask questions--I cannot stress this enough.  We&#039;ve had students who couldn&#039;t get anywhere because they were stuck--but didn&#039;t ask questions!  There&#039;s no shame in asking questions; that&#039;s how everyone here got involved.&lt;br /&gt;
*&#039;&#039;&#039;Stay on IRC&#039;&#039;&#039;.  Even if you have nothing to say, being around lets you get to know the community, get a feel for what&#039;s going on, and even sometimes help out by pointing the semicolon I left at the end of my if statement.  This applies during the project period too: we expect all students to &#039;&#039;&#039;always be on IRC&#039;&#039;&#039;.  This doesn&#039;t mean you have to be actually active all the time, but whenever you&#039;re free, you should be at least pingable on IRC, and whenever you&#039;re working on Summer of Code, you should be active on IRC.&lt;br /&gt;
**The best option for staying online is to get a remote shell account of some sort and leave an IRSSI client on 24/7 in a screen.  This lets you easily come back in the morning and see if you missed anything important.  checkers can provide you with a shell if you end up being accepted as a student.&lt;br /&gt;
*Even if you don&#039;t get a slot as a student, or you don&#039;t qualify for Summer of Code, we will happily provide you with the exact same support that we would give a student: it is quite reasonable and not at all uncommon for us to have projects of similar scale to Summer of Code be done by students who are not part of the Summer of Code program.&lt;br /&gt;
&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.  Most people who get involved don&#039;t know much to start with; we don&#039;t expect you to!&lt;br /&gt;
*To work on anything related directly to the encoder core (not all projects), you&#039;ll need to do some significant background reading on relevant topics.&lt;br /&gt;
**A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here].  It also has some more specific chapters on MPEG-4 Part 10 (H.264).&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting 3-4 students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.  Do remember that the project ideas listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.  For example, if you have an idea to improve compression (e.g. implementing a new algorithm) that you think we can benefit from, feel free to bring it up.&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
x264&#039;s ARM NEON assembly code is well behind its x86 assembly and is missing many optimizations.  This project would involve finishing up the ARM assembly (originally done as part of Summer of Code 2009), giving us a much-needed performance boost on ARM.&lt;br /&gt;
&lt;br /&gt;
NEON knowledge is highly recommended but not required -- but you will have to learn somehow or another.  We have a few NEON experts in the community who can help, but none are available for full-time mentoring, so keep this in mind when picking this project.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU motion estimation===&lt;br /&gt;
While porting x264 entirely to CUDA or OpenCL is an insane task, there are three possible methods that could be used to offload some work to the GPU:&lt;br /&gt;
&lt;br /&gt;
*High-complexity motion search designed to get useful predictors to be used by the main motion search.&lt;br /&gt;
*Massively parallelized lookahead motion search, designed to do a lot of the work normally done in the lookahead thread.  May also improve B-frame decision and other parts of the lookahead.&lt;br /&gt;
*Motion search designed to completely replace x264&#039;s main motion search: would require a lot of threading trickery to sync it perfectly with the main encoder threads.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  If you have a better idea, feel free to propose it, of course.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
x264&#039;s biggest weakness is that it only considers the optimal decisions for the current macroblock; it isn&#039;t aware of the effects of its decision on the future.  There may be significant benefits to be gained via non-local methods, such as iterative optimization.  However, especially in H.264, non-local RD is very difficult to do efficiently.  This is a project primarily targeted at someone already familiar with video compression: in particular, it *requires* that you have at least some idea with regards to how you would do it!  Your idea must not only improve compression, but also do so in some sane amount of time (a 2x speed cost might be tolerable, 400x most certainly not).&lt;br /&gt;
&lt;br /&gt;
This is probably not very difficult from a coding standpoint and is really more of an algorithmic problem.  Since we haven&#039;t done it already, that of course means it&#039;s a &#039;&#039;hard&#039;&#039; algorithmic problem.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
This project would be to implement the multiview coding extension (read: 3D video) of H.264.  This would mostly be a high-level project: affecting headers, reference handling, and so forth, as opposed to low level compression steps.  This would let x264 be used to author 3D Blu-rays and encode 3D content more efficiently. (kierank can get Blu-ray 3D streams verified)&lt;br /&gt;
&lt;br /&gt;
This project would involve reading a lot of spec and implementing it in the cleanest way possible.  It is probably not inordinately difficult.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
Unlike many other projects, such as ffmpeg, x264&#039;s policy for qualification tasks is to use tasks that are directly useful to &#039;&#039;you&#039;&#039; for your summer project.  That is, the projects directly lead you into the start of your project and create a base for you to work off for the rest of the summer.  This is, in our opinion, much better than making you work on something completely unrelated.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;relatively difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
None of these tasks are supposed to take more than a few days to a week of work.  &#039;&#039;&#039;If you successfully complete one, we will almost surely accept you as a student.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on ARM by at least 2% by writing new NEON functions.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be at all watchable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
A partially done qualification task for reference can be found here: &lt;br /&gt;
https://github.com/Andreas-HH/x264-colorspaces&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  Assuming you didn&#039;t propose another, the hierarchical search works via the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
Implement an extremely minimal prototype of some part of your idea.  It can be ugly, hacky, and limited; all that matters is you demonstrate that you can take an idea and turn it into code in x264.  Bonus points if the idea actually works.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
Read the spec and write an outline of what changes you&#039;ll have to make to x264 (specifically, with x264 in mind) in order to implement MVC.  In other words, a design document.  It doesn&#039;t have to be very formal, but it needs to clearly demonstrate that you have put some amount of thought into this.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18824</id>
		<title>SoC x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18824"/>
		<updated>2011-03-15T20:58:59Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* 4:4:4 and 4:2:2 Colorspaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction to x264 and Summer of Code==&lt;br /&gt;
[[x264]] is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, television broadcast, and Blu-ray authoring.  It outclasses practically all commercial implementations both speed and compression-wise.  While not actually part of VLC or ffmpeg, it is a major library used by both, licensed under the GPL.  Due to its popularity in the commercial world (for example, Youtube and Facebook rely on it), many companies have offered bounties in the past for features and improvements that they found useful.&lt;br /&gt;
&lt;br /&gt;
But don&#039;t let that all scare you.  There&#039;s still plenty of projects that a student can effectively get involved in.&lt;br /&gt;
&lt;br /&gt;
x264 is part of the VideoLAN candidature for Google Summer of Code 2011.&lt;br /&gt;
&lt;br /&gt;
*Lead mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible other mentors: Ronald Bultje (BBB)?, Kieran Kunhya (kierank)&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s structure and algorithms can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].  It is somewhat outdated, but still mostly accurate.  Do note that understanding this is not necessary for all projects.&lt;br /&gt;
&lt;br /&gt;
On a lighter note, feel free to check out the [http://www.x264.nl/developers/Dark_Shikari/loren.html x264 developer quotes page].&lt;br /&gt;
&lt;br /&gt;
==Guide to getting involved==&lt;br /&gt;
*Hop on IRC--whenever!  We have a friendly community that&#039;s happy to help and to talk about pretty much whatever.  #x264 is the general discussion/user help channel and #x264dev is the development-only channel (Freenode server).  If you&#039;ve never used IRC, grab Chatzilla.  There is no such thing as a stupid question--only stupid people--so don&#039;t worry about sounding dumb.  Just get involved!&lt;br /&gt;
*Ask questions--I cannot stress this enough.  We&#039;ve had students who couldn&#039;t get anywhere because they were stuck--but didn&#039;t ask questions!  There&#039;s no shame in asking questions; that&#039;s how everyone here got involved.&lt;br /&gt;
*&#039;&#039;&#039;Stay on IRC&#039;&#039;&#039;.  Even if you have nothing to say, being around lets you get to know the community, get a feel for what&#039;s going on, and even sometimes help out by pointing the semicolon I left at the end of my if statement.  This applies during the project period too: we expect all students to &#039;&#039;&#039;always be on IRC&#039;&#039;&#039;.  This doesn&#039;t mean you have to be actually active all the time, but whenever you&#039;re free, you should be at least pingable on IRC, and whenever you&#039;re working on Summer of Code, you should be active on IRC.&lt;br /&gt;
**The best option for staying online is to get a remote shell account of some sort and leave an IRSSI client on 24/7 in a screen.  This lets you easily come back in the morning and see if you missed anything important.  checkers can provide you with a shell if you end up being accepted as a student.&lt;br /&gt;
*Even if you don&#039;t get a slot as a student, or you don&#039;t qualify for Summer of Code, we will happily provide you with the exact same support that we would give a student: it is quite reasonable and not at all uncommon for us to have projects of similar scale to Summer of Code be done by students who are not part of the Summer of Code program.&lt;br /&gt;
&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.  Most people who get involved don&#039;t know much to start with; we don&#039;t expect you to!&lt;br /&gt;
*To work on anything related directly to the encoder core (not all projects), you&#039;ll need to do some significant background reading on relevant topics.&lt;br /&gt;
**A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here].  It also has some more specific chapters on MPEG-4 Part 10 (H.264).&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting 3-4 students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.  Do remember that the project ideas listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.  For example, if you have an idea to improve compression (e.g. implementing a new algorithm) that you think we can benefit from, feel free to bring it up.&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
x264&#039;s ARM NEON assembly code is well behind its x86 assembly and is missing many optimizations.  This project would involve finishing up the ARM assembly (originally done as part of Summer of Code 2009), giving us a much-needed performance boost on ARM.&lt;br /&gt;
&lt;br /&gt;
NEON knowledge is highly recommended but not required -- but you will have to learn somehow or another.  We have a few NEON experts in the community who can help, but none are available for full-time mentoring, so keep this in mind when picking this project.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU motion estimation===&lt;br /&gt;
While porting x264 entirely to CUDA or OpenCL is an insane task, there are three possible methods that could be used to offload some work to the GPU:&lt;br /&gt;
&lt;br /&gt;
*High-complexity motion search designed to get useful predictors to be used by the main motion search.&lt;br /&gt;
*Massively parallelized lookahead motion search, designed to do a lot of the work normally done in the lookahead thread.  May also improve B-frame decision and other parts of the lookahead.&lt;br /&gt;
*Motion search designed to completely replace x264&#039;s main motion search: would require a lot of threading trickery to sync it perfectly with the main encoder threads.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  If you have a better idea, feel free to propose it, of course.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
x264&#039;s biggest weakness is that it only considers the optimal decisions for the current macroblock; it isn&#039;t aware of the effects of its decision on the future.  There may be significant benefits to be gained via non-local methods, such as iterative optimization.  However, especially in H.264, non-local RD is very difficult to do efficiently.  This is a project primarily targeted at someone already familiar with video compression: in particular, it *requires* that you have at least some idea with regards to how you would do it!  Your idea must not only improve compression, but also do so in some sane amount of time (a 2x speed cost might be tolerable, 400x most certainly not).&lt;br /&gt;
&lt;br /&gt;
This is probably not very difficult from a coding standpoint and is really more of an algorithmic problem.  Since we haven&#039;t done it already, that of course means it&#039;s a &#039;&#039;hard&#039;&#039; algorithmic problem.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
This project would be to implement the multiview coding extension (read: 3D video) of H.264.  This would mostly be a high-level project: affecting headers, reference handling, and so forth, as opposed to low level compression steps.  This would let x264 be used to author 3D Blu-rays and encode 3D content more efficiently. (kierank can get Blu-ray 3D streams verified)&lt;br /&gt;
&lt;br /&gt;
This project would involve reading a lot of spec and implementing it in the cleanest way possible.  It is probably not inordinately difficult.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
Unlike many other projects, such as ffmpeg, x264&#039;s policy for qualification tasks is to use tasks that are directly useful to &#039;&#039;you&#039;&#039; for your summer project.  That is, the projects directly lead you into the start of your project and create a base for you to work off for the rest of the summer.  This is, in our opinion, much better than making you work on something completely unrelated.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;relatively difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
None of these tasks are supposed to take more than a few days to a week of work.  &#039;&#039;&#039;If you successfully complete one, we will almost surely accept you as a student.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on ARM by at least 2% by writing new NEON functions.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be at all watchable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
A partially done qualification task for reference can be found here: &lt;br /&gt;
https://github.com/Andreas-HH/x264-colorspaces&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  Assuming you didn&#039;t propose another, the hierarchical search works via the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
Implement an extremely minimal prototype of some part of your idea.  It can be ugly, hacky, and limited; all that matters is you demonstrate that you can take an idea and turn it into code in x264.  Bonus points if the idea actually works.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
Read the spec and write an outline of what changes you&#039;ll have to make to x264 (specifically, with x264 in mind) in order to implement MVC.  In other words, a design document.  It doesn&#039;t have to be very formal, but it needs to clearly demonstrate that you have put some amount of thought into this.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18750</id>
		<title>SoC x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18750"/>
		<updated>2011-03-03T12:13:09Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Qualification tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction to x264 and Summer of Code==&lt;br /&gt;
[[x264]] is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, television broadcast, and Blu-ray authoring.  It outclasses practically all commercial implementations both speed and compression-wise.  While not actually part of VLC or ffmpeg, it is a major library used by both, licensed under the GPL.  Due to its popularity in the commercial world (for example, Youtube and Facebook rely on it), many companies have offered bounties in the past for features and improvements that they found useful.&lt;br /&gt;
&lt;br /&gt;
But don&#039;t let that all scare you.  There&#039;s still plenty of projects that a student can effectively get involved in.&lt;br /&gt;
&lt;br /&gt;
x264 is part of the VideoLAN candidature for Google Summer of Code 2011.&lt;br /&gt;
&lt;br /&gt;
*Lead mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible other mentors: Ronald Bultje (BBB)?&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s structure and algorithms can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].  It is somewhat outdated, but still mostly accurate.  Do note that understanding this is not necessary for all projects.&lt;br /&gt;
&lt;br /&gt;
On a lighter note, feel free to check out the [http://www.x264.nl/developers/Dark_Shikari/loren.html x264 developer quotes page].&lt;br /&gt;
&lt;br /&gt;
==Guide to getting involved==&lt;br /&gt;
*Hop on IRC--whenever!  We have a friendly community that&#039;s happy to help and to talk about pretty much whatever.  #x264 is the general discussion/user help channel and #x264dev is the development-only channel (Freenode server).  If you&#039;ve never used IRC, grab Chatzilla.  There is no such thing as a stupid question--only stupid people--so don&#039;t worry about sounding dumb.  Just get involved!&lt;br /&gt;
*Ask questions--I cannot stress this enough.  We&#039;ve had students who couldn&#039;t get anywhere because they were stuck--but didn&#039;t ask questions!  There&#039;s no shame in asking questions; that&#039;s how everyone here got involved.&lt;br /&gt;
*&#039;&#039;&#039;Stay on IRC&#039;&#039;&#039;.  Even if you have nothing to say, being around lets you get to know the community, get a feel for what&#039;s going on, and even sometimes help out by pointing the semicolon I left at the end of my if statement.  This applies during the project period too: we expect all students to &#039;&#039;&#039;always be on IRC&#039;&#039;&#039;.  This doesn&#039;t mean you have to be actually active all the time, but whenever you&#039;re free, you should be at least pingable on IRC, and whenever you&#039;re working on Summer of Code, you should be active on IRC.&lt;br /&gt;
**The best option for staying online is to get a remote shell account of some sort and leave an IRSSI client on 24/7 in a screen.  This lets you easily come back in the morning and see if you missed anything important.  checkers can provide you with a shell if you end up being accepted as a student.&lt;br /&gt;
*Even if you don&#039;t get a slot as a student, or you don&#039;t qualify for Summer of Code, we will happily provide you with the exact same support that we would give a student: it is quite reasonable and not at all uncommon for us to have projects of similar scale to Summer of Code be done by students who are not part of the Summer of Code program.&lt;br /&gt;
&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.  Most people who get involved don&#039;t know much to start with; we don&#039;t expect you to!&lt;br /&gt;
*To work on anything related directly to the encoder core (not all projects), you&#039;ll need to do some significant background reading on relevant topics.&lt;br /&gt;
**A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here].  It also has some more specific chapters on MPEG-4 Part 10 (H.264).&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting 3-4 students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.  Do remember that the project ideas listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.  For example, if you have an idea to improve compression (e.g. implementing a new algorithm) that you think we can benefit from, feel free to bring it up.&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
x264&#039;s ARM NEON assembly code is well behind its x86 assembly and is missing many optimizations.  This project would involve finishing up the ARM assembly (originally done as part of Summer of Code 2009), giving us a much-needed performance boost on ARM.&lt;br /&gt;
&lt;br /&gt;
NEON knowledge is highly recommended but not required -- but you will have to learn somehow or another.  We have a few NEON experts in the community who can help, but none are available for full-time mentoring, so keep this in mind when picking this project.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU motion estimation===&lt;br /&gt;
While porting x264 entirely to CUDA or OpenCL is an insane task, there are three possible methods that could be used to offload some work to the GPU:&lt;br /&gt;
&lt;br /&gt;
*High-complexity motion search designed to get useful predictors to be used by the main motion search.&lt;br /&gt;
*Massively parallelized lookahead motion search, designed to do a lot of the work normally done in the lookahead thread.  May also improve B-frame decision and other parts of the lookahead.&lt;br /&gt;
*Motion search designed to completely replace x264&#039;s main motion search: would require a lot of threading trickery to sync it perfectly with the main encoder threads.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  If you have a better idea, feel free to propose it, of course.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
x264&#039;s biggest weakness is that it only considers the optimal decisions for the current macroblock; it isn&#039;t aware of the effects of its decision on the future.  There may be significant benefits to be gained via non-local methods, such as iterative optimization.  However, especially in H.264, non-local RD is very difficult to do efficiently.  This is a project primarily targeted at someone already familiar with video compression: in particular, it *requires* that you have at least some idea with regards to how you would do it!  Your idea must not only improve compression, but also do so in some sane amount of time (a 2x speed cost might be tolerable, 400x most certainly not).&lt;br /&gt;
&lt;br /&gt;
This is probably not very difficult from a coding standpoint and is really more of an algorithmic problem.  Since we haven&#039;t done it already, that of course means it&#039;s a &#039;&#039;hard&#039;&#039; algorithmic problem.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
This project would be to implement the multiview coding extension (read: 3D video) of H.264.  This would mostly be a high-level project: affecting headers, reference handling, and so forth, as opposed to low level compression steps.  This would let x264 be used to author 3D Blu-rays and encode 3D content more efficiently.&lt;br /&gt;
&lt;br /&gt;
This project would involve reading a lot of spec and implementing it in the cleanest way possible.  It is probably not inordinately difficult.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
Unlike many other projects, such as ffmpeg, x264&#039;s policy for qualification tasks is to use tasks that are directly useful to &#039;&#039;you&#039;&#039; for your summer project.  That is, the projects directly lead you into the start of your project and create a base for you to work off for the rest of the summer.  This is, in our opinion, much better than making you work on something completely unrelated.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;relatively difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
None of these tasks are supposed to take more than a few days to a week of work.  &#039;&#039;&#039;If you successfully complete one, we will almost surely accept you as a student.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on ARM by at least 2% by writing new NEON functions.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be at all watchable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  Assuming you didn&#039;t propose another, the hierarchical search works via the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
Implement an extremely minimal prototype of some part of your idea.  It can be ugly, hacky, and limited; all that matters is you demonstrate that you can take an idea and turn it into code in x264.  Bonus points if the idea actually works.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
Read the spec and write an outline of what changes you&#039;ll have to make to x264 (specifically, with x264 in mind) in order to implement MVC.  In other words, a design document.  It doesn&#039;t have to be very formal, but it needs to clearly demonstrate that you have put some amount of thought into this.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18749</id>
		<title>SoC x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18749"/>
		<updated>2011-03-03T12:11:23Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction to x264 and Summer of Code==&lt;br /&gt;
[[x264]] is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, television broadcast, and Blu-ray authoring.  It outclasses practically all commercial implementations both speed and compression-wise.  While not actually part of VLC or ffmpeg, it is a major library used by both, licensed under the GPL.  Due to its popularity in the commercial world (for example, Youtube and Facebook rely on it), many companies have offered bounties in the past for features and improvements that they found useful.&lt;br /&gt;
&lt;br /&gt;
But don&#039;t let that all scare you.  There&#039;s still plenty of projects that a student can effectively get involved in.&lt;br /&gt;
&lt;br /&gt;
x264 is part of the VideoLAN candidature for Google Summer of Code 2011.&lt;br /&gt;
&lt;br /&gt;
*Lead mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible other mentors: Ronald Bultje (BBB)?&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s structure and algorithms can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].  It is somewhat outdated, but still mostly accurate.  Do note that understanding this is not necessary for all projects.&lt;br /&gt;
&lt;br /&gt;
On a lighter note, feel free to check out the [http://www.x264.nl/developers/Dark_Shikari/loren.html x264 developer quotes page].&lt;br /&gt;
&lt;br /&gt;
==Guide to getting involved==&lt;br /&gt;
*Hop on IRC--whenever!  We have a friendly community that&#039;s happy to help and to talk about pretty much whatever.  #x264 is the general discussion/user help channel and #x264dev is the development-only channel (Freenode server).  If you&#039;ve never used IRC, grab Chatzilla.  There is no such thing as a stupid question--only stupid people--so don&#039;t worry about sounding dumb.  Just get involved!&lt;br /&gt;
*Ask questions--I cannot stress this enough.  We&#039;ve had students who couldn&#039;t get anywhere because they were stuck--but didn&#039;t ask questions!  There&#039;s no shame in asking questions; that&#039;s how everyone here got involved.&lt;br /&gt;
*&#039;&#039;&#039;Stay on IRC&#039;&#039;&#039;.  Even if you have nothing to say, being around lets you get to know the community, get a feel for what&#039;s going on, and even sometimes help out by pointing the semicolon I left at the end of my if statement.  This applies during the project period too: we expect all students to &#039;&#039;&#039;always be on IRC&#039;&#039;&#039;.  This doesn&#039;t mean you have to be actually active all the time, but whenever you&#039;re free, you should be at least pingable on IRC, and whenever you&#039;re working on Summer of Code, you should be active on IRC.&lt;br /&gt;
**The best option for staying online is to get a remote shell account of some sort and leave an IRSSI client on 24/7 in a screen.  This lets you easily come back in the morning and see if you missed anything important.  checkers can provide you with a shell if you end up being accepted as a student.&lt;br /&gt;
*Even if you don&#039;t get a slot as a student, or you don&#039;t qualify for Summer of Code, we will happily provide you with the exact same support that we would give a student: it is quite reasonable and not at all uncommon for us to have projects of similar scale to Summer of Code be done by students who are not part of the Summer of Code program.&lt;br /&gt;
&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.  Most people who get involved don&#039;t know much to start with; we don&#039;t expect you to!&lt;br /&gt;
*To work on anything related directly to the encoder core (not all projects), you&#039;ll need to do some significant background reading on relevant topics.&lt;br /&gt;
**A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here].  It also has some more specific chapters on MPEG-4 Part 10 (H.264).&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting 3-4 students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.  Do remember that the project ideas listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.  For example, if you have an idea to improve compression (e.g. implementing a new algorithm) that you think we can benefit from, feel free to bring it up.&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
x264&#039;s ARM NEON assembly code is well behind its x86 assembly and is missing many optimizations.  This project would involve finishing up the ARM assembly (originally done as part of Summer of Code 2009), giving us a much-needed performance boost on ARM.&lt;br /&gt;
&lt;br /&gt;
NEON knowledge is highly recommended but not required -- but you will have to learn somehow or another.  We have a few NEON experts in the community who can help, but none are available for full-time mentoring, so keep this in mind when picking this project.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU motion estimation===&lt;br /&gt;
While porting x264 entirely to CUDA or OpenCL is an insane task, there are three possible methods that could be used to offload some work to the GPU:&lt;br /&gt;
&lt;br /&gt;
*High-complexity motion search designed to get useful predictors to be used by the main motion search.&lt;br /&gt;
*Massively parallelized lookahead motion search, designed to do a lot of the work normally done in the lookahead thread.  May also improve B-frame decision and other parts of the lookahead.&lt;br /&gt;
*Motion search designed to completely replace x264&#039;s main motion search: would require a lot of threading trickery to sync it perfectly with the main encoder threads.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  If you have a better idea, feel free to propose it, of course.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
x264&#039;s biggest weakness is that it only considers the optimal decisions for the current macroblock; it isn&#039;t aware of the effects of its decision on the future.  There may be significant benefits to be gained via non-local methods, such as iterative optimization.  However, especially in H.264, non-local RD is very difficult to do efficiently.  This is a project primarily targeted at someone already familiar with video compression: in particular, it *requires* that you have at least some idea with regards to how you would do it!  Your idea must not only improve compression, but also do so in some sane amount of time (a 2x speed cost might be tolerable, 400x most certainly not).&lt;br /&gt;
&lt;br /&gt;
This is probably not very difficult from a coding standpoint and is really more of an algorithmic problem.  Since we haven&#039;t done it already, that of course means it&#039;s a &#039;&#039;hard&#039;&#039; algorithmic problem.&lt;br /&gt;
&lt;br /&gt;
===H.264/MVC===&lt;br /&gt;
This project would be to implement the multiview coding extension (read: 3D video) of H.264.  This would mostly be a high-level project: affecting headers, reference handling, and so forth, as opposed to low level compression steps.  This would let x264 be used to author 3D Blu-rays and encode 3D content more efficiently.&lt;br /&gt;
&lt;br /&gt;
This project would involve reading a lot of spec and implementing it in the cleanest way possible.  It is probably not inordinately difficult.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
Unlike many other projects, such as ffmpeg, x264&#039;s policy for qualification tasks is to use tasks that are directly useful to &#039;&#039;you&#039;&#039; for your summer project.  That is, the projects directly lead you into the start of your project and create a base for you to work off for the rest of the summer.  This is, in our opinion, much better than making you work on something completely unrelated.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;relatively difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
None of these tasks are supposed to take more than a few days to a week of work.  &#039;&#039;&#039;If you successfully complete one, we will almost surely accept you as a student.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on ARM by at least 2% by writing new NEON functions.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be at all watchable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  Assuming you didn&#039;t propose another, the hierarchical search works via the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
Implement an extremely minimal prototype of some part of your idea.  It can be ugly, hacky, and limited; all that matters is you demonstrate that you can take an idea and turn it into code in x264.  Bonus points if the idea actually works.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18748</id>
		<title>SoC x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18748"/>
		<updated>2011-03-03T12:05:29Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: Initial SoC 2011 page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction to x264 and Summer of Code==&lt;br /&gt;
[[x264]] is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, television broadcast, and Blu-ray authoring.  It outclasses practically all commercial implementations both speed and compression-wise.  While not actually part of VLC or ffmpeg, it is a major library used by both, licensed under the GPL.  Due to its popularity in the commercial world (for example, Youtube and Facebook rely on it), many companies have offered bounties in the past for features and improvements that they found useful.&lt;br /&gt;
&lt;br /&gt;
But don&#039;t let that all scare you.  There&#039;s still plenty of projects that a student can effectively get involved in.&lt;br /&gt;
&lt;br /&gt;
x264 is part of the VideoLAN candidature for Google Summer of Code 2011.&lt;br /&gt;
&lt;br /&gt;
*Lead mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible other mentors: Ronald Bultje (BBB)?&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s structure and algorithms can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].  It is somewhat outdated, but still mostly accurate.  Do note that understanding this is not necessary for all projects.&lt;br /&gt;
&lt;br /&gt;
On a lighter note, feel free to check out the [http://www.x264.nl/developers/Dark_Shikari/loren.html x264 developer quotes page].&lt;br /&gt;
&lt;br /&gt;
==Guide to getting involved==&lt;br /&gt;
*Hop on IRC--whenever!  We have a friendly community that&#039;s happy to help and to talk about pretty much whatever.  #x264 is the general discussion/user help channel and #x264dev is the development-only channel (Freenode server).  If you&#039;ve never used IRC, grab Chatzilla.  There is no such thing as a stupid question--only stupid people--so don&#039;t worry about sounding dumb.  Just get involved!&lt;br /&gt;
*Ask questions--I cannot stress this enough.  We&#039;ve had students who couldn&#039;t get anywhere because they were stuck--but didn&#039;t ask questions!  There&#039;s no shame in asking questions; that&#039;s how everyone here got involved.&lt;br /&gt;
*&#039;&#039;&#039;Stay on IRC&#039;&#039;&#039;.  Even if you have nothing to say, being around lets you get to know the community, get a feel for what&#039;s going on, and even sometimes help out by pointing the semicolon I left at the end of my if statement.  This applies during the project period too: we expect all students to &#039;&#039;&#039;always be on IRC&#039;&#039;&#039;.  This doesn&#039;t mean you have to be actually active all the time, but whenever you&#039;re free, you should be at least pingable on IRC, and whenever you&#039;re working on Summer of Code, you should be active on IRC.&lt;br /&gt;
**The best option for staying online is to get a remote shell account of some sort and leave an IRSSI client on 24/7 in a screen.  This lets you easily come back in the morning and see if you missed anything important.  checkers can provide you with a shell if you end up being accepted as a student.&lt;br /&gt;
*Even if you don&#039;t get a slot as a student, or you don&#039;t qualify for Summer of Code, we will happily provide you with the exact same support that we would give a student: it is quite reasonable and not at all uncommon for us to have projects of similar scale to Summer of Code be done by students who are not part of the Summer of Code program.&lt;br /&gt;
&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.  Most people who get involved don&#039;t know much to start with; we don&#039;t expect you to!&lt;br /&gt;
*To work on anything related directly to the encoder core (not all projects), you&#039;ll need to do some significant background reading on relevant topics.&lt;br /&gt;
**A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here].  It also has some more specific chapters on MPEG-4 Part 10 (H.264).&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting 3-4 students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.  Do remember that the project ideas listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.  For example, if you have an idea to improve compression (e.g. implementing a new algorithm) that you think we can benefit from, feel free to bring it up.&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
x264&#039;s ARM NEON assembly code is well behind its x86 assembly and is missing many optimizations.  This project would involve finishing up the ARM assembly (originally done as part of Summer of Code 2009), giving us a much-needed performance boost on ARM.&lt;br /&gt;
&lt;br /&gt;
NEON knowledge is highly recommended but not required -- but you will have to learn somehow or another.  We have a few NEON experts in the community who can help, but none are available for full-time mentoring, so keep this in mind when picking this project.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU motion estimation===&lt;br /&gt;
While porting x264 entirely to CUDA or OpenCL is an insane task, there are three possible methods that could be used to offload some work to the GPU:&lt;br /&gt;
&lt;br /&gt;
*High-complexity motion search designed to get useful predictors to be used by the main motion search.&lt;br /&gt;
*Massively parallelized lookahead motion search, designed to do a lot of the work normally done in the lookahead thread.  May also improve B-frame decision and other parts of the lookahead.&lt;br /&gt;
*Motion search designed to completely replace x264&#039;s main motion search: would require a lot of threading trickery to sync it perfectly with the main encoder threads.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  If you have a better idea, feel free to propose it, of course.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
x264&#039;s biggest weakness is that it only considers the optimal decisions for the current macroblock; it isn&#039;t aware of the effects of its decision on the future.  There may be significant benefits to be gained via non-local methods, such as iterative optimization.  However, especially in H.264, non-local RD is very difficult to do efficiently.  This is a project primarily targeted at someone already familiar with video compression: in particular, it *requires* that you have at least some idea with regards to how you would do it!  Your idea must not only improve compression, but also do so in some sane amount of time (a 2x speed cost might be tolerable, 400x most certainly not).&lt;br /&gt;
&lt;br /&gt;
This is probably not very difficult from a coding standpoint and is really more of an algorithmic problem.  Since we haven&#039;t done it already, that of course means it&#039;s a &#039;&#039;hard&#039;&#039; algorithmic problem.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
Unlike many other projects, such as ffmpeg, x264&#039;s policy for qualification tasks is to use tasks that are directly useful to &#039;&#039;you&#039;&#039; for your summer project.  That is, the projects directly lead you into the start of your project and create a base for you to work off for the rest of the summer.  This is, in our opinion, much better than making you work on something completely unrelated.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;relatively difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
None of these tasks are supposed to take more than a few days to a week of work.  &#039;&#039;&#039;If you successfully complete one, we will almost surely accept you as a student.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Optimization (ARM)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on ARM by at least 2% by writing new NEON functions.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be at all watchable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  Assuming you didn&#039;t propose another, the hierarchical search works via the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Non-local RD optimization===&lt;br /&gt;
Implement an extremely minimal prototype of some part of your idea.  It can be ugly, hacky, and limited; all that matters is you demonstrate that you can take an idea and turn it into code in x264.  Bonus points if the idea actually works.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2009&amp;diff=18601</id>
		<title>SoC x264 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SoC_x264_2009&amp;diff=18601"/>
		<updated>2011-01-11T03:49:15Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[x264]] has loads of possibilities for [[SoC 2009]] projects.  Those listed here are merely suggestions; other ideas are always possible if they fit the time and difficulty constraints of SoC.&lt;br /&gt;
&lt;br /&gt;
This is part of the VideoLAN candidature for Google Summer of Code 2009.&lt;br /&gt;
&lt;br /&gt;
*Mentor (and author of this page): Jason Garrett-Glaser (Dark Shikari)&lt;br /&gt;
*Possible backup mentor: Holger Lubitz&lt;br /&gt;
&lt;br /&gt;
==Introduction to x264==&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
While not actually part of VLC or ffmpeg (it has its own codebase), it is a major library used by both, licensed under the GPL, 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 Youtube and Facebook.  Some companies, such as Avail Media, have in the past offered bounties on improvements to the encoder.&lt;br /&gt;
&lt;br /&gt;
An overview of x264&#039;s algorithm can be found [http://akuvian.org/src/x264/overview_x264_v8_5.pdf here].&lt;br /&gt;
==Skills needed==&lt;br /&gt;
These are required for all listed projects and probably anything not listed, too.&lt;br /&gt;
*Basic C programming.&lt;br /&gt;
*Basic understanding of video encoding, or at least willingness to do the appropriate reading up on the topic before the summer begins.&lt;br /&gt;
*Confidence in the ability to learn the basics of following and similar topics (though not all projects will require such information):&lt;br /&gt;
:*Discrete cosine transform and similar frequency transforms&lt;br /&gt;
:*Motion estimation and compensation&lt;br /&gt;
:*Quantization and entropy encoding&lt;br /&gt;
A PDF with a chapter that can serve as a primer to video compression can be found [http://www.mediafire.com/download.php?auxd23m2snw here] (new version [http://dl.dropbox.com/u/2701213/pdfs/0470516925Video.pdf here]).  It also has some more specific chapters on MPEG-4 Part 2 and Part 10.&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
We are probably only accepting one or two students this year.  Thus, you will have to prove that you are absolutely able to do your project over the summer--see the qualification tasks.&lt;br /&gt;
&lt;br /&gt;
===Optimization (x86)===&lt;br /&gt;
x264 prides itself on being one of the most optimized programs in existence while still being reasonably readable and maintainable.  This project is about furthering that goal: make it even faster without sacrificing code quality.&lt;br /&gt;
&lt;br /&gt;
This is probably the hardest task, as x264 is already so absurdly optimized that going significantly further is going to be very difficult.  As such, the qualification task for this project (see below) requires you to prove that you can get at least somewhere.  The goal here is at least a 5-10% performance increase in x264 on x86 (and ideally, other CPUs too, but processor-specific optimizations are allowed here).  Some unconventional ideas in addition to the obvious tasks of writing loads of assembly and finding cases where the C code can be further optimized:&lt;br /&gt;
&lt;br /&gt;
*Cache profiling: try to minimize cache misses.&lt;br /&gt;
*Code size profiling: find the inherent &amp;quot;value&amp;quot; in clock cycles of a line of cache and use this to try to optimize the code size of existing assembly.&lt;br /&gt;
*Aliasing optimizations: find places where aliasing is hurting the compiler&#039;s ability to optimize.&lt;br /&gt;
&lt;br /&gt;
Not recommended for anyone other than hardcore assembly gurus.&lt;br /&gt;
&lt;br /&gt;
===ARM Support===&lt;br /&gt;
x264 currently focuses on x86--and to a lesser extent--PowerPC.  ARM is becoming more and more important every year--yet currently x264 cannot even run on some ARMs, and there&#039;s no configure support.  Let alone the fact that there&#039;s no ARM assembly.  This task would be to set up ARM support in configure, fix all unaligned accesses in the C code (there&#039;s probably only one), and then writing ARM assembly for all major DSP functions.  There are already some similar ARM functions in ffmpeg for H.264 decoding which could be useful to you in this task.  The goal here is to make x264 at least 4-5 times faster on ARM by implementing all the major assembly functions on ARM.&lt;br /&gt;
&lt;br /&gt;
Also not recommended for anyone other than hardcore assembly gurus.&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
x264 currently only supports the 4:2:0 colorspace, also known as YV12.  However, many profession applications require higher precision in the form of 4:2:2 or 4:4:4 chroma subsampling.  Furthermore, such sampling is useful for many artificial video sources, like video game captures and presentations, where sharp chroma edges are blurred by the 4:2:0 sampling.  This is a large project that, unlike the previous two, probably does not involve modifying any assembly if you don&#039;t want to.  In cases where things would be easier if the assembly &#039;&#039;was&#039;&#039; modified, the other developers will probably be willing to do it for you if you aren&#039;t an assembly guru.&lt;br /&gt;
&lt;br /&gt;
The project mostly covers changing every place in the code where YV12 was assumed--and making it variable.  It also involves handling the potential new syntax elements and adding a new Hadamard transform for the new chroma DC channels.  It also may involve modifying x264_scan8, which could be a rather obnoxious task given how many parts of x264 assume certain properties of it.&lt;br /&gt;
&lt;br /&gt;
This project will involve a lot of coding and a lot of debugging, but none of it should be particularly complex.&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
In practice, this probably means CUDA, as OpenCL is not supported by anything yet.&lt;br /&gt;
&lt;br /&gt;
While porting x264 entirely to CUDA is an insane task, putting a lookahead motion estimation on the GPU could be useful both for quality and performance.  Tricky catches here include:&lt;br /&gt;
&lt;br /&gt;
*The motion estimation method has to support x264&#039;s threading model.  The easiest way to do this might be, as suggested, to make it into a lookahead function that is run on entire frames before the main encoding begins.&lt;br /&gt;
*The algorithm has to be able to make some sorts of basic mode decisions well enough to to be comparable with x264&#039;s basic SATD mode decision.  This means you will have to implement the hpel and qpel interpolation algorithms, along with the SATD (Sum of Hadamard Transformed Differences) comparison method.&lt;br /&gt;
*Interlaced mode.&lt;br /&gt;
&lt;br /&gt;
The general algorithm that has been agreed on after a great deal of discussion is the hierarchical search method.  More description of this method is in the Qualification Tasks section.&lt;br /&gt;
&lt;br /&gt;
This project is not recommended unless you have a very significant amount of experience with CUDA.&lt;br /&gt;
&lt;br /&gt;
===Weighted P-frame Prediction===&lt;br /&gt;
Of the projects listed, this is the only one with the potential to significantly improve encoding quality.  Weighted P-frame prediction lets you assign weights to the frames in a reference list for the current frame, values to multiply all the pixels by.  This is incredibly useful in dealing with fades, camera flashes, etc.  However, it would require both a good enough algorithm to find optimal weighting factors and an efficient enough algorithm to be useful in practice.&lt;br /&gt;
&lt;br /&gt;
A [http://akuvian.org/src/x264/x264_wpredp.0.diff patch] already exists for this--but it is so old (from the early days of x264) that it is practically useless except as a guide to how to start implementing it now.&lt;br /&gt;
&lt;br /&gt;
Note that the challenge here is twofold: add support for weighted P-frame prediction and make an algorithm good enough and fast enough to make the feature useful.&lt;br /&gt;
&lt;br /&gt;
==Qualification tasks==&lt;br /&gt;
This year, the qualification tasks will represent the start of your summer project.  We&#039;re willing to give all the technical help you need, but of course we won&#039;t write the code for you.  &amp;quot;Passing&amp;quot; a qualification task is at the mentor&#039;s discretion.  Note these are designed to be &#039;&#039;&#039;difficult&#039;&#039;&#039; and help lead you into your main project.  If you can&#039;t do the qualification task for the project, you surely cannot do the project either!&lt;br /&gt;
&lt;br /&gt;
Again, to reiterate, we will guide you through as much of the codebase as you need to do your work.  &#039;&#039;&#039;This page is not supposed to give you all the information you need to do these tasks: you are expected to contact us for more information.&#039;&#039;&#039;  Feel free to ask tons of questions.  On #x264dev IRC channel on Freenode, of course.&lt;br /&gt;
&lt;br /&gt;
===Optimization (x86)===&lt;br /&gt;
If you&#039;re interested in the optimization task, the qualification task is to speed up x264 on x86 (32 or 64-bit) by 1-2% on &amp;quot;normal settings&amp;quot; without changing the output.  This is &#039;&#039;&#039;much&#039;&#039;&#039; harder than it sounds.&lt;br /&gt;
&lt;br /&gt;
===ARM Support===&lt;br /&gt;
If you&#039;re interested in the ARM task, your qualification task will be to:&lt;br /&gt;
&lt;br /&gt;
* Fix the unaligned access bug in the bitstream writer.&lt;br /&gt;
* Write NEON SIMD assembly for at least a few of the simpler significant DSP functions (SAD, SATD, etc).&lt;br /&gt;
&lt;br /&gt;
===4:4:4 and 4:2:2 Colorspaces===&lt;br /&gt;
If you&#039;re interested in working on this project, your task is to produce an x264-encoded bitstream in 4:4:4 or 4:2:2 format.  It does not actually have to be remotely viewable (that is, you don&#039;t have to implement any of the code to handle motion compensation, deblocking, or anything else involving 4:4:4/4:2:2 chroma data), but the bitstream has to be written correctly (correct syntax elements).  The patch you write for this will be the starting point for your main project.&lt;br /&gt;
&lt;br /&gt;
===GPU Motion Estimation===&lt;br /&gt;
Your task for this project will be to write a C version of your final algorithm.  It doesn&#039;t need to deal with any of the corner cases; all it has to do is run before the main encoding loop, deciding the motion vectors for the frame.  It doesn&#039;t even have to work with threading.  It doesn&#039;t have to support sub-16x16 partitions either.  The hierarchical search works via the following algorithm.&lt;br /&gt;
&lt;br /&gt;
* Set N equal to 2^M, where M is an integer.  A common M is 4.&lt;br /&gt;
* WHILE N is greater than 1:&lt;br /&gt;
:* Downscale the image (from the original) by a factor of N.&lt;br /&gt;
:* Do an ordinary diamond motion search on the image with block size 16x16.  Assume the predicted motion vector to be equal to the median of the top, left, and top right motion vectors (as per H.264 MV prediction)... but use the motion vectors from the previous iteration, not the current for these (this is what allows you to parallelize things with CUDA).&lt;br /&gt;
:* For each block after searching, split the motion vectors of that block into 4 separate (but equal) motion vectors.  These will be used as the starting point for the searches in the next iteration.  Each iteration progressively refines the result at a progressively lesser downscale.&lt;br /&gt;
:* N = N/2&lt;br /&gt;
* Do a final refine at no downscale at all.&lt;br /&gt;
&lt;br /&gt;
===Weighted P-frame Prediction===&lt;br /&gt;
The task for this project is to add support for Weighted P-frame Prediction--but not to write any sort of handling of it from an algorithmic standpoint, so no algorithm to decide the weights.  That is, all the weights are just set to some constant value until we come up with a better way to do things.  As with the other tasks, you can make many simplifications here to avoid corner cases, such as ignoring multithreading.  Another simplification you can make is to only allow a weight on the first reference frame, or even have the program be completely ignorant of the weighted version of the frame until the final encode.  All that matters is you get the basic framework working.&lt;br /&gt;
&lt;br /&gt;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode.&lt;br /&gt;
&lt;br /&gt;
You should also contact the admin [[User:J-b|jb]].&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_asm_intro&amp;diff=18063</id>
		<title>X264 asm intro</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_asm_intro&amp;diff=18063"/>
		<updated>2010-12-02T13:16:29Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Open common/x86/predict-a.asm, go to predict_4x4_dc_mmxext, [http://git.videolan.org/?p=x264.git;a=blob;f=common/x86/predict-a.asm;h=a05e91beda809b5e113df8ba122496e756442df8;hb=HEAD#l292 git link]&amp;lt;br&amp;gt;&lt;br /&gt;
This function does the following:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;  A B C D&lt;br /&gt;
E X X X X&lt;br /&gt;
F X X X X&lt;br /&gt;
G X X X X&lt;br /&gt;
H X X X X&amp;lt;/pre&amp;gt;&lt;br /&gt;
It calculates (A+B+C+D+E+F+G+H+4)/8, and sets all the Xs equal to that value where those are 8-bit pixels in a 2D array with a stride of FDEC_STRIDE.&lt;br /&gt;
:&amp;lt;Q&amp;gt; What is FDEC_STRIDE?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; x264 does all its pixel operations on the current macroblock in a temporary buffer of constant stride.  It&#039;s faster that way, and better on cache.  So for example, motion compensation will write to this buffer (or intra prediction).&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; What&#039;s a stride?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Stride is the distance between (x,y) and (x,y+1), so to get from one row to the next.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you understand what the function does, let&#039;s look at the asm.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;cglobal predict_4x4_dc_mmxext, 1,4&amp;lt;/pre&amp;gt;&lt;br /&gt;
cglobal: declares a function accessible from outside of asm&amp;lt;br&amp;gt;&lt;br /&gt;
The function&#039;s name is &amp;lt;tt&amp;gt;x264_predict_4x4_dc_mmxext&amp;lt;/tt&amp;gt; (the &amp;lt;tt&amp;gt;x264_&amp;lt;/tt&amp;gt; is auto-added).&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;1&amp;quot; means &amp;quot;we have one argument.  Put it in &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt;.&amp;quot;, that argument is uint8_t *src&amp;lt;br&amp;gt;&lt;br /&gt;
If we had a second argument, we&#039;d say &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; and the second one would go in &amp;lt;tt&amp;gt;r1&amp;lt;/tt&amp;gt; and if we had a third, it&#039;d go in &amp;lt;tt&amp;gt;r2&amp;lt;/tt&amp;gt;, etc.  So at the start of the function, &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt; contains uint8_t *src.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; &amp;quot;that argument is uint8_t *src&amp;quot;, what does this mean?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; See the comment above: &amp;lt;tt&amp;gt;void predict_4x4_dc( uint8_t *src )&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; what tells the function that it&#039;s uint8_t?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Nothing. It doesn&#039;t need to know. Types are a C-ism.&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;4&amp;quot; means we want x264 to give us 4 registers to use. &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r2&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt;. This, of course, includes the &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt; used for the parameter. So in short, after the first line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt; = src&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;r1&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;r2&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt; = free&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;r4&amp;lt;/tt&amp;gt; and up: can&#039;t use.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; That&#039;s x86inc.asm&#039;s doing right?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Yes, but we aren&#039;t going into that.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; I assume it means we can use them, but if you do, it&#039;ll screw around with something you don&#039;t want to?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Yes, which is why you can&#039;t use it.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So now, this function as you can see has 4 real steps:&amp;lt;br&amp;gt;&lt;br /&gt;
# Sum up A through D&amp;lt;br&amp;gt;&lt;br /&gt;
# Sum up E through H&amp;lt;br&amp;gt;&lt;br /&gt;
# Do the math to get our final value&amp;lt;br&amp;gt;&lt;br /&gt;
# Store it into the 16 output Xs&amp;lt;br&amp;gt;&lt;br /&gt;
So let&#039;s see how this asm implements these.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First, we&#039;ll look at step 1&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;pxor mm7, mm7&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;mm7&amp;lt;/tt&amp;gt; is a 64-bit register.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;xor&amp;lt;/tt&amp;gt;, as you might know, is a nice way to zero things.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; How do you tell how large a register is?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; &amp;lt;tt&amp;gt;mm*&amp;lt;/tt&amp;gt; is 64-bit, &amp;lt;tt&amp;gt;xmm*&amp;lt;/tt&amp;gt; is 128-bit.  The mm registers have a fixed size, only the general purpose registers are wordsize-dependant on x86&amp;lt;br&amp;gt;&lt;br /&gt;
So, now &amp;lt;tt&amp;gt;mm7&amp;lt;/tt&amp;gt; is zero.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;movd mm0, [r0-FDEC_STRIDE]&amp;lt;/pre&amp;gt;&lt;br /&gt;
This sets &amp;lt;tt&amp;gt;mm0&amp;lt;/tt&amp;gt; equal to {A,B,C,D,0,0,0,0}&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Oh, and how do we know the mm* registers are free?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; They always are.&amp;lt;br&amp;gt;&lt;br /&gt;
In x86, b = byte, w = word (16-bit), d = doubleword (32-bit), q = quadword (64-bit), dq = double quadword (128-bit)&amp;lt;br&amp;gt;&lt;br /&gt;
So &amp;lt;tt&amp;gt;movd&amp;lt;/tt&amp;gt; = move doubleword = move 32 bits&amp;lt;br&amp;gt;&lt;br /&gt;
So &amp;lt;tt&amp;gt;movd&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;mm0&amp;lt;/tt&amp;gt; will load data to the first 4 bytes and zero the rest. Thus &amp;lt;tt&amp;gt;mm0&amp;lt;/tt&amp;gt; is now ABCD0000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[r0-FDEC_STRIDE]&amp;lt;/tt&amp;gt; is equivalent to &amp;lt;tt&amp;gt;*(src-FDEC_STRIDE)&amp;lt;/tt&amp;gt; in Cstyle.  Hence why it points to ABCD.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Are the &amp;quot;A B C D&amp;quot; on top of the &amp;quot;X X X X&amp;quot; or do they start on top of the &amp;quot;E&amp;quot;?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Former&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;psadbw mm0, mm7&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is what &amp;lt;tt&amp;gt;psadbw&amp;lt;/tt&amp;gt; does:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;uint16_t psadbw( uint8_t in[8], uint8_t out[8] )&lt;br /&gt;
{&lt;br /&gt;
    uint16_t sum = 0;&lt;br /&gt;
    for(int i = 0; i &amp;lt; 8; i++)&lt;br /&gt;
        sum += abs(in[i]-out[i]);&lt;br /&gt;
    return sum;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parse that for a moment&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; where is the sum stored?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; &amp;lt;tt&amp;gt;psadbw X, Y&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; is where the output is stored.  So &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; is overwritten. So it&#039;s stored in the low 16 bits of &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Now, of course, &amp;lt;tt&amp;gt;mm7&amp;lt;/tt&amp;gt; is zero!  So we get abs(A-0) + abs(B-0) + abs(C-0) + abs(D-0) + abs(0-0) ...  Or A+B+C+D.&amp;lt;br&amp;gt;&lt;br /&gt;
So after &amp;lt;tt&amp;gt;psadbw&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;mm0&amp;lt;/tt&amp;gt; is A+B+C+D and &amp;lt;tt&amp;gt;mm7&amp;lt;/tt&amp;gt; is still zero.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;movd r3d, mm0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we move the result to &amp;lt;tt&amp;gt;r3d&amp;lt;/tt&amp;gt;, a general purpose register&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; is &amp;lt;tt&amp;gt;r3d&amp;lt;/tt&amp;gt; one of the things that come with the 4 registers that are free?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; This is an optimization: on 64-bit, using 32-bit versions of registers results in smaller instruction opcode sizes. So it&#039;s really just &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r2&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt; are the 4 that are free. So we&#039;re using &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt;. Note: the suffix &#039;d&#039; means the 32-bit version, as opposed to the native-size version.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Get moving with part 2 of the algorithm.&amp;lt;br&amp;gt;&lt;br /&gt;
Now &amp;lt;tt&amp;gt;r0&amp;lt;/tt&amp;gt; has our source pointer, and &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt; has A+B+C+D. While the CPU is busy doing that, we&#039;ll go and do part 2, the E+F+G+H.&amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately, these bytes aren&#039;t in a straight line (&amp;quot;straight line&amp;quot; meaning &amp;quot;adjacent in memory&amp;quot;). So we can&#039;t just load EFGH and sad them. We&#039;ll have to do it the naive/slow way.  So, now we&#039;re going to load E, F, G, H.  Now you might notice some preprocessor commands here. &amp;lt;tt&amp;gt;%assign&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;%rep&amp;lt;/tt&amp;gt;, etc are preprocessor commands.&amp;lt;br&amp;gt;&lt;br /&gt;
So, first step: load E into &amp;lt;tt&amp;gt;r1d&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;movzx r1d, byte [r0-1]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;movzx&amp;lt;/tt&amp;gt; means &amp;quot;move, with zero extend&amp;quot;.  In C this would be: int r1d = r0[-1];&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; My C is a bit rusty, what does that do? does it just take the location in memory before r0[0]?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Yes, [] is just a dereference of a pointer.  *(r0-1) = r0[-1] = (r0-1)[0]&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; what is r0-1 in that ascii matrix?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; E.&amp;lt;br&amp;gt;&lt;br /&gt;
So, here&#039;s what these 7 lines look like after the macro runs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;movzx  r1d, byte [r0-1]&lt;br /&gt;
movzx  r2d, byte [r0+FDEC_STRIDE*1-1]&lt;br /&gt;
add    r1d, r2d&lt;br /&gt;
movzx  r2d, byte [r0+FDEC_STRIDE*2-1]&lt;br /&gt;
add    r1d, r2d&lt;br /&gt;
movzx  r2d, byte [r0+FDEC_STRIDE*3-1]&lt;br /&gt;
add    r1d, r2d&amp;lt;/pre&amp;gt;&lt;br /&gt;
in order: load E, load F, add F to E, load G, add G to E, load H, add H to E&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Where is n stored?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; It isn&#039;t. It&#039;s a preprocessor variable.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Oh, so it&#039;s like a macro?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; It is a macro.  Note the pre-processed code above. Everything starting with % in yasm syntax is a macro&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ok, now we have to do step 3: calculating A+B+C+D+E+F+G+H+4 / 8&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;lea r1d, [r1+r3+4]&amp;lt;/pre&amp;gt;&lt;br /&gt;
First, let&#039;s go over x86 addressing.  What you can put inside the brackets is not infinite. Here&#039;s the capabilities, specifically: [REG1 + REG2 * {1,2,4,8} + CONST]&amp;lt;br&amp;gt;&lt;br /&gt;
A register, plus another register * 1/2/4/8, plus a constant (positive or negative). As you might note, this is pretty useful for accessing things like arrays.  E.g. array[n+5], where array is an int array, would be: [array + n*4 + 20]&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; I suppose the [r0+FDEC_STRIDE*n-1] bit gets simplified on assembly to [register + const]?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; Yes, yasm sums up constants for you.&amp;lt;br&amp;gt;&lt;br /&gt;
So, as you might note, that&#039;s a pretty powerful addressing system. That&#039;s more powerful than, say... &amp;quot;add&amp;quot;. So why not expose it in an instruction to let us use it for math? So Intel did.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;lea X, [expr]&amp;lt;/tt&amp;gt; sets X equal to the value of expr just as fast as add.  So that &amp;lt;tt&amp;gt;lea&amp;lt;/tt&amp;gt; does r1d = r1 + r3 + 4&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Wait, how does that work?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; &amp;lt;tt&amp;gt;lea&amp;lt;/tt&amp;gt; runs the [REG1 + REG2 * {1,2,4,8} + CONST] math on its second argument and adds to the first.  &amp;lt;tt&amp;gt;lea&amp;lt;/tt&amp;gt; doesn&#039;t actually address it.  It just calculates the result and stores it instead of going to memory.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; And it&#039;s faster than add?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; It&#039;s just as fast except that you can do more with it.&amp;lt;br&amp;gt;&lt;br /&gt;
Now, technically, you can do more adds per cycle than &amp;lt;tt&amp;gt;lea&amp;lt;/tt&amp;gt;, so you shouldn&#039;t go replacing all your adds with &amp;lt;tt&amp;gt;lea&amp;lt;/tt&amp;gt;.  But if you can use it to do more than one thing at a time, it&#039;s a big win. So this lets us add &amp;lt;tt&amp;gt;r3&amp;lt;/tt&amp;gt;, and add 4, in one op.&lt;br /&gt;
&amp;lt;pre&amp;gt;shr r1d, 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
There&#039;s one that you can probably figure out yourself - shift right.&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; Why are we shifting right?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; +4 for correct rounding, &amp;gt;&amp;gt; 3 to divide (&amp;gt;&amp;gt;3 = /(2^3) = /8).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now for the final part: storing the results.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;imul r1d, 0x01010101&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is called a &amp;quot;splat&amp;quot; and you may have seen it in C as well.  We&#039;re turning an 8-bit value into 4x that value, e.g. A -&amp;gt; AAAA&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;Q&amp;gt; how does this work?&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;A&amp;gt; A * 0x01010101 = A A A A&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So now we have a 32-bit register, &amp;lt;tt&amp;gt;r1d&amp;lt;/tt&amp;gt; with one copy of A in each 8-bit nibble of that register. Now we go ahead and store this 4 times and we&#039;re done.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we RET: x264 will automatically clean up after us.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17737</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17737"/>
		<updated>2010-11-22T12:59:34Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* x86 assembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work more on 10-bit asm.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
* Support for timecodes&lt;br /&gt;
* Merge speedcontrol&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Make the filtering system aware of fullrange vs TV range.&lt;br /&gt;
* Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;br /&gt;
* Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=GCodeIn_Ideas&amp;diff=17735</id>
		<title>GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=GCodeIn_Ideas&amp;diff=17735"/>
		<updated>2010-11-21T20:01:40Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Google Code In */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the VideoLAN project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
VideoLAN has been part of [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2007|2007]], [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
[[x264 GCodeIn Ideas|x264]] is also participating in Videolan&#039;s Code-In.&lt;br /&gt;
&lt;br /&gt;
= Ideas for VideoLAN =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== VideoLAN Communication ==&lt;br /&gt;
&lt;br /&gt;
=== Wiki Orphans and Double tracking ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Documentation &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: The wiki has way too many [[Special:LonelyPages|orphaned pages]] and [[Special:DoubleRedirects| double redirected pages]], they should be linked by other pages or marked for deletion, and redirects should be fixed&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A better wiki with less orphaned pages or redirects &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: a wiki account&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 4hours &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Xtophe|xtophe]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wiki short pages tracking ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Documentation &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: The wiki has too many [[Special:ShortPages|short pages]], they should be improved, marked for deletion or merged with other pages &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A better wiki with less short pages &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: a wiki account&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 4hours &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Xtophe|xtophe]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VideoLAN flyer/poster ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Outreach &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: The VideoLAN project needs a flyer for promotional matters &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A cool A5-sized flyer presenting VideoLAN &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: Image-Editing software&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Jpsaman|Jean-Paul Saman]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VideoLAN Forum improvements ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Research and Outreach &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: The VideoLAN [http://forum.videolan.org forums] have many shortcomings, especially regarding spam and &amp;quot;Solved topics&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
We need research on solutions and advise us how we can improve the forums &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: small report on ideas, advice and solution&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: Browser and Text editor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: VLC_help &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VideoLAN PHP webpage for file uploading for bugreports ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: The VideoLAN project needs a small WebPage in PHP to be able to upload the files for the bugreports&amp;lt;br&amp;gt;&lt;br /&gt;
As some of those files are big, some progression bar should be done in Javascript too &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: a working deployed PHP script&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: PHP development environment&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: etix &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VLC ==&lt;br /&gt;
=== Create VLC videos for training ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Training &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creation of youtube Videos of screencasts of VLC usage&amp;lt;br&amp;gt;&lt;br /&gt;
This task can be divided in chunks of 5 videos &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: VLC Youtube channels &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: VLC, screencast recorders&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 2 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:linkfanel|linkfanel]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC documentation illustration ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Documentation &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creation of VLC screenshots and small diagrams to improve the VLC documentation on the wiki&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: VLC illustrations on the documentation &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: VLC, Image Editing software&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:ivoire|Rémi Duraffort]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC users survey creation ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Outreach &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creation of a survey for VLC users, about their usage of VLC, that we will put on the website &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Survey ready to be sent to the VLC users &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: text editor and web browser&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:J-b|jb]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC fullscreen controller redesign ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: User Interface &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Find ideas to improve and redesign the fullscreen controller of the VLC version on Windows/Linux &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Sketchs and ideas for the fullscreen controller &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: web browser and image editor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:J-b|jb]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC volume controller redesign ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: User Interface &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Find ideas to improve and redesign the volume controller of the VLC version on Windows/Linux &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Sketchs and ideas for the volume controller&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: web browser and image editor&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 weeks &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:J-b|jb]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC Lyrics extension ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creation of one extension in lua that can be able to fetch and display Lyrics from one website API&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Working Lua Lyrics extension script &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: text editor and VLC &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 10 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Jpeg|jpeg]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC Songkick extension ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creating one extension in lua that can be able to fetch and display Lyrics from Songkick API&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Working Lua Songkick extension script &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: text editor and VLC &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 10 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Jpeg|jpeg]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC webplugin testpages ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: This task is about updating the Html/CSS/JS scripting test pages for the [[Documentation:WebPlugin|Webplugins]]. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Usable pages for testing the VLC webplugins &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: text editor and a browser&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 10 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:Jpsaman|Jean-Paul Saman]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLC warnings cleanup ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: This has for objective to delete a lot of warnings in C and C++ code when doing VLC compilation for Linux and Windows.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Less warnings in C and C++ code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: text editor and compilation toolchain&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 10 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:ivoire|Rémi Duraffort]]  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libVLC Qt example media player ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creating a small example of how to create a media player based on libVLC and Qt on Windows/Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: a cool media player to demonstrate the libVLC API in Qt &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: complete compilation toolchain&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 15 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: pdherbemont &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libVLC Gtk example media player ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creating a small example of how to create a media player based on libVLC and Gtk on Windows/Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: a cool media player to demonstrate the libVLC API in Gtk &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: complete compilation toolchain&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 15 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: pdherbemont &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libVLC wxWidgets example media player ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Code &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creating a small example of how to create a media player based on libVLC and wxWidgets on Windows/Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: a cool media player to demonstrate the libVLC API in wxWidgets &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: complete compilation toolchain&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 15 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: pdherbemont &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VLMC ==&lt;br /&gt;
&lt;br /&gt;
=== Create VLMC videos for training ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Training &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Creation of youtube Videos of screencasts of VLMC usage&amp;lt;br&amp;gt;&lt;br /&gt;
This task can be divided in chunks of 3 videos &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: VLMC Youtube channels &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: VLMC, screencasting tools&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: [[User:etix|etix]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLMC UI testing ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Testing VLMC Interface and testing all dialogs and options to find bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Bugreports &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: easy&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: VLMC &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: Hugo &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VLMC files testing ===&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Testing VLMC for Windows or Linux with many file formats &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Bug reports on the forum that don&#039;t work &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: VLMC, mediainfo, Windows/Linux &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: Hugo &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:J-b|jb]] or [[User:xtophe|xtophe]]&lt;br /&gt;
&lt;br /&gt;
IRC channel: #videolan or irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17715</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17715"/>
		<updated>2010-11-21T01:28:18Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* x264CLI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
* Support for timecodes&lt;br /&gt;
* Merge speedcontrol&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Make the filtering system aware of fullrange vs TV range.&lt;br /&gt;
* Make the filtering system aware of BT.601 vs BT.709.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;br /&gt;
* Add automatic --level restriction support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17702</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17702"/>
		<updated>2010-11-20T10:40:43Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Weighted Prediction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
* Support for timecodes&lt;br /&gt;
* Merge speedcontrol&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17510</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17510"/>
		<updated>2010-11-06T21:42:11Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* CLI Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Add a --device option&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Add a new option to x264cli so users can specify a particular device&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: Edit x264.c to change the input settings for a particular device in a similar way to --preset and --tune&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most of the settings for specific devices (e.g iPod, Xbox, AppleTV) can be found online. x264 developers can help with more complex devices such as Blu-Ray.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: Users can specify a specific device to x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3-5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9), Kieran Kunhya (kierank)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of C functions with assembly versions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.  In many cases, some (but not all) versions of a function are already written in assembly, providing good examples for future versions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you--Jason has taught many many students before.  It usually takes a couple hours to learn the basics.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17508</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17508"/>
		<updated>2010-11-06T20:01:04Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Other features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* MPEG-2 encoding support&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17507</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17507"/>
		<updated>2010-11-06T19:59:50Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of C functions with assembly versions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.  In many cases, some (but not all) versions of a function are already written in assembly, providing good examples for future versions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you--Jason has taught many many students before.  It usually takes a couple hours to learn the basics.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17506</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17506"/>
		<updated>2010-11-06T19:56:01Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of C functions with assembly versions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.  In many cases, some (but not all) versions of a function are already written in assembly, providing good examples for future versions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but it will take much longer.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17505</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17505"/>
		<updated>2010-11-06T19:55:25Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of C functions with assembly versions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.  In many cases, some (but not all) versions of a function are already written in assembly, providing good examples for future versions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17504</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17504"/>
		<updated>2010-11-06T19:50:24Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of C functions with assembly versions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17503</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17503"/>
		<updated>2010-11-06T19:49:58Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of assembly functions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm (for x86) or gas (for ARM)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17502</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17502"/>
		<updated>2010-11-06T19:49:37Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* libx264 Core Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of assembly functions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 0.5-7 days, depends heavily on function complexity&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17501</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17501"/>
		<updated>2010-11-06T19:48:33Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* CLI Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of assembly functions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 1-7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17500</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17500"/>
		<updated>2010-11-06T19:46:03Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* CLI Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of assembly functions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 1-7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17499</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17499"/>
		<updated>2010-11-06T19:45:48Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libx264 Core Development&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Assembly Optimization&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Write &#039;&#039;any&#039;&#039; assembly function: x86 (MMX/SSE), PowerPC (Altivec), or ARM (ARMv6/NEON)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has boatloads of assembly functions that haven&#039;t been written yet.  Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program.  Most functions are only a few lines long in C, making an assembly implementation relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you pick this task, it&#039;s highly recommended that you have some experience in assembly coding already.  Writing a single function is not too difficult if you already have some experience, but if you&#039;ve never done it before, it will take significantly more time.  Of course, if you&#039;re interested in learning, we&#039;d be happy to teach you, but don&#039;t complain when it&#039;s harder than you expected!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new assembly function in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, yasm&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 1-7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), Holger Lubitz (holger), Loren Merritt (pengvado)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17498</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17498"/>
		<updated>2010-11-06T19:36:28Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium-hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 5 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CLI development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Video filtering&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Port &#039;&#039;any&#039;&#039; video filter to x264!&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth.  We&#039;d like to add fancier filters by porting them from other projects, like mplayer&#039;s libmpcodecs.  These could include denoising, sharpening, blurring, and so forth.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can pick &#039;&#039;any filter you want&#039;&#039; and port it -- just make sure to ask first to make sure that it would make sense in the context of x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do note all filters must reach the code quality standards of x264, so in some cases you may need to do more than just copy-pasting: reformatting code, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A new filter in x264.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: hard&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 7 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Possible Mentors&#039;&#039;&#039;: Jason Garrett-Glaser (Dark Shikari), James Darnley (J_Darnley), Steven Walters (kemuri-_9)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17497</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17497"/>
		<updated>2010-11-06T19:23:34Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux, git&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: Dark Shikari&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17496</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17496"/>
		<updated>2010-11-06T19:22:18Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Details&#039;&#039;&#039;: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
* Test any two revisions against each other.&lt;br /&gt;
* Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
* Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
*  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: Dark Shikari&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17495</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17495"/>
		<updated>2010-11-06T19:20:56Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&#039;&#039;&#039;Category&#039;&#039;&#039;: Quality Assurance&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Automated regression test tool: x264 has no standard regression test tool, and all the developers rely on their own scripts.  An automated regression test tool should be able to:&lt;br /&gt;
&lt;br /&gt;
1.  Test any two revisions against each other.&lt;br /&gt;
2.  Test a wide variety of x264 settings combinations.  We can help you here by giving you some of the existing scripts.&lt;br /&gt;
3.  Report the status of a revision: working (basic regression test passes), broken (basic regression test fails), crash, etc.&lt;br /&gt;
4.  Report the difference between any two revisions (output differs, output is identical, which tests&#039; output differs, etc).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outcome&#039;&#039;&#039;: A regression test script (in Bash, Perl, Python, or similar)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Difficulty&#039;&#039;&#039;: medium&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;: x264, JM, ffmpeg, Linux&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Time&#039;&#039;&#039;: 3 days&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Mentor&#039;&#039;&#039;: Dark Shikari&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17494</id>
		<title>X264 GCodeIn Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17494"/>
		<updated>2010-11-06T19:14:52Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: initial gcodein page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Code In =&lt;br /&gt;
&lt;br /&gt;
This page is about gathering &#039;&#039;&#039;ideas&#039;&#039;&#039; for the x264 project for acceptance in the [http://code.google.com/opensource/gci/2010-11/index.html Google Code In 2010-2011] program.&lt;br /&gt;
&lt;br /&gt;
x264 has been part of Videolan&#039;s [http://code.google.com/soc/ Google Summer of Code] in [[SoC_2008|2008]], [[SoC_2009|2009]] and [[SoC_2010|2010]].&lt;br /&gt;
&lt;br /&gt;
= Ideas for x264 =&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
This is a temporary page for listing ideas for Google Code-in tasks. &lt;br /&gt;
&lt;br /&gt;
The final tasks will be moved to melange, when needed.&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
For ANY question, contact [[User:Dark Shikari]], preferably on IRC.&lt;br /&gt;
&lt;br /&gt;
IRC channel: #x264dev on irc://irc.freenode.net&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17080</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17080"/>
		<updated>2010-09-19T12:11:26Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Motion Estimation */ fullpel chroma me&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
* Fullpel chroma ME?&lt;br /&gt;
** For TESA?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17079</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17079"/>
		<updated>2010-09-19T12:11:00Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Mode Decision */ chroma for b-frames is done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17071</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17071"/>
		<updated>2010-09-17T05:10:12Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Psy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
* Macroblock tree correlates pretty well with visual perception in that its concept of a &amp;quot;high complexity&amp;quot; matches well with the visual concept.  Except for local illumination changes.  Talk to Dark Shikari for a patch.&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17064</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17064"/>
		<updated>2010-09-14T22:12:46Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
Bolded features may have companies willing to sponsor or provide bounties.  This is not complete either; just because it&#039;s not bolded doesn&#039;t mean there aren&#039;t resources out there.  If your company is interested in offering a bounty, drop by IRC.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* &#039;&#039;&#039;Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&#039;&#039;&#039;&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* &#039;&#039;&#039;Finish adaptive MBAFF.  Talk to horlicks about this one.&#039;&#039;&#039;&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* &#039;&#039;&#039;Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&#039;&#039;&#039;&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
* &#039;&#039;&#039;4:2:2 and 4:4:4 colorspace support&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;RGB?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17055</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17055"/>
		<updated>2010-09-14T00:18:37Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Ratecontrol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qblur.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17054</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17054"/>
		<updated>2010-09-13T23:36:15Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
* VP8 encoding support&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17053</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17053"/>
		<updated>2010-09-13T23:35:42Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: /* Ratecontrol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* &amp;quot;Emergency mode&amp;quot; for VBV -- handle cases where abiding by VBV is impossible within normal quantizer bounds.&lt;br /&gt;
** Just force all blocks to skip?&lt;br /&gt;
** Drop frames?&lt;br /&gt;
** Allow QPs higher than 51? (Fake QPs -- just results in &amp;quot;denoising&amp;quot; away DCT coefficients)&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17052</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17052"/>
		<updated>2010-09-13T22:43:46Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
* How about a &amp;quot;brute force&amp;quot; mode decision that takes no shortcuts (no early ref termination in p8x8, no SATD thresholds, etc)?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
* Constrained intra + adaptive MBAFF.  Does anyone care about this?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17051</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17051"/>
		<updated>2010-09-13T22:29:41Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
* With trellis 2, can we skip most of CABAC and CAVLC bit cost calculation?&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17050</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17050"/>
		<updated>2010-09-13T22:28:08Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;br /&gt;
* Merge L-SMASH mp4 muxer.&lt;br /&gt;
* Add TS muxing support using HRD.  Talk to kierank about this one.&lt;br /&gt;
* Add --device support.&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17049</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17049"/>
		<updated>2010-09-13T22:26:52Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
* Try sub-8x8 partitions in B-frames.  Is it at all useful?&lt;br /&gt;
* Try bidir motion estimation for fullpel.  That is, considering L1&#039;s MV when doing L0 (or vice versa).  Xvid does this.  How much does it help?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17048</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17048"/>
		<updated>2010-09-13T22:21:47Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
* With extremely fast encoding settings (subme 0), can we rip off lookahead MVs instead of doing a real search?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17047</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17047"/>
		<updated>2010-09-13T22:18:07Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
* Different CPUs take different relative times for some functions.  Is this enough (particularly across architectures) to justify different encoding settings for different CPUs?&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17046</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17046"/>
		<updated>2010-09-13T22:16:48Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
* Is there a faster way than SA8D/SATD to do 8x8dct vs 4x4dct mode decision?  At very fast settings, the time this uses is nontrivial.&lt;br /&gt;
* Is there a faster way than RD to do 8x8dct vs 4x4dct mode decision that&#039;s still better than SATD?  RD takes over an order of magnitude more time than SATD, so it might be useful to have something in the middle.&lt;br /&gt;
* Is there some value to swapping the mode decision metric from SATD to SA8D if we think that the macroblock will use 8x8dct?  [http://akuvian.org/src/x264/x264_dct8_guess.diff This has been tried before], but only helped if our guess was extremely good (better than we could get in reality).&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
* Make a merged SA8D/SATD for the 8x8dct mode decision, since the two share most of their calculation.  Hadamard_ac already does this, but slightly differently.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17045</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17045"/>
		<updated>2010-09-13T22:12:48Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
* Should motion estimation lambda be as high as it is at very high quantizers?  There&#039;s some value to capturing &amp;quot;true motion&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
* Macroblock-tree: make it more psy-aware.  Maybe we should cap how much it lowers the quantizer on extremely static scenes?  This might tie into the &amp;quot;just-noticeable error&amp;quot; issue in RD.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17044</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17044"/>
		<updated>2010-09-13T22:08:41Z</updated>

		<summary type="html">&lt;p&gt;Dark Shikari: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains an incomplete list of things available in x264 for you to do.  It&#039;s organized into sections covering various parts of x264.&lt;br /&gt;
&lt;br /&gt;
Some useful resources: [http://www.x264.nl/developers/Dark_Shikari/?dir=./src Dark Shikari&#039;s pile of junk], [http://akuvian.org/src/x264/ Pengvado&#039;s pile of junk].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re interested in doing any of this, drop by #x264dev on Freenode IRC.  There are no experience or educational requirements for doing any of this, though you are expected to know how to code.&lt;br /&gt;
&lt;br /&gt;
===Motion Estimation===&lt;br /&gt;
* Sequential elimination (SEA), used for exhaustive search, might be more generally applicable to algorithms like UMH, by letting us skip a lot of SADs.  The downside is we won&#039;t be able to use SAD_X4 anymore.&lt;br /&gt;
* (T)ESA is currently wrong for motion searches done on weightp duplicates.  This effect is miniscule, but it still should be fixed.&lt;br /&gt;
* Hierarchical motion estimation might be a useful way to catch very long motion vectors without the cost of UMH or ESA.  It might also help regularize motion.&lt;br /&gt;
* Somehow take into account the effect of motion vector decision on future blocks.&lt;br /&gt;
** Hierarchical motion estimation&lt;br /&gt;
** Approximations from lookahead MVs&lt;br /&gt;
** Iterative ME (as per Snow)&lt;br /&gt;
** Trellis motion estimation&lt;br /&gt;
* We don&#039;t need to check all 11 predictors all the time for 16x16 fullpel motion search.&lt;br /&gt;
** But how do we know which ones we can afford to skip, and when?&lt;br /&gt;
** Xvid and libtheora have algorithms for this, but the former&#039;s is almost surely 100% useless and the latter doesn&#039;t seem impressive either.&lt;br /&gt;
* libtheora does fullpel motion estimation on the source pixels instead of decoded pixels.  Does this give a better starting point for the subpel search and discourage &amp;quot;weird&amp;quot; MVs?&lt;br /&gt;
&lt;br /&gt;
===Intra Analysis===&lt;br /&gt;
* Make the early terminations smarter.  Currently they&#039;re just hacks -- some statistical analysis might be useful.&lt;br /&gt;
* SAD (subme 1) i8x8 vs i4x4 decision is a bit bad.  Can it be improved without significant speed loss?&lt;br /&gt;
&lt;br /&gt;
===Mode Decision===&lt;br /&gt;
* Can we find more ways to skip more motion searches in multiref?&lt;br /&gt;
* On extremely fast encoding settings, fast skip is actually kind of slow.  But anything dumber (e.g. SAD) is completely useless.  Is there some better balance that can be achieved here?&lt;br /&gt;
* Chroma-aware mode decision for B-frames?&lt;br /&gt;
* See the TODOs for deblock-aware RD in common/deblock.c.&lt;br /&gt;
&lt;br /&gt;
===Psy===&lt;br /&gt;
* Psy-RD is a hack.  It works, but it&#039;s a hack.  If you apply QNS with Psy-RD as the metric, it goes way overboard and gives terrible results.  This means that Psy-RD only works because normal mode decision is limited in the way it can modify the image to better suit the metric.  Is there a way to make it better?&lt;br /&gt;
* Should RD be linear at all?  Perhaps we should weight more heavily against low quality blocks and also try to ignore minuscule distortion that viewers can&#039;t see.&lt;br /&gt;
* Psy-trellis (and maybe psy-RD?) are too strong at very high QPs.&lt;br /&gt;
* Psy-trellis should be merged with Psy-RD.  There are patches for this, but they probably won&#039;t be committed until psy-RD itself is fixed.&lt;br /&gt;
* RD should take into account local variance.&lt;br /&gt;
* Lambda should be varied on a per-DCT-block basis instead of a per-macroblock basis.&lt;br /&gt;
* Lambda should be picked independent of quantizer (i.e. with greater precision).&lt;br /&gt;
* Classic problem: a block is mostly high complexity but has a small area of low complexity.  How do we judge whether that area is important?  Good example: sharp text on background with film grain; grain gets blurred out because of the text.&lt;br /&gt;
** If we think it&#039;s important all the time, we ruin the quality of many clips that rely on raising complexity on edges (Touhou).&lt;br /&gt;
&lt;br /&gt;
===Lookahead===&lt;br /&gt;
* Lookahead should be multithreaded, either by splitting the frame (sliced threads) or running multiple frame analysis calls at once.&lt;br /&gt;
* Temporal MV predictors in lookahead?  There&#039;s a patch for these somewhere, but they biased heavily in favor of B-frames, likely by improving the motion search.&lt;br /&gt;
* Should lookahead use variable lambda based on quantizer (esp. due to adaptive quant)?  If so, should it take into account estimated ratecontrol quantizer, too?  If so, how?&lt;br /&gt;
&lt;br /&gt;
===Quantization===&lt;br /&gt;
* CAVLC &amp;quot;trellis&amp;quot; is a hack.  It works, but it&#039;s a hack.  Make it better.  See the TODOs in encoder/rdo.c.&lt;br /&gt;
* There&#039;s room for something between trellis and deadzone in terms of complexity.  libvpx has a good example -- it biases towards zero-runs in its &amp;quot;medium speed&amp;quot; quantizer.  This can&#039;t be SIMD&#039;d easily, but is still vastly faster than trellis.  A nonlinear quantizer (be more likely to round up larger coefficients) might also be useful.&lt;br /&gt;
* Floyd-Steinberg for quantization?  Try pushing quantization error to nearby DCT coefficients.  Should this go from high to low or low to high?&lt;br /&gt;
* Energy-preserving quantizer -- maintain L1 (or maybe L2?  I&#039;m not sure) energy.  Should we maintain it in the spatial domain (post-iDCT) or residual domain?  Probably the former.&lt;br /&gt;
* Decimation is currently just a ripoff of the JVT recommended algorithm.  Can we do this more optimally?  With RD?&lt;br /&gt;
&lt;br /&gt;
===Transform===&lt;br /&gt;
* Analyze the error characteristics of the fDCT.  Is there any way to make it more accurate without much speed loss?  Particularly at extremely low quantizers, this might help.&lt;br /&gt;
* Before forward transform, run a &amp;quot;blocking filter&amp;quot; that acts as the approximate inverse of the deblock filter.  See [http://akuvian.org/src/x264/Shwang_loopfilter_thesis.pdf this paper].&lt;br /&gt;
&lt;br /&gt;
===Interlacing===&lt;br /&gt;
* Finish adaptive MBAFF.  Talk to horlicks about this one.&lt;br /&gt;
* Make slice-max-mbs/slice-max-size work with interlacing.  Pretty much requires a good portion of adaptive MBAFF.&lt;br /&gt;
* Lookahead currently blend-deinterlaces to get the lowres.  Is this a good idea?  Is there something better that isn&#039;t much slower?&lt;br /&gt;
&lt;br /&gt;
===Weighted Prediction===&lt;br /&gt;
* Make weightp work with interlacing.  Preferably abuse reference duplication to make it useful for MBAFF.&lt;br /&gt;
* Make weightp work with chroma.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Finish K-means decision for weightp.  Talk to DylanZA about getting his current patch for this one.&lt;br /&gt;
* Add explicit weighting for B-frames, too.  This helps in nonlinear fades, among other cases.&lt;br /&gt;
&lt;br /&gt;
===Ratecontrol===&lt;br /&gt;
* VBV might be able to utilize the ability to re-encode a row of the frame for improved accuracy.&lt;br /&gt;
** Maybe re-encode everything in case of an underflow that row-reencoding can&#039;t fix?  This might be better than underflowing.&lt;br /&gt;
* Current per-frame VBV is a hack.  It only adapts per row and is O(N^2), where N is the number of rows.  An O(N) solution would be able to react more often and thus be more accurate.&lt;br /&gt;
* Make the frame size and row size predictors better.  They currently are kind of crappy.&lt;br /&gt;
* Ratecontrol code as a whole is a bit of a mess.  It could be improved.  There&#039;s a lot of cruft left over that is probably not needed now, like qcomp.&lt;br /&gt;
* 2-pass VBV is actually more likely to underflow than 1-pass because it doesn&#039;t adapt as aggressively and trusts first pass data a lot.  This trust is often misplaced if the first pass was a fast one.  This should be improved.&lt;br /&gt;
* 2-pass macroblock-tree: if we added the ability to do macroblock-tree on real encoded data, we&#039;d get better results (particularly with repeating patterns and multiref, such as an anime character&#039;s mouth moving).&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
* Motion estimation?&lt;br /&gt;
** Methods&lt;br /&gt;
*** Hierarchical?&lt;br /&gt;
*** 2D Wave?&lt;br /&gt;
*** Something else?&lt;br /&gt;
** &amp;quot;Easy&amp;quot;: lookahead motion estimation&lt;br /&gt;
*** Extremely high parallelism, hundreds of frame searches (each with thousands of searches) at once.&lt;br /&gt;
** &amp;quot;Hard&amp;quot;: main motion estimation&lt;br /&gt;
*** Difficult synchronization issues, not as heavily parallel in terms of numb of macroblocks, but far more partition sizes and refs to search.&lt;br /&gt;
*** But potentially more useful...&lt;br /&gt;
* Other things?&lt;br /&gt;
&lt;br /&gt;
===x86 assembly===&lt;br /&gt;
* Finish AVX support for x86inc.asm.  Talk to Dark Shikari for a patch.&lt;br /&gt;
* Optimize more for the Phenom.&lt;br /&gt;
* Optimize for the upcoming Sandy Bridge.&lt;br /&gt;
* Work on 10-bit asm.  Talk to irock about this.&lt;br /&gt;
* Convince holger to commit his local patches.&lt;br /&gt;
&lt;br /&gt;
===Other assembly===&lt;br /&gt;
* NEON assembly is nowhere near complete.&lt;br /&gt;
** Chroma MC needs to be rewritten for NV12 support.&lt;br /&gt;
* Altivec assembly is very lacking.&lt;br /&gt;
&lt;br /&gt;
===Other CPU optimizations===&lt;br /&gt;
* x264 needs more prefetching.  How many L1 and L2 cache misses (particularly L1) can we get rid of via smart prefetching in the right places?  Warning: this is often hard to benchmark.&lt;br /&gt;
&lt;br /&gt;
===x264CLI===&lt;br /&gt;
* Finish audio support.  Talk to Kovensky about this one.&lt;br /&gt;
* Add more filters.&lt;br /&gt;
** Deinterlacers (YADIF).&lt;br /&gt;
** Denoisers (HQDN3D?).&lt;br /&gt;
** IVTC, decomb?&lt;/div&gt;</summary>
		<author><name>Dark Shikari</name></author>
	</entry>
</feed>