<?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=Kieran</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=Kieran"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Kieran/"/>
	<updated>2026-11-04T15:54:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VDD19&amp;diff=61957</id>
		<title>VDD19</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VDD19&amp;diff=61957"/>
		<updated>2019-11-10T00:41:54Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* Sunday November 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{VDD}}&lt;br /&gt;
[[Image:Vdd2019.png|thumb|500px|]]&lt;br /&gt;
= Welcome to Video Dev Days 2019 =&lt;br /&gt;
&lt;br /&gt;
The [[VideoLAN]] non-profit organization is happy to invite you to the multimedia open-source event of the fall!&lt;br /&gt;
&lt;br /&gt;
For its eleventh edition, people from the VideoLAN and open source multimedia communities will meet in &#039;&#039;&#039;Tokyo&#039;&#039;&#039; to discuss and work on the future of the open-source multimedia community.&lt;br /&gt;
&lt;br /&gt;
This is a very technical conference, focused on low-level multimedia.&lt;br /&gt;
&lt;br /&gt;
== Who can come? ==&lt;br /&gt;
&lt;br /&gt;
Literally every one is invited to VDD, we just need registration for legal reason &#039;&#039;(to enter the building)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is a technical conference, focused on low-level multimedia, like codecs and their implementations like &#039;&#039;&#039;x264&#039;&#039;&#039; or &#039;&#039;&#039;dav1d&#039;&#039;&#039;, frameworks like &#039;&#039;&#039;FFmpeg&#039;&#039;&#039; or &#039;&#039;&#039;Gstreamer&#039;&#039;&#039; or playback libraries like &#039;&#039;&#039;libVLC&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Things like Javascript video frameworks or ad-injection frameworks would be considered out of scope.&lt;br /&gt;
&lt;br /&gt;
The price to enter is totally &#039;&#039;&#039;Free&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Sponsorship for Japan ==&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;Japan&#039;&#039;&#039; is a bit further than the usual conferences, often in Europe, going to Japan is more expensive.&lt;br /&gt;
&lt;br /&gt;
If you want [[VideoLAN]] to sponsor your trip, you should read the [[VDD19/Sponsor_Policy|Sponsorship Policy]].&lt;br /&gt;
&lt;br /&gt;
== Traveling to Japan ==&lt;br /&gt;
&lt;br /&gt;
You should consider staying a bit longer to &#039;&#039;&#039;Japan&#039;&#039;&#039;, if you can afford a few extra days. Kyoto is amazing!&lt;br /&gt;
&lt;br /&gt;
You should take care of your passport and, if applicable, your visa very quickly!&lt;br /&gt;
&lt;br /&gt;
See the dedicated page: [[VDD19/Traveling_Advice|traveling advice for Japan]].&lt;br /&gt;
&lt;br /&gt;
You might want to consider to &#039;&#039;&#039;offset your carbon footprint&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
For example: [https://co2.myclimate.org/en/flight_calculators/new MyClimate CO2 Calculator] or [https://www.carbonfootprint.com/carbonoffset.html CarboonFootPrint.com]&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
&lt;br /&gt;
== Friday November 8th ==&lt;br /&gt;
&lt;br /&gt;
Community bonding day !&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pokemon : Codec Wars ! ===&lt;br /&gt;
&lt;br /&gt;
Discover your team members in a discovery game around Tokyo.&amp;lt;br/&amp;gt;&lt;br /&gt;
Please meet in the sponsored hotel lobby at 9:30am&lt;br /&gt;
&lt;br /&gt;
[https://wiki.videolan.org/VDD19/#Accommodation_.2F_Hotel Hotel Villa Fontaine Hakozaki]&lt;br /&gt;
&lt;br /&gt;
=== Evening drinks ===&lt;br /&gt;
&lt;br /&gt;
19:?? Evening drinks at ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sponsored by Mozilla.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(NB: food is not provided there)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Saturday November 9th ==&lt;br /&gt;
&lt;br /&gt;
=== Planning ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%;&amp;quot; | Time || Opera 1 Auditorium &lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;08:30 - 09:00&#039;&#039;&#039; ||  style=&amp;quot;background: silver;&amp;quot; | Registration&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;09:00 - 09:10&#039;&#039;&#039; || &#039;&#039;&#039;Welcome words&#039;&#039;&#039; by Jean-Baptiste Kempf, VideoLAN&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;09:10 - 09:20&#039;&#039;&#039; || &#039;&#039;&#039;Internet Initative Japan&#039;&#039;&#039; by Marie Gunji, IIJ&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;09:20 - 09:50&#039;&#039;&#039; || &#039;&#039;&#039;Dav1d&#039;&#039;&#039; by Ronald S. Bultje, Two Orioles&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;09:50 - 10:20&#039;&#039;&#039; || &#039;&#039;&#039;Sash and low latency adaptive streaming&#039;&#039;&#039;, by Phil Cluff, Mux&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;10:20 - 10:50&#039;&#039;&#039; || &#039;&#039;&#039;x265 update&#039;&#039;&#039;, by Pradeep Ramachandran, MulticoreWare inc.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;10:50 - 11:05&#039;&#039;&#039; || style=&amp;quot;background: silver;&amp;quot; | Break&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;11:05 - 11:35&#039;&#039;&#039; || &#039;&#039;&#039;rav1e update&#039;&#039;&#039; by Thomas Daede, Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;11:35 - 12:05&#039;&#039;&#039; || &#039;&#039;&#039;VLC 4.0&#039;&#039;&#039; by Jean-Baptiste Kempf, VideoLAN&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;12:05 - 12:20&#039;&#039;&#039; || &#039;&#039;&#039;Tokyo Video Tech&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;12:30 - 14:00&#039;&#039;&#039; || style=&amp;quot;background: silver;&amp;quot; |  &#039;&#039;&#039;Bentō lunch break&#039;&#039;&#039; sponsored by J-Stream&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;13:30 - 14:00&#039;&#039;&#039; || style=&amp;quot;background: silver;&amp;quot; |  &#039;&#039;&#039;Group photo&#039;&#039;&#039; (Goodies distribution will start before 13:30)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%;&amp;quot; | Time || Opera 1 Auditorium || Opera 2 Auditorium || Meeting Room&lt;br /&gt;
! &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;14:00 - 16:00&#039;&#039;&#039; || &#039;&#039;&#039;VLC Technical meeting&#039;&#039;&#039; || &#039;&#039;&#039;AV1 meetup&#039;&#039;&#039; || &#039;&#039;&#039;Hacking&#039;&#039;&#039; open sessions&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;16:00 - 18:00&#039;&#039;&#039; || &#039;&#039;&#039;VideoLAN meeting&#039;&#039;&#039; || &#039;&#039;&#039;Meetups&#039;&#039;&#039; || &#039;&#039;&#039;Hacking&#039;&#039;&#039; open sessions&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;19:30 - 21:30&#039;&#039;&#039; ||colspan=4|  &#039;&#039;&#039;Community Dinner&#039;&#039;&#039; by the Dinner committee&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VideoLAN community dinner ===&lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;really&#039;&#039;&#039; need to &#039;&#039;&#039;be on time&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   Warayakiya Ginza&lt;br /&gt;
   [https://goo.gl/maps/Q8S6DV1u3FdkZUFg6 Ginza, 6 Chome−5−15] &lt;br /&gt;
   銀座能楽堂ビル 6F&lt;br /&gt;
&lt;br /&gt;
   わらやき屋 銀座店&lt;br /&gt;
   [https://goo.gl/maps/Q8S6DV1u3FdkZUFg6 銀座６丁目５−15]&lt;br /&gt;
   銀座能楽堂ビル 6F&lt;br /&gt;
&lt;br /&gt;
== Sunday November 10 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;width: 10%;&amp;quot; | Time || Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;09:30 - 12:00&#039;&#039;&#039; || &#039;&#039;&#039;Lightning talks&#039;&#039;&#039;&lt;br /&gt;
* Intel update from Max&lt;br /&gt;
* llvm-mingw by Martin Storsjo&lt;br /&gt;
* 360 intra directional predictors by Luc Trudeau&lt;br /&gt;
* Vimeo elevator by Rapahel Zummer&lt;br /&gt;
* GSoC experiences by Krishnan&lt;br /&gt;
* VLC Benchmark by Duncan&lt;br /&gt;
* A Japanese Way to Maintain Constant Quality.... byYusuke Goto&lt;br /&gt;
* Patents by Vittorio&lt;br /&gt;
* TTML in mp4 by JEEB&lt;br /&gt;
* BlitzLoop by marcan&lt;br /&gt;
* color: daala, dav1d and beyond&lt;br /&gt;
* Compiler assisted security&lt;br /&gt;
* Rust with C by Luca&lt;br /&gt;
* Sub-frame decoding by Kieran&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;12:30 - 14:00&#039;&#039;&#039; || style=&amp;quot;background: silver;&amp;quot; |  &#039;&#039;&#039;Bentō lunch break&#039;&#039;&#039; sponsored by Abema TV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%;&amp;quot; | Time || Opera 1 Auditorium || Opera 2 Auditorium || Meeting Room&lt;br /&gt;
! &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;14:00 - 16:00&#039;&#039;&#039; || &#039;&#039;&#039;Unconferences&#039;&#039;&#039; || &#039;&#039;&#039;FFmpeg&#039;&#039;&#039; meetup || &#039;&#039;&#039;Hacking&#039;&#039;&#039; open sessions&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;16:00 - 18:00&#039;&#039;&#039; || &#039;&#039;&#039;Unconferences&#039;&#039;&#039; || &#039;&#039;&#039;Meetups&#039;&#039;&#039; || &#039;&#039;&#039;Hacking&#039;&#039;&#039; open sessions&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;18:30 - 21:30&#039;&#039;&#039; || colspan=3 style=&amp;quot;background: silver;&amp;quot; | &#039;&#039;&#039;Unofficial Dinner&#039;&#039;&#039; and Karaoke sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unofficial Dinner ===&lt;br /&gt;
&lt;br /&gt;
   Amusement Bar J-House&lt;br /&gt;
   [https://goo.gl/maps/hHFW8suntPcsS6o4A Chiyoda City, Fujimi, 2 Chome−3−14] &lt;br /&gt;
   CST ビル 5F&lt;br /&gt;
&lt;br /&gt;
   アミューズメントバー ジェイハウス&lt;br /&gt;
   [https://goo.gl/maps/hHFW8suntPcsS6o4A 東京都千代田区富士見2-3-14] &lt;br /&gt;
   CSTビル5F&lt;br /&gt;
&lt;br /&gt;
= Practical information =&lt;br /&gt;
&lt;br /&gt;
* The [https://www.japan.travel/en/plan/ official &#039;&#039;&#039;JNTO&#039;&#039;&#039; site] has a wealth of practical information targeting first-time visitors.&lt;br /&gt;
* The [[VDD19/Air_travel|air travel]] page provides more info for arrival and departure.&lt;br /&gt;
&lt;br /&gt;
== Location / main venue ==&lt;br /&gt;
The meeting is happening at the [https://goo.gl/maps/jkzwDAz99qDk84V29 IIJ HQ]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!In English&lt;br /&gt;
!In Japanese&lt;br /&gt;
|-&lt;br /&gt;
|Internet Initiative Japan Inc.&amp;lt;br/&amp;gt;&lt;br /&gt;
Iidabashi Grand Bloom&amp;lt;br/&amp;gt;&lt;br /&gt;
2-10-2 Fujimi, Chiyoda-ku&amp;lt;br/&amp;gt;&lt;br /&gt;
Tokyo 102-0071&amp;lt;br/&amp;gt;&lt;br /&gt;
Japan&lt;br /&gt;
|株式会社インターネットイニシアティブ&amp;lt;br/&amp;gt;&lt;br /&gt;
〒102－0071 東京都千代田区富士見2-10-2&amp;lt;br/&amp;gt;&lt;br /&gt;
飯田橋グラン・ブルーム&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do not lose the issued access pass&#039;&#039;&#039;, you will need it to re-enter the building during the 2 days.&lt;br /&gt;
&lt;br /&gt;
The venue is within walking distance of Iidabashi station served by:&lt;br /&gt;
* JR East&lt;br /&gt;
** Chuo-Sobu (JB16) train line,&lt;br /&gt;
* Tokyo Metro&lt;br /&gt;
** Tozai (T06),&lt;br /&gt;
** Yurakucho (Y13) and&lt;br /&gt;
** Namboku (N10) lines,&lt;br /&gt;
* Toei&lt;br /&gt;
** Odeo (E06) metro line.&lt;br /&gt;
From the sponsored attendees&#039; hotel, take the &#039;&#039;Tozai&#039;&#039; line west-bound from &#039;&#039;Kayabachō&#039;&#039; station (T11).&lt;br /&gt;
&lt;br /&gt;
== Accommodation / Hotel ==&lt;br /&gt;
&lt;br /&gt;
If you are sponsored by the [[VideoLAN]] association, your hotel is:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!In English&lt;br /&gt;
!In Japanese&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.hvf.jp/eng/location/hakozaki.php Hotel Villa Fontaine Tokyo Nihombashi Hakozaki]&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://goo.gl/maps/4RZWFXwiBu76Xcwd6 20-10 Hakozaki-cho Nihombashi]&amp;lt;br/&amp;gt;&lt;br /&gt;
Chuo-ku Tokyo, 103-0015&lt;br /&gt;
|ホテルヴィラフォンテーヌ東京日本橋箱崎&amp;lt;br/&amp;gt;&lt;br /&gt;
〒103-0015 東京都中央区日本橋箱崎町２０−1０&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|+81-3-3667-3330&lt;br /&gt;
|}&lt;br /&gt;
Elsewise, please make your own arrangements for accommodation.&lt;br /&gt;
&lt;br /&gt;
Check-in is 3:00pm. Check-out is 11:00am.&lt;br /&gt;
Breakfast available from 7:00 to 9:30am.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beware&#039;&#039;&#039; that there are plenty of &#039;&#039;Villa Fontaine&#039;&#039; hotels in the area. &#039;&#039;&#039;Be sure to head to the Hakozaki one.&#039;&#039;&#039;&lt;br /&gt;
=== Public transit ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Origin&lt;br /&gt;
!Recommended route&lt;br /&gt;
|-&lt;br /&gt;
|Conference venue&lt;br /&gt;
|Tokyo Metro &#039;&#039;Tozai&#039;&#039; line east-bound to &#039;&#039;Kayabachō&#039;&#039; station (T11).&lt;br /&gt;
|-&lt;br /&gt;
|Sengakuji station&amp;lt;br/&amp;gt;Haneda airport via the [https://www.haneda-tokyo-access.com/en/ Keikyu railway]&lt;br /&gt;
|Toei &#039;&#039;Asakusa&#039;&#039; metro line north-bound to &#039;&#039;Ningyōchō&#039;&#039; station (A14)&lt;br /&gt;
|-&lt;br /&gt;
|Ueno station&amp;lt;br/&amp;gt;Narita airport via the [http://www.keisei.co.jp/keisei/tetudou/skyliner/us/index.php Keisei electric railway]&lt;br /&gt;
|Tokyo Metro &#039;&#039;Hibiya&#039;&#039; line south-bound to &#039;&#039;Ningyōchō&#039;&#039; station (H13).&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.tcat-hakozaki.co.jp/en/ T-CAT] terminal&amp;lt;br/&amp;gt;Haneda airport via T-CAT&amp;lt;br/&amp;gt;Narita airport via T-CAT&lt;br /&gt;
|Short walk.&lt;br /&gt;
|-&lt;br /&gt;
|Tokyo station&amp;lt;br/&amp;gt;Yaesu [http://www.keiseibus.co.jp/inbound/tokyoshuttle/en/ Keisei bus] stop&amp;lt;br/&amp;gt;Narita via Keisei bus&lt;br /&gt;
|&#039;&#039;&#039;1,7 km&#039;&#039;&#039; walk from the North exit.&lt;br /&gt;
|}&lt;br /&gt;
In addition to Kayabachō and Ningyōchō, the Suitengu-mae station (Z10) on the Tokyo metro Hanzōmon line is also located close-by.&lt;br /&gt;
&lt;br /&gt;
== Transportation ==&lt;br /&gt;
&lt;br /&gt;
* Get a Japanese electronic [[#Electronic_payments|payment card]] to travel easily on the public transports.&lt;br /&gt;
* Check the dedicated page for [[VDD19/Air travel#Airport_transfer|airport transfers]].&lt;br /&gt;
* For routing, you can use the following services:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Vendor&lt;br /&gt;
!Website&lt;br /&gt;
!Google Play&lt;br /&gt;
!Apple App Store&lt;br /&gt;
|-&lt;br /&gt;
|Hitachi Hyperdia&lt;br /&gt;
|[https://www.hyperdia.com Hyperdia]&lt;br /&gt;
|[https://play.google.com/store/apps/details?id=com.hyperdia.android.activity here]&lt;br /&gt;
|[https://apps.apple.com/fr/app/hyperdia-by-voice/id379001449 here]&lt;br /&gt;
|-&lt;br /&gt;
|Japan National Tourism Organization&lt;br /&gt;
| -&lt;br /&gt;
|[https://play.google.com/store/apps/details?id=jp.go.jnto.jota here]&lt;br /&gt;
|[https://apps.apple.com/app/apple-store/id1230367186?mt=8 here]&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: VideoLAN does not refund taxi, car rental and public transport.&lt;br /&gt;
&lt;br /&gt;
=== Rail pass ===&lt;br /&gt;
If you have a voucher for a rail pass, you should save it for before or after the conferencing days. JR passes are of limited within central Tokyo. They are valid for the &#039;&#039;Yamanote&#039;&#039; loop and the &#039;&#039;Chuo-Sobu&#039;&#039; east-west transverse train lines, as well as JR-operated buses, but not on the metro networks.&lt;br /&gt;
&lt;br /&gt;
== Means of payment ==&lt;br /&gt;
&lt;br /&gt;
VISA and MasterCard cards are &#039;&#039;&#039;not&#039;&#039;&#039; universally accepted in Japan.&lt;br /&gt;
&lt;br /&gt;
=== Cash ===&lt;br /&gt;
You will need to withdraw cash from an &#039;&#039;international&#039;&#039; ATM (accepting VISA, MasterCard, AmEx, Discovery and UnionPay). You can find those:&lt;br /&gt;
* at arrivals in the airport terminal,&lt;br /&gt;
* at &#039;&#039;&#039;[https://www.sevenbank.co.jp/intlcard/index2.html 7-Eleven]&#039;&#039;&#039; convenience stores,&lt;br /&gt;
* at &#039;&#039;&#039;[https://www.family.co.jp/for_tourist/en.html Family Mart]&#039;&#039;&#039; convenience stores,&lt;br /&gt;
* and during office hours in Japanese Post offices.&lt;br /&gt;
Do not bother with the local banks ATMs, most of which do not accept overseas cards.&lt;br /&gt;
To be on the safe side, you could exchange a few tens of thousands of yens in advance. Compare prices and avoid the extortionate bureaux de change at airports!&lt;br /&gt;
&lt;br /&gt;
=== Electronic payments ===&lt;br /&gt;
&lt;br /&gt;
For small day-to-day purchases, you should procure a FeliCa electronic payment card, a.k.a. an &#039;&#039;IC&#039;&#039; card. It can be used to enter and exit public transports (train, metro, bus, etc), to check out at convenience stores and many shops. You can load the card with Japanese bank notes at dedicated machines. There are two options in Tokyo area:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Vendor&lt;br /&gt;
!Regular card&lt;br /&gt;
!Tourist card&lt;br /&gt;
!Tourist point of sale&lt;br /&gt;
|-&lt;br /&gt;
!JR East&lt;br /&gt;
|[https://www.jreast.co.jp/e/pass/suica.html Suica]&amp;lt;br/&amp;gt;¥500 deposit&lt;br /&gt;
|[https://www.jreast.co.jp/e/welcomesuica/welcomesuica.html Welcome Suica]&amp;lt;br/&amp;gt;free??&lt;br /&gt;
|JR East Travel Service Center&lt;br /&gt;
|-&lt;br /&gt;
!Tokyo Metro&lt;br /&gt;
|[https://www.pasmo.co.jp/visitors/en/normalpasmo/ Pasmo]&amp;lt;br/&amp;gt;¥500 deposit&lt;br /&gt;
|[https://www.pasmo.co.jp/visitors/en/about/ Pasmo passport]&amp;lt;br/&amp;gt;¥500&lt;br /&gt;
|&lt;br /&gt;
*Keisei at Narita airport&lt;br /&gt;
*Keikyu at Haneda airport&lt;br /&gt;
|}&lt;br /&gt;
Tourist cards with their cutesy design are meant to keep as memento and provide third-party discounts. But beware that they expire after 28 days (including any unused credit).&lt;br /&gt;
&lt;br /&gt;
== Electricity ==&lt;br /&gt;
Japan has the lowest household voltage in the world, so &#039;&#039;&#039;check the specifications&#039;&#039;&#039; on your power adapters.&lt;br /&gt;
Outlets are not compatible with European or Commonwealth plugs. North American &#039;&#039;grounded&#039;&#039; plugs (with 3 pins) are also troublesome.&lt;br /&gt;
Most attendees will thus need passive adapters. They are easier to find at home, so &#039;&#039;&#039;BUY BEFORE DEPARTURE&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Voltage&lt;br /&gt;
|100 V&lt;br /&gt;
|-&lt;br /&gt;
!Frequency&lt;br /&gt;
|50 Hz (60 Hz in Kyoto/Osaka)&lt;br /&gt;
|-&lt;br /&gt;
!Socket&lt;br /&gt;
|Type A with only 2 pins (i.e. ungrounded)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
&lt;br /&gt;
The telephone prefix for Japan is &#039;&#039;&#039;+81&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Mobile data ===&lt;br /&gt;
You can buy, or better yet pre-order, a prepaid data SIM card at international arrivals at the airport.&lt;br /&gt;
Don&#039;t postpone, as it might be difficult to find elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Wireless LAN ===&lt;br /&gt;
Free Wi-Fi access points are common, but they may need registration, possibly in Japanese only.&lt;br /&gt;
There is a map of known Wi-Fi access points in the &#039;&#039;&#039;JNTO&#039;&#039;&#039; app (see [[#Transportation]]).&lt;br /&gt;
&lt;br /&gt;
=== Group Chat ===&lt;br /&gt;
Participants can share information and discuss using the dedicated [https://t.me/joinchat/GIwXP1WmM84pbxCXStaUew VDD 2019 Telegram group].&lt;br /&gt;
&lt;br /&gt;
== Emergency ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;119&#039;&#039;&#039; is the fire and ambulance emergency number in Japan. &#039;&#039;&#039;110&#039;&#039;&#039; is the local police number.&lt;br /&gt;
&lt;br /&gt;
Please carry your travel insurance card or certificate on you at all times.&lt;br /&gt;
If you do not have a travel insurance yet, buy a fixed-term one before you depart. EU social security cards are not &#039;&#039;&#039;not&#039;&#039;&#039; valid in Japan.&lt;br /&gt;
Advise your relatives, and if applicable, your government:&lt;br /&gt;
* [https://pastel.diplomatie.gouv.fr/fildariane/dyn/public/login.html Registration for French citizens].&lt;br /&gt;
&lt;br /&gt;
Personal safety risks in Japan primarily stem from natural disasters:&lt;br /&gt;
* [https://www.jnto.go.jp/safety-tips/eng/index.html &#039;&#039;&#039;JNTO&#039;&#039;&#039; safety tips]&lt;br /&gt;
** on [https://play.google.com/store/apps/details?id=jp.co.rcsc.safetyTips.android Google Play Store]&lt;br /&gt;
** or [https://apps.apple.com/us/app/safety-tips/id858357174 Apple App Store].&lt;br /&gt;
* In case of earthquake:&lt;br /&gt;
** Seek cover (e.g. under a table) if indoors,&lt;br /&gt;
** Get away from structures (especially glass windows) if outdoors.&lt;br /&gt;
** After the quake, get away from the shore onto high ground away from tidal waves.&lt;br /&gt;
* In case of typhoon, follow instructions from authorities. Typhoon are predicted several days ahead.&lt;br /&gt;
&lt;br /&gt;
= Contact =&lt;br /&gt;
&lt;br /&gt;
The VideoLAN Dev Days are organized by the board members of the VideoLAN non-profit organization:&lt;br /&gt;
* Jean-Baptiste Kempf,&lt;br /&gt;
* Denis Charmet,&lt;br /&gt;
* Konstantin Pavlov, and&lt;br /&gt;
* Hugo Beauzée-Luyssen.&lt;br /&gt;
You can reach us [mailto:board@videolan.org here].&lt;br /&gt;
&lt;br /&gt;
[[Category:About VideoLAN]]&lt;br /&gt;
[[Category:VDD]]&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VDD15&amp;diff=30403</id>
		<title>VDD15</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VDD15&amp;diff=30403"/>
		<updated>2015-09-16T19:54:22Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Welcome to VideoLAN Dev Days 2015 =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Open Multimedia Conference that frees the cone in you!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a technical un-conference; please bring laptops, power cords, power extensions, RJ45 cables and a &#039;&#039;&#039;good mood&#039;&#039;&#039; with you.&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
== Thursday, September 17th 2015 ==&lt;br /&gt;
&lt;br /&gt;
Nothing is prepared for that day, but for people early at the hotel, we will get drinks at the hotel, at around 21:00.&lt;br /&gt;
&lt;br /&gt;
Find Felix :D&lt;br /&gt;
&lt;br /&gt;
== Friday, September 18th 2015 ==&lt;br /&gt;
&lt;br /&gt;
=== Community day ===&lt;br /&gt;
If you subscribed for the community day, you should have received instructions by e-mail.&lt;br /&gt;
&lt;br /&gt;
Meeting point is &#039;&#039;&#039;at&#039;&#039;&#039; EuroDisney at &#039;&#039;&#039;9:45&#039;&#039;&#039;. The theme park opens at &#039;&#039;&#039;10:00&#039;&#039;&#039; and closes at &#039;&#039;&#039;21:00&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== How to get there ====&lt;br /&gt;
The best option is to take the Metro/RER. This takes approximately 1 hour and 5 minutes:&lt;br /&gt;
* take metro &#039;&#039;Line 13&#039;&#039; from the hotel to &#039;&#039;&#039;St Lazare&#039;&#039;&#039;, then&lt;br /&gt;
* take metro &#039;&#039;Line 3&#039;&#039; from &#039;&#039;&#039;St Lazare&#039;&#039;&#039; to &#039;&#039;&#039;Havre-Caumartin&#039;&#039;&#039; (1 stop only),&lt;br /&gt;
* take the express train &#039;&#039;RER A&#039;&#039; to &#039;&#039;&#039;Marne La Vallée-Chessy&#039;&#039;&#039;&lt;br /&gt;
** check on the platform display before boarding: not all trains go to Marne La Vallée-Chessy!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.:&#039;&#039;&#039; You should buy a ticket to Marne La Vallée at the metro station. The ticket is valid for the entire journey.&lt;br /&gt;
&lt;br /&gt;
=== Evening drinks ===&lt;br /&gt;
We will meet at a local bar, for drinks (soft and beers), at around &#039;&#039;&#039;20:30&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The name will be announced later, when confirmed, but should not be too far from the hotel.&lt;br /&gt;
&lt;br /&gt;
== Saturday, September 19th 2015 ==&lt;br /&gt;
&lt;br /&gt;
=== Morning ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;width: 10%;&amp;quot;| Time || Description&lt;br /&gt;
|-&lt;br /&gt;
|  &#039;&#039;&#039;8:45 - 9:30&#039;&#039;&#039; || Registration and Breakfast&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;9:30 - 9:45&#039;&#039;&#039; || &#039;&#039;&#039;Opening remarks&#039;&#039;&#039; by Jean-Baptiste Kempf &#039;&#039;(VideoLAN)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;9:45 - 10:20&#039;&#039;&#039; || &#039;&#039;&#039;Daala&#039;&#039;&#039; by Timothy Terriberry &#039;&#039;(Mozilla)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;10:20 - 10:55&#039;&#039;&#039; || &#039;&#039;&#039;A new AAC free and open-source encoder&#039;&#039;&#039;  by Rostislav Pehlivanov &#039;&#039;(FFmpeg)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;10:55 - 11:05&#039;&#039;&#039; || &#039;&#039;Coffee break&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;11:05 - 11:40&#039;&#039;&#039; || &#039;&#039;&#039;New video compression techniques under consideration for VP10&#039;&#039;&#039; by Alex Converse &#039;&#039;(Google)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;11:40 - 12:10&#039;&#039;&#039; || &#039;&#039;&#039;An update to x265&#039;&#039;&#039; by Deepthi Nandakumar &#039;&#039;(MCW)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;12:10 - 12:40&#039;&#039;&#039; || &#039;&#039;&#039;VLC 3.0&#039;&#039;&#039; by  Jean-Baptiste Kempf &#039;&#039;(VideoLAN)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;12:40 - 12:45&#039;&#039;&#039; || &#039;&#039;&#039;Spice&#039;&#039;&#039; by  Lord Julien Navas &#039;&#039;(Vodkaster)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Afternoon ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;width: 10%;&amp;quot;| Time !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;14:00 - 14:40&#039;&#039;&#039; || &#039;&#039;&#039;The Thor Codec&#039;&#039;&#039; by Thomas Davies &#039;&#039;(Cisco)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;14:40 - 15:00&#039;&#039;&#039; || &#039;&#039;&#039;How to optimize press coverage for FLOSS projects&#039;&#039;&#039; by Sebastian Grüner &#039;&#039;(golem.de)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;15:00 - 15:20&#039;&#039;&#039; || &#039;&#039;&#039;VP9 encoding/decoding performance vs. H.264/HEVC&#039;&#039;&#039; by Ronald Bultje &#039;&#039;(FFmpeg)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;15:30 - 18:00&#039;&#039;&#039; || &#039;&#039;Break-out sessions&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Break-out sessions, Saturday ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%;&amp;quot;| Time&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Auditorium&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 1&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 2&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 3&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 4&lt;br /&gt;
|-&lt;br /&gt;
! 15:30 - 16:45&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;&#039;VLC technical discussion&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 16:45 - 17:00&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Coffee Break&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! 17:00 - 18:00&lt;br /&gt;
| &lt;br /&gt;
| VLC Mobile Ports discussion&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 18:00 - 19:30&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;&#039;VideoLAN annual meeting&#039;&#039;&#039; Assemblée Générale Ordinaire, Assemblée Générale Extraordinaire &amp;amp;&amp;amp; Réunion&amp;lt;br /&amp;gt;&lt;br /&gt;
This is for &#039;&#039;&#039;VideoLAN non-profit&#039;&#039;&#039; members.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Dinner ===&lt;br /&gt;
Dinner is at &#039;&#039;&#039;20:00&#039;&#039;&#039; next to the place, at The Royal Trinité.&lt;br /&gt;
&lt;br /&gt;
59 Rue de Châteaudun, 75009 Paris, France&lt;br /&gt;
&lt;br /&gt;
[https://goo.gl/maps/30dCb Royal Trinité]&lt;br /&gt;
&lt;br /&gt;
== Sunday, September 20th 2015 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 10%;&amp;quot;| Time&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Auditorium&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 1&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 2&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 3&lt;br /&gt;
! style=&amp;quot;width: 18%;&amp;quot;| Room 4&lt;br /&gt;
|-&lt;br /&gt;
! 9:30 - 10:00&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Breakfast&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! 10:00 - 10:45&lt;br /&gt;
| &lt;br /&gt;
| VLC/iOS meetup&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 10:45 - 11:30&lt;br /&gt;
| &lt;br /&gt;
| VLC/Android meetup&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 11:30 - 11:45&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Coffee break&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! 11:45 - 12:45&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 12:45 - 14:00&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Lunch break&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! 14:00 - 14:45&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 14:45 - 15:30&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 15:30 - 15:45&lt;br /&gt;
| &#039;&#039;&#039;Closing Remarks&#039;&#039;&#039;&amp;lt;br/&amp;gt; by Jean-Baptiste Kempf &#039;&#039;(VideoLAN)&#039;&#039;&lt;br /&gt;
| —&lt;br /&gt;
| —&lt;br /&gt;
| —&lt;br /&gt;
| —&lt;br /&gt;
|-&lt;br /&gt;
! 15:45 - 17:00&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 17:00 - 18:00&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| VideoLAN &#039;&#039;&#039;roots&#039;&#039;&#039; meeting &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Practical information =&lt;br /&gt;
&lt;br /&gt;
== Emergency situation ==&lt;br /&gt;
In case of emergency, call the European emergency number &#039;&#039;&#039;112&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Location / main venue ==&lt;br /&gt;
The venue is in Paris (France), 9th district, near St Lazare:&lt;br /&gt;
&lt;br /&gt;
Criteo&amp;lt;br/&amp;gt;&lt;br /&gt;
32 rue Blanche&amp;lt;br/&amp;gt;&lt;br /&gt;
75009 Paris, France&lt;br /&gt;
&lt;br /&gt;
[https://www.google.fr/maps/place/Criteo/@48.878914,2.3315591,17z/data=!4m6!1m3!3m2!1s0x47e66e04d509ec8f:0xbf35e94464e752f7!2sCriteo!3m1!1s0x47e66e04d509ec8f:0xbf35e94464e752f7 Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Accomodation / Hotel ==&lt;br /&gt;
For sponsored participants, the hotel is: &lt;br /&gt;
&lt;br /&gt;
Timhotel Berthier Paris 17&amp;lt;br/&amp;gt;&lt;br /&gt;
4 Boulevard Berthier&amp;lt;br/&amp;gt;&lt;br /&gt;
75017 Paris, France&lt;br /&gt;
&lt;br /&gt;
http://www.timhotel-berthier-paris-17.com/&amp;lt;br/&amp;gt;&lt;br /&gt;
[https://www.google.fi/maps/place/Timhotel+Berthier+Paris+17/@48.894398,2.312611,17z/data=!3m1!4b1!4m2!3m1!1s0x47e66f9878ba126d:0x24a180f7131eebe5 Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Payment ==&lt;br /&gt;
The local currency is the Euro. Merchants are forbidden from accepting other currencies (except exchange).&lt;br /&gt;
&lt;br /&gt;
Most venues will accept EMV credit and debit cards (i.e. Chip &amp;amp; PIN), at least VISA and MasterCard. Swipe-only cards can be more tricky (it has been illegal for banks to issue them for years in France, so only foreign visitors use them). American Express is widely but not universally accepted. Diners/Discovery, UnionPay, JCB, etc. are mostly only accepted in shops catering to tourists.&lt;br /&gt;
&lt;br /&gt;
== Transportation ==&lt;br /&gt;
&lt;br /&gt;
* Public transport: [http://www.ratp.fr/itineraires/en/ratp/recherche-avancee RATP]&lt;br /&gt;
* Attendees arrival &amp;amp; departure list: [[VDD15/Attendees]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: VideoLAN does not refund taxi expenses nor car rentals.&lt;br /&gt;
&lt;br /&gt;
=== Paris-CDG / Roissy airport ===&lt;br /&gt;
&lt;br /&gt;
* Upon landing, follow the signs for local trains. There is one station for T1/T3 and one for T2 (A-G).&lt;br /&gt;
* At the station, look for &#039;&#039;&#039;blue/green&#039;&#039;&#039; ticket vending machines.&lt;br /&gt;
** Do not use the yellow/grey machines (at terminal 2), those are for long distance trains only.&lt;br /&gt;
* Buy a ticket for zones 1-5 (to Paris). The cost is 10€ one way. Credit cards are accepted.&lt;br /&gt;
** If you only have cash, you have to queue at the staffed ticketing booth (&amp;quot;&#039;&#039;Billeterie&#039;&#039;&amp;quot; in French)&lt;br /&gt;
* Take the regional express(RER) line B (blue). You can use any train toward Paris.&lt;br /&gt;
* Alight at &#039;&#039;Gare du Nord&#039;&#039;.&lt;br /&gt;
* See below from Gare du Nord.&lt;br /&gt;
&lt;br /&gt;
* 2€ Alternative From/To &#039;&#039;Palais Royal /Louvre&#039;&#039;: http://www.easybus.com/fr/paris-cdg (online booking), takes 50min&lt;br /&gt;
&lt;br /&gt;
=== Orly (ORY) airport ===&lt;br /&gt;
* Upon landing, follow the signs for Orlyval.&lt;br /&gt;
* At the station, buy the ticket from the vending machines, before boarding.&lt;br /&gt;
* Buy a ticket for Paris. The cost is 12€ one way. Credit cards are accepted.&lt;br /&gt;
** If you only have cash, you have to queue at the staffed ticketing booth (&amp;quot;&#039;&#039;Billeterie&#039;&#039;&amp;quot; in French)&lt;br /&gt;
* Take the Orlyval to Antony. Then take the regional express(RER) line B (blue) to Paris (Direction Charles de Gaulle Airport).&lt;br /&gt;
* Alight at &#039;&#039;Gare du Nord&#039;&#039;.&lt;br /&gt;
* See below from Gare du Nord.&lt;br /&gt;
&lt;br /&gt;
=== Beauvais (BVA) airport ===&lt;br /&gt;
We feel sorry for you. Take the bus.&lt;br /&gt;
&lt;br /&gt;
=== Gare du Nord (North railway station) ===&lt;br /&gt;
&lt;br /&gt;
If you arrive at Gare du Nord, you need to buy a zone 1 / Paris ticket. It is valid on the subway, the tramway, busses and, &#039;&#039;&#039;within the Paris city limits&#039;&#039;&#039;, on the regional express trains (RER).&lt;br /&gt;
&lt;br /&gt;
==== To the sponsored hotel ====&lt;br /&gt;
* Transfer to subway(M) &#039;&#039;&#039;line 2&#039;&#039;&#039; toward &#039;&#039;Porte Dauphine&#039;&#039;.&lt;br /&gt;
** You can also take line 4 first and then transfer to line 2 (shorter walking distance)&lt;br /&gt;
* Alight at &#039;&#039;&#039;Place de Clichy&#039;&#039;&#039; (6 stops)&lt;br /&gt;
* Transfer to subway(M) &#039;&#039;&#039;line 13&#039;&#039;&#039; toward &#039;&#039;Asnières&#039;&#039;.&lt;br /&gt;
* Get off at &#039;&#039;&#039;Porte de Clichy&#039;&#039;&#039; (4 stops)&lt;br /&gt;
&lt;br /&gt;
The hotel is just around the corner.&lt;br /&gt;
&lt;br /&gt;
==== To the conference venue ====&lt;br /&gt;
* Transfer to regional express (RER) line E (magenta) toward &#039;&#039;Haussman St Lazare&#039;&#039;.&lt;br /&gt;
* Get off at the final stop, &#039;&#039;Haussman St Lazare&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Walking route:&lt;br /&gt;
[https://www.google.fr/maps/dir/32+Rue+Blanche,+75009+Paris,+France/Haussmann+-+Saint-Lazare,+France/@48.8767778,2.3281097,17z/data=!3m1!4b1!4m14!4m13!1m5!1m1!1s0x47e66e49a8a4ba55:0x95f959c0c70dfded!2m2!1d2.3316096!2d48.8788866!1m5!1m1!1s0x47e66e35df16346b:0x5b4b229d8b94e143!2m2!1d2.329037!2d48.875188!3e2 Google Maps]&lt;br /&gt;
&lt;br /&gt;
=== Gare de l&#039;Est (East railway station) ===&lt;br /&gt;
If you arrive at Gare de l&#039;Est, you need to buy a zone 1 / Paris ticket. It is valid on the subway, the tramway, busses and, &#039;&#039;&#039;within the Paris city limits&#039;&#039;&#039;, on the regional express trains (RER).&lt;br /&gt;
&lt;br /&gt;
==== To the sponsored hotel ====&lt;br /&gt;
* Take subway(M) line 4 toward &#039;&#039;Porte de Clignancourt&#039;&#039;.&lt;br /&gt;
* Get off at &#039;&#039;Barbès-Rochechouart&#039;&#039; (3 stops).&lt;br /&gt;
* Transfer to subway(M) line 2 toward &#039;&#039;Porte Dauphine&#039;&#039;.&lt;br /&gt;
* Alight at &#039;&#039;&#039;Place de Clichy&#039;&#039;&#039; (5 stops)&lt;br /&gt;
* Transfer to subway(M) line 13 toward &#039;&#039;Asnières&#039;&#039;...&lt;br /&gt;
* Get off at &#039;&#039;&#039;Porte de Clichy&#039;&#039;&#039; (4 stops)&lt;br /&gt;
&lt;br /&gt;
The hotel is just around the corner.&lt;br /&gt;
&lt;br /&gt;
==== To the conference venue ====&lt;br /&gt;
* Take subway(M) line 7 toward &#039;&#039;Villejuif&#039;&#039;&lt;br /&gt;
* Get off at &#039;&#039;Chaussée d&#039;Antin (Lafayette)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Gare de Lyon (South/East railway station) ===&lt;br /&gt;
&lt;br /&gt;
=== Other? ===&lt;br /&gt;
&lt;br /&gt;
== From the hotel to the conference ==&lt;br /&gt;
* Take subway(M) line 13 toward &#039;&#039;Chatillon-Montrouge&#039;&#039;&lt;br /&gt;
* Get off at &#039;&#039;Liège&#039;&#039; and walk&lt;br /&gt;
&lt;br /&gt;
Feel free to ask for advice on the mailing list if your station is missing.&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
&lt;br /&gt;
=== Power supply ===&lt;br /&gt;
&lt;br /&gt;
The AC power sockets are &amp;quot;French&amp;quot; &#039;&#039;&#039;IEC type E&#039;&#039;&#039;. Connectors from &amp;quot;German&amp;quot; &#039;&#039;&#039;IEC type F&#039;&#039;&#039; countries should fit safely, as they are usually bi-standards. There should have a hole for the French-style ground pin.&lt;br /&gt;
&lt;br /&gt;
The electrical system is &#039;&#039;&#039;220V / 50Hz&#039;&#039;&#039;. If you come from outside Europe, please make sure your devices are compatible beforehand.&lt;br /&gt;
&lt;br /&gt;
=== Internet ===&lt;br /&gt;
Hopefully, there will be Wi-Fi.&lt;br /&gt;
&lt;br /&gt;
== Weather forecast ==&lt;br /&gt;
&lt;br /&gt;
:Fri Sep 18 Occasional rain 20°C Low 12°C &lt;br /&gt;
:Sat Sep 19 Occasional rain 19°C Low 10°C &lt;br /&gt;
:Sun Sep 20 Fog 20°C Low 12°C &lt;br /&gt;
:Mon Sep 21 Mostly cloudy 18°C Low 12°C &lt;br /&gt;
&lt;br /&gt;
In Fahrenheit, this is a high of 64°F-66°F and a low of 50°F.&lt;br /&gt;
&lt;br /&gt;
[[Category:About VideoLAN]]&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VDD15/Attendees&amp;diff=30234</id>
		<title>VDD15/Attendees</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VDD15/Attendees&amp;diff=30234"/>
		<updated>2015-09-05T10:49:59Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Arrivals =&lt;br /&gt;
Please order chronologically by time of arrival.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! IRC&lt;br /&gt;
! Time&lt;br /&gt;
! Port&lt;br /&gt;
! Vessel&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Arwa Arif&lt;br /&gt;
| arwa&lt;br /&gt;
| 2015-09-17 08:20&lt;br /&gt;
| CDG airport&lt;br /&gt;
| 9W 126&lt;br /&gt;
| from BOM&lt;br /&gt;
|-&lt;br /&gt;
| Tim Miller&lt;br /&gt;
| drasticactions&lt;br /&gt;
| 2015-09-17 08:35&lt;br /&gt;
| CDG airport&lt;br /&gt;
| DL 243 (AF 3655)&lt;br /&gt;
| from BOS&lt;br /&gt;
|-&lt;br /&gt;
| Rostislav Pehlivanov&lt;br /&gt;
| atomnuker&lt;br /&gt;
| 2015-09-17 10:17&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| TGV TMST&lt;br /&gt;
| from London&lt;br /&gt;
|-&lt;br /&gt;
| Kieran Kunhya&lt;br /&gt;
| kierank&lt;br /&gt;
| 2015-09-17 16:47&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| Eurostar&lt;br /&gt;
| from London&lt;br /&gt;
|-&lt;br /&gt;
| David Fuhrmann&lt;br /&gt;
| d-fu&lt;br /&gt;
| 2015-09-17 20:54&lt;br /&gt;
| Gare de Est&lt;br /&gt;
| TGV 9552&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Francois Cartegnie&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-17 21:16&lt;br /&gt;
| Gare de Lyon&lt;br /&gt;
| TGV 6198&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Pavlov&lt;br /&gt;
| thresh&lt;br /&gt;
| 2015-09-17 22:30&lt;br /&gt;
| CDG airport T2C&lt;br /&gt;
| SU 2460&lt;br /&gt;
| from Moscow/SVO&lt;br /&gt;
|-&lt;br /&gt;
| Ronald S. Bultje&lt;br /&gt;
| BBB&lt;br /&gt;
| 2015-09-18 9:20&lt;br /&gt;
| CDG airport&lt;br /&gt;
| DL 400 (AF 3577)&lt;br /&gt;
| from NY/JFK&lt;br /&gt;
|-&lt;br /&gt;
| Thierry Foucu&lt;br /&gt;
| lotharkript&lt;br /&gt;
| 2015-09-18 10:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 990&lt;br /&gt;
| from SFO&lt;br /&gt;
|-&lt;br /&gt;
| Federico Hlawaczek&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-18 10:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 990&lt;br /&gt;
| from SFO&lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont&lt;br /&gt;
| courmisch&lt;br /&gt;
| 2015-09-18 21:35&lt;br /&gt;
| CDG airport T2D&lt;br /&gt;
| AY 877&lt;br /&gt;
| from Helsinki&lt;br /&gt;
|-&lt;br /&gt;
| Janne Grunau&lt;br /&gt;
| jannau&lt;br /&gt;
| 2015-09-18 22:35&lt;br /&gt;
| Gare de l&#039;Est&lt;br /&gt;
| TGV 9570&lt;br /&gt;
| from Karlsruhe&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Departures =&lt;br /&gt;
Please order chronologically by time of departure.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! IRC&lt;br /&gt;
! Time&lt;br /&gt;
! Port&lt;br /&gt;
! Vessel&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Mc Fly Marty&lt;br /&gt;
| mcfly&lt;br /&gt;
| 1985-10-26 01:22&lt;br /&gt;
| Hill Valley, California&lt;br /&gt;
| DeLorean OUTATIME&lt;br /&gt;
| to Hill Valley&lt;br /&gt;
|-&lt;br /&gt;
| Tim Miller&lt;br /&gt;
| drasticactions&lt;br /&gt;
| 2015-09-20 16:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 338&lt;br /&gt;
| to BOS&lt;br /&gt;
|-&lt;br /&gt;
| Janne Grunau&lt;br /&gt;
| jannau&lt;br /&gt;
| 2015-09-20 17:25&lt;br /&gt;
| Gare de l&#039;Est&lt;br /&gt;
| TGV 9577&lt;br /&gt;
| to Karlsruhe&lt;br /&gt;
|-&lt;br /&gt;
| David Fuhrmann&lt;br /&gt;
| d-fu&lt;br /&gt;
| 2015-09-20 17:25&lt;br /&gt;
| Match found&lt;br /&gt;
| -- same train --&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Francois Cartegnie&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-20 17:49&lt;br /&gt;
| Gare de Lyon&lt;br /&gt;
| TGV 6949&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont&lt;br /&gt;
| courmisch&lt;br /&gt;
| 2015-09-20 19:00&lt;br /&gt;
| CDG airport T2D&lt;br /&gt;
| AY 874&lt;br /&gt;
| to Helsinki&lt;br /&gt;
|-&lt;br /&gt;
| Federico Hlawaczek&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-21 10:05&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 991&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
| Rostislav Pehlivanov&lt;br /&gt;
| atomnuker&lt;br /&gt;
| 2015-09-21 10:13&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| TGV TMST&lt;br /&gt;
| to London&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Pavlov&lt;br /&gt;
| thresh&lt;br /&gt;
| 2015-09-21 10:40&lt;br /&gt;
| CDG airport T2E&lt;br /&gt;
| AF 84&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
| Arwa Arif&lt;br /&gt;
| arwa&lt;br /&gt;
| 2015-09-21 10:50&lt;br /&gt;
| CDG airport&lt;br /&gt;
| EY 32&lt;br /&gt;
| to HYD&lt;br /&gt;
|-&lt;br /&gt;
| Ben littler&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-21 13:30&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 378&lt;br /&gt;
| to DTW&lt;br /&gt;
|-&lt;br /&gt;
| Ronald S. Bultje&lt;br /&gt;
| BBB&lt;br /&gt;
| 2015-09-21 14:00&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 6&lt;br /&gt;
| to NY/JFK&lt;br /&gt;
|-&lt;br /&gt;
| Thierry Foucu&lt;br /&gt;
| lotharkript&lt;br /&gt;
| 2015-09-22 10:05&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 991&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Locals =&lt;br /&gt;
People who do not need to travel:&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VDD15/Attendees&amp;diff=30233</id>
		<title>VDD15/Attendees</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VDD15/Attendees&amp;diff=30233"/>
		<updated>2015-09-05T10:49:13Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Arrivals =&lt;br /&gt;
Please order chronologically by time of arrival.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! IRC&lt;br /&gt;
! Time&lt;br /&gt;
! Port&lt;br /&gt;
! Vessel&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Arwa Arif&lt;br /&gt;
| arwa&lt;br /&gt;
| 2015-09-17 08:20&lt;br /&gt;
| CDG airport&lt;br /&gt;
| 9W 126&lt;br /&gt;
| from BOM&lt;br /&gt;
|-&lt;br /&gt;
| Tim Miller&lt;br /&gt;
| drasticactions&lt;br /&gt;
| 2015-09-17 08:35&lt;br /&gt;
| CDG airport&lt;br /&gt;
| DL 243 (AF 3655)&lt;br /&gt;
| from BOS&lt;br /&gt;
|-&lt;br /&gt;
| Rostislav Pehlivanov&lt;br /&gt;
| atomnuker&lt;br /&gt;
| 2015-09-17 10:17&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| TGV TMST&lt;br /&gt;
| from London&lt;br /&gt;
|-&lt;br /&gt;
| Kieran Kunhya&lt;br /&gt;
| kierank&lt;br /&gt;
| 2015-09-17 13:31&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| Eurostar&lt;br /&gt;
| from London&lt;br /&gt;
|-&lt;br /&gt;
| David Fuhrmann&lt;br /&gt;
| d-fu&lt;br /&gt;
| 2015-09-17 20:54&lt;br /&gt;
| Gare de Est&lt;br /&gt;
| TGV 9552&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Francois Cartegnie&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-17 21:16&lt;br /&gt;
| Gare de Lyon&lt;br /&gt;
| TGV 6198&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Pavlov&lt;br /&gt;
| thresh&lt;br /&gt;
| 2015-09-17 22:30&lt;br /&gt;
| CDG airport T2C&lt;br /&gt;
| SU 2460&lt;br /&gt;
| from Moscow/SVO&lt;br /&gt;
|-&lt;br /&gt;
| Ronald S. Bultje&lt;br /&gt;
| BBB&lt;br /&gt;
| 2015-09-18 9:20&lt;br /&gt;
| CDG airport&lt;br /&gt;
| DL 400 (AF 3577)&lt;br /&gt;
| from NY/JFK&lt;br /&gt;
|-&lt;br /&gt;
| Thierry Foucu&lt;br /&gt;
| lotharkript&lt;br /&gt;
| 2015-09-18 10:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 990&lt;br /&gt;
| from SFO&lt;br /&gt;
|-&lt;br /&gt;
| Federico Hlawaczek&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-18 10:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 990&lt;br /&gt;
| from SFO&lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont&lt;br /&gt;
| courmisch&lt;br /&gt;
| 2015-09-18 21:35&lt;br /&gt;
| CDG airport T2D&lt;br /&gt;
| AY 877&lt;br /&gt;
| from Helsinki&lt;br /&gt;
|-&lt;br /&gt;
| Janne Grunau&lt;br /&gt;
| jannau&lt;br /&gt;
| 2015-09-18 22:35&lt;br /&gt;
| Gare de l&#039;Est&lt;br /&gt;
| TGV 9570&lt;br /&gt;
| from Karlsruhe&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Departures =&lt;br /&gt;
Please order chronologically by time of departure.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! IRC&lt;br /&gt;
! Time&lt;br /&gt;
! Port&lt;br /&gt;
! Vessel&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Mc Fly Marty&lt;br /&gt;
| mcfly&lt;br /&gt;
| 1985-10-26 01:22&lt;br /&gt;
| Hill Valley, California&lt;br /&gt;
| DeLorean OUTATIME&lt;br /&gt;
| to Hill Valley&lt;br /&gt;
|-&lt;br /&gt;
| Tim Miller&lt;br /&gt;
| drasticactions&lt;br /&gt;
| 2015-09-20 16:45&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 338&lt;br /&gt;
| to BOS&lt;br /&gt;
|-&lt;br /&gt;
| Janne Grunau&lt;br /&gt;
| jannau&lt;br /&gt;
| 2015-09-20 17:25&lt;br /&gt;
| Gare de l&#039;Est&lt;br /&gt;
| TGV 9577&lt;br /&gt;
| to Karlsruhe&lt;br /&gt;
|-&lt;br /&gt;
| David Fuhrmann&lt;br /&gt;
| d-fu&lt;br /&gt;
| 2015-09-20 17:25&lt;br /&gt;
| Match found&lt;br /&gt;
| -- same train --&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Francois Cartegnie&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-20 17:49&lt;br /&gt;
| Gare de Lyon&lt;br /&gt;
| TGV 6949&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont&lt;br /&gt;
| courmisch&lt;br /&gt;
| 2015-09-20 19:00&lt;br /&gt;
| CDG airport T2D&lt;br /&gt;
| AY 874&lt;br /&gt;
| to Helsinki&lt;br /&gt;
|-&lt;br /&gt;
| Federico Hlawaczek&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-21 10:05&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 991&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
| Rostislav Pehlivanov&lt;br /&gt;
| atomnuker&lt;br /&gt;
| 2015-09-21 10:13&lt;br /&gt;
| Gare du Nord&lt;br /&gt;
| TGV TMST&lt;br /&gt;
| to London&lt;br /&gt;
|-&lt;br /&gt;
| Konstantin Pavlov&lt;br /&gt;
| thresh&lt;br /&gt;
| 2015-09-21 10:40&lt;br /&gt;
| CDG airport T2E&lt;br /&gt;
| AF 84&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
| Arwa Arif&lt;br /&gt;
| arwa&lt;br /&gt;
| 2015-09-21 10:50&lt;br /&gt;
| CDG airport&lt;br /&gt;
| EY 32&lt;br /&gt;
| to HYD&lt;br /&gt;
|-&lt;br /&gt;
| Ben littler&lt;br /&gt;
| &lt;br /&gt;
| 2015-09-21 13:30&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 378&lt;br /&gt;
| to DTW&lt;br /&gt;
|-&lt;br /&gt;
| Ronald S. Bultje&lt;br /&gt;
| BBB&lt;br /&gt;
| 2015-09-21 14:00&lt;br /&gt;
| CDG airport&lt;br /&gt;
| AF 6&lt;br /&gt;
| to NY/JFK&lt;br /&gt;
|-&lt;br /&gt;
| Thierry Foucu&lt;br /&gt;
| lotharkript&lt;br /&gt;
| 2015-09-22 10:05&lt;br /&gt;
| CDG airport&lt;br /&gt;
| UA 991&lt;br /&gt;
| to SFO&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Locals =&lt;br /&gt;
People who do not need to travel:&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VDD14/Sessions&amp;diff=27137</id>
		<title>VDD14/Sessions</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VDD14/Sessions&amp;diff=27137"/>
		<updated>2014-09-20T11:16:33Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* Proposed VDD sessions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;[[VDD14|← Back to the VDD14 page]]&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rooms ===&lt;br /&gt;
&lt;br /&gt;
==== 11th floor ====&lt;br /&gt;
* Ocean&#039;s eleven, large room with talks, for ~80 people&lt;br /&gt;
* Kitchen11, coffee, for ~30 people&lt;br /&gt;
&lt;br /&gt;
==== 12th floor ====&lt;br /&gt;
* PepperClip, small meeting rooms for ~10 people&lt;br /&gt;
* FiloFax, small meeting rooms for ~10 people&lt;br /&gt;
* Kitchen12, coffee and cool layout for ~20 people&lt;br /&gt;
&lt;br /&gt;
==== 13rd floor ====&lt;br /&gt;
&lt;br /&gt;
* Kitchen13, coffee and cool layout for ~20 people&lt;br /&gt;
* Galileo, meeting room, for ~20 people&lt;br /&gt;
* Docks view, for ~8people&lt;br /&gt;
&lt;br /&gt;
=== Etherpad to take Notes ===&lt;br /&gt;
https://beta.etherpad.org/&lt;br /&gt;
&lt;br /&gt;
=== Scheduled VDD sessions ===&lt;br /&gt;
&lt;br /&gt;
==== Saturday ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time&lt;br /&gt;
! Oceans&#039; eleven&lt;br /&gt;
! Galileo&lt;br /&gt;
! Kitchen11&lt;br /&gt;
! Kitchen12&lt;br /&gt;
! Kitchen13&lt;br /&gt;
|-&lt;br /&gt;
! 14:00 - 16:00&lt;br /&gt;
| VLC technical discussion&lt;br /&gt;
| libav technical discussions &lt;br /&gt;
| FFmpeg technical discussion &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 16:00 - 16:15&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | Coffee Break&lt;br /&gt;
|-&lt;br /&gt;
! 16:15 - 18:15&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | T.B.D.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! 18:30 - 19:00&lt;br /&gt;
| Wrapping up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sunday ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time&lt;br /&gt;
! Room 1&lt;br /&gt;
! Room 2&lt;br /&gt;
! Room 3&lt;br /&gt;
! Room 4&lt;br /&gt;
! Room 5&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 16:00&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | T.B.D.&lt;br /&gt;
| Hacking&lt;br /&gt;
|-&lt;br /&gt;
| 16:00 - 16:15&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | Break&lt;br /&gt;
|-&lt;br /&gt;
| 16:15 - 18:15&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | T.B.D.&lt;br /&gt;
| Hacking&lt;br /&gt;
|-&lt;br /&gt;
| 18:30 - 19:00&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | Wrapping up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proposed VDD sessions ===&lt;br /&gt;
&lt;br /&gt;
==== Road towards HWAccel 2 ====&lt;br /&gt;
During this year we moved two steps towards version [[https://wiki.libav.org/Blueprint/HWAccel2 2]]:&lt;br /&gt;
&lt;br /&gt;
* 1.2 -&amp;gt; default context allocators&lt;br /&gt;
* 1.3 -&amp;gt; bitstream-oriented hwaccel support&lt;br /&gt;
&lt;br /&gt;
During this session we will discuss about how to provide an&lt;br /&gt;
uniform structure to avoid even more boilerplate code and still&lt;br /&gt;
allow full control to the people needing it.&lt;br /&gt;
&lt;br /&gt;
==== ChromeCast ====&lt;br /&gt;
How do we achieve VLC using Chromecast?&lt;br /&gt;
&lt;br /&gt;
==== Media Library ====&lt;br /&gt;
Current state and conception of needed functionality for a cross-platform library to collect meta data, thumbnails and so on for use within media handling applications based on libvlc. Written in C++.&lt;br /&gt;
&lt;br /&gt;
==== VLC Mobile Remotes ====&lt;br /&gt;
There is a major feature missing in VLC&#039;s mobile apps, which is currently provided through third party apps. Control VLC remotely running on a desktop. What needs to be done both on client and server-side to provide an advanced and seamless integration between the platforms?&lt;br /&gt;
&lt;br /&gt;
==== VLC Subpicture Framework improvements for hwaccel rendering ====&lt;br /&gt;
As of today for picture type subpictures (DVB Subtitles, VBI pages, ...) a software scale step is forced into the pipeline. To make better use of hardware being able to render scaled overlays this shall be omitted. But it seems some significant changes in the VLC core are required to support this in a common way, which some brainstorming on would be required.&lt;br /&gt;
&lt;br /&gt;
==== EBU-TT-D integration in VLC and/or ffmpeg ====&lt;br /&gt;
&lt;br /&gt;
==== Android ====&lt;br /&gt;
&lt;br /&gt;
==== iOS ====&lt;br /&gt;
&lt;br /&gt;
==== WinRT ====&lt;br /&gt;
&lt;br /&gt;
==== x264 meeting ====&lt;br /&gt;
&lt;br /&gt;
==== Opus in MP4 ====&lt;br /&gt;
We should sit down and design this mapping.&lt;br /&gt;
&lt;br /&gt;
==== Binary Album Art extensions for Ogg ====&lt;br /&gt;
We&#039;ve had a proposal to include binary (not base64-encoded) album art for Ogg in the context of Ogg Opus: &amp;lt;http://www.ietf.org/mail-archive/web/codec/current/msg03061.html&amp;gt;.&lt;br /&gt;
This session would determine if there is interest from players in supporting such an extension and working on the design.&lt;br /&gt;
&lt;br /&gt;
==== libav/FFmpeg discussion ====&lt;br /&gt;
&lt;br /&gt;
==== Testing ====&lt;br /&gt;
Seems like everybody is doing the same very flaky or very manual thing when testing video processing and player software. Can we do better?&lt;br /&gt;
&lt;br /&gt;
==== Broadcasting things ====&lt;br /&gt;
An attempt to justify what broadcasters are doing.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=26286</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=26286"/>
		<updated>2013-12-20T23:53:31Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
*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;
&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;
&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 --device support. &lt;br /&gt;
*Add automatic --level restriction support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:x264]]&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25426</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25426"/>
		<updated>2013-10-01T08:29:13Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side the issues can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 8 or 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== SDI extension to V4L2 thoughts ==&lt;br /&gt;
Single SDI file descriptor. Open, setup options (bit-depth etc), poll on descriptor with buffers to read (or mmap if the data is large enough?).&lt;br /&gt;
&lt;br /&gt;
Receive minimum of one line of data starting at EAV to subsequent EAV. Either in v210 for 10-bit or UYVY for 8-bit. Userspace has the responsibility of parsing the datastream (easily doable with a libsdi component).&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25425</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25425"/>
		<updated>2013-10-01T07:10:13Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* SDI extension to V4L2 thoughts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 8 or 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== SDI extension to V4L2 thoughts ==&lt;br /&gt;
Single SDI file descriptor. Open, setup options (bit-depth etc), poll on descriptor with buffers to read (or mmap if the data is large enough?).&lt;br /&gt;
&lt;br /&gt;
Receive minimum of one line of data starting at EAV to subsequent EAV. Either in v210 for 10-bit or UYVY for 8-bit. Userspace has the responsibility of parsing the datastream (easily doable with a libsdi component).&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25289</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25289"/>
		<updated>2013-09-26T19:28:15Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* SDI extension to V4L2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 8 or 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== SDI extension to V4L2 thoughts ==&lt;br /&gt;
Single SDI file descriptor. Open, setup options (bit-depth etc), poll on descriptor with buffers to read (or mmap if the data is large enough?).&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25288</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25288"/>
		<updated>2013-09-26T19:27:44Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 8 or 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== SDI extension to V4L2 ==&lt;br /&gt;
Single SDI file descriptor. Open, setup options (bit-depth etc), poll on descriptor with buffers to read (or mmap if the data is large enough?).&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25287</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25287"/>
		<updated>2013-09-26T19:16:39Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== API thoughts ==&lt;br /&gt;
Single file descriptor. Open, setup options (pixel format etc), poll on descriptor with buffers to read (or mmap if the data is large enough?).&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25286</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25286"/>
		<updated>2013-09-26T19:13:38Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame for things like Closed captions&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== API thoughts ==&lt;br /&gt;
Single file descriptor. Open, setup options (pixel format etc), poll on descriptor with queued and dqueued mmapped buffers.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25284</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25284"/>
		<updated>2013-09-26T19:04:08Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* Thoughts about SDI API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll response (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== API thoughts ==&lt;br /&gt;
Single file descriptor. Open, setup options (pixel format etc), poll on descriptor with queued and dqueued mmapped buffers.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25283</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25283"/>
		<updated>2013-09-26T19:01:14Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;br /&gt;
&lt;br /&gt;
== API thoughts ==&lt;br /&gt;
Single file descriptor. Open, setup options (pixel format etc), poll on descriptor with queued and dqueued mmapped buffers.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25282</id>
		<title>SDI API</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SDI_API&amp;diff=25282"/>
		<updated>2013-09-26T18:59:26Z</updated>

		<summary type="html">&lt;p&gt;Kieran: Created page with &amp;quot;== Thoughts about SDI API ==  There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thoughts about SDI API ==&lt;br /&gt;
&lt;br /&gt;
There are a number of manufacturers using V4L2, sometimes alongside ALSA, to provide Linux drivers for their SDI cards. This causes a lot of issues for professional users. There are a number of proprietary APIs that provide a better interface for professional users. On the capture side they can be described as follows:&lt;br /&gt;
&lt;br /&gt;
* Separate file descriptors for Audio/Video meaning sync must be performed with timestamps (if they exist; sometimes they don&#039;t). This is the most serious issue in a professional environment.&lt;br /&gt;
* Timestamps are sometimes generated with the system clock and do not reflect the way audio is transported in SDI, nor precise nature of NTSC timestamps.&lt;br /&gt;
* Impossible to select number of lines to capture per poll (e.g x lines, one field, one frame)&lt;br /&gt;
* Impossible to keep NTSC audio samples per video frame cadence, nor line number where audio starts&lt;br /&gt;
* 10-bit capture (though this is easy to solve in V4L2)&lt;br /&gt;
* Signals when frames are dropped (so alternative signals can be sent)&lt;br /&gt;
* An API for accessing VBI and HBI in 10-bit alongside the frame&lt;br /&gt;
&lt;br /&gt;
Most of these issues are caused by the separation of Audio/Video/Blanking so the two solutions in that area could be accurate timestamps (using a 27mhz clock) or data returned multiplexed. Another way of solving the issue would be to have an SDI &amp;quot;pixel format&amp;quot; and userspace could parse the datastream itself as VLC does with the Computermodules SD-SDI driver.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22842</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=22842"/>
		<updated>2012-07-21T22:59:38Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* Lookahead */&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;
*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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19805</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19805"/>
		<updated>2011-10-31T17:33:11Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* 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;
&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;
*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;
*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;
&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;
*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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19689</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19689"/>
		<updated>2011-09-23T15:02:58Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* 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;
&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;
*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;
*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;
&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;
*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;
&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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19542</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19542"/>
		<updated>2011-08-22T13:41:36Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* 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;
&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;
*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;
*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;
&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;
*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;
*&#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;
*Segment re-encoding&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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19461</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19461"/>
		<updated>2011-07-25T16:40:31Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
*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 only accepting one student this year as part of SOCIS.  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. There are also experts from ARM Shanghai who are optimizing x264 who may also be able to help.&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;
&#039;&#039;&#039;This project is not recommended unless you have a very significant amount of experience with CUDA or OpenCL.&#039;&#039;&#039;&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;
===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;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19449</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19449"/>
		<updated>2011-07-20T20:40:40Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* 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 -- 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;
*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 only accepting one student this year as part of SOCIS.  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. There are also experts from ARM Shanghai who are optimizing x264 who may also be able to help.&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;
==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;
===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;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19442</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19442"/>
		<updated>2011-07-19T14:14:40Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
*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. There are also experts from ARM Shanghai who are optimizing x264 who may also be able to help.&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;
==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;
===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;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19429</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19429"/>
		<updated>2011-07-14T00:43:04Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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 ESA Summer of Code in Space.&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. There are also experts from ARM Shanghai who are optimizing x264 who may also be able to help.&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;
==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;
===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;
==Contact info==&lt;br /&gt;
If you are interested, drop by #x264dev or #x264 on Freenode and ping Dark Shikari.&lt;/div&gt;</summary>
		<author><name>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19428</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19428"/>
		<updated>2011-07-14T00:42:29Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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 ESA Summer of Code in Space.&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. There are also experts from ARM Shanghai who are optimizing x264 who may also be able to help.&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;
==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;
===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;
==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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19427</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19427"/>
		<updated>2011-07-14T00:40:35Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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 ESA Summer of Code in Space.&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;
===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;
==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;
===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;
==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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19426</id>
		<title>SOCIS x264 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=SOCIS_x264_2011&amp;diff=19426"/>
		<updated>2011-07-14T00:39:34Z</updated>

		<summary type="html">&lt;p&gt;Kieran: Created page with &amp;quot;==Introduction to x264 and Summer of Code== x264 is one of the most popular video compression libraries in the world, used worldwide for applications such as web video, telev…&amp;quot;&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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19425</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19425"/>
		<updated>2011-07-13T21:46:12Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
&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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19424</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=19424"/>
		<updated>2011-07-13T19:49:55Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
&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 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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18828</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18828"/>
		<updated>2011-03-16T10:39:15Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* 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;
* 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;
&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;
* Port functions (where useful) to AVX, talk to Daniel Kang 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;
* 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 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;
* 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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18752</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=18752"/>
		<updated>2011-03-03T15:08:49Z</updated>

		<summary type="html">&lt;p&gt;Kieran: /* H.264/MVC */&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;
===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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=SoC_x264_2011&amp;diff=18751</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=18751"/>
		<updated>2011-03-03T15:00:51Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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 mentor and 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;
===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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18641</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18641"/>
		<updated>2011-01-24T08:36:17Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
* 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;
&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;
* 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 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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18607</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=18607"/>
		<updated>2011-01-16T19:35:20Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
* PAFF + MBAFF adaptive.&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;
* 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 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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17623</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17623"/>
		<updated>2010-11-16T01:32:30Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
* 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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17622</id>
		<title>X264 TODO</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=X264_TODO&amp;diff=17622"/>
		<updated>2010-11-16T01:31:55Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;
* Support for timecodes&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>Kieran</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=X264_GCodeIn_Ideas&amp;diff=17509</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=17509"/>
		<updated>2010-11-06T21:40:57Z</updated>

		<summary type="html">&lt;p&gt;Kieran: &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;: easy-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;: 1-2 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>Kieran</name></author>
	</entry>
</feed>