{"id":2575,"date":"2010-06-23T21:55:20","date_gmt":"2010-06-24T04:55:20","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=2575"},"modified":"2010-06-23T21:57:44","modified_gmt":"2010-06-24T04:57:44","slug":"ffmpeg-has-a-native-vp8-decoder","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/ffmpeg-has-a-native-vp8-decoder\/","title":{"rendered":"FFmpeg Has A Native VP8 Decoder"},"content":{"rendered":"<p>Thanks to David Conrad and <a href=\"http:\/\/ronald.bitfreak.net\/\">Ronald Bultje<\/a> who committed their native VP8 video decoder to the FFmpeg codebase yesterday. At this point, it can decode 14\/17 of the VP8 test vectors that Google released during the initial open sourcing event. Work is ongoing on those 3 non-passing samples (missing bilinear filter). Meanwhile, FFmpeg&#8217;s optimization-obsessive personalities are hard at work optimizing the native decoder. The current decoder is already profiled to be faster than Google\/On2&#8217;s official libvpx.<\/p>\n<p><strong>Testing<\/strong><br \/>\nSo it falls to <a href=\"http:\/\/fate.multimedia.cx\/\">FATE<\/a> to test this on the ridiculous diversity of platforms that FFmpeg supports. I staged individual test specs for each of the 17 test vectors: <a href=\"http:\/\/fate.multimedia.cx\/index.php?test_spec=390\">vp8-test-vector-001<\/a> &#8230; <a href=\"http:\/\/fate.multimedia.cx\/index.php?test_spec=406\">vp8-test-vector-017<\/a>. After <a href=\"http:\/\/samples.mplayerhq.hu\/fate-suite\/vp8-test-vectors-r1\/\">the samples<\/a> have propagated through to the various FATE installations, I&#8217;ll activate the 14 test specs that are currently passing.<\/p>\n<p><strong>Initial Testing Methodology<\/strong><br \/>\nInspired by <a href=\"http:\/\/lists.mplayerhq.hu\/pipermail\/ffmpeg-devel\/2010-June\/091344.html\">Ronald Bultje&#8217;s idea<\/a>, I built the latest FFmpeg-SVN with libvpx enabled. Then I selected between the reference and native decoders as such:<\/p>\n<pre>\r\n<strong>$<\/strong> for i in 001 002 003 004 005 006 007 008 009 \\\r\n 010 011 012 013 014 015 016 017\r\ndo\r\n  echo vp80-00-comprehensive-${i}.ivf\r\n  ffmpeg -vcodec libvpx -i \\\r\n    \/path\/to\/vp8-test-vectors-r1\/vp80-00-comprehensive-${i}.ivf \\\r\n    -f framemd5 - 2> \/dev\/null\r\ndone > refs.txt\r\n\r\n<strong>$<\/strong> for i in 001 002 003 004 005 006 007 008 009 \\\r\n 010 011 012 013 014 015 016 017\r\ndo\r\n  echo vp80-00-comprehensive-${i}.ivf\r\n  ffmpeg -vcodec vp8 -i \\\r\n    \/path\/to\/vp8-test-vectors-r1\/vp80-00-comprehensive-${i}.ivf \\\r\n    -f framemd5 - 2> \/dev\/null\r\ndone > native.txt\r\n\r\n<strong>$<\/strong> diff -u refs.txt native.txt\r\n<\/pre>\n<p>That reveals precisely which files differ.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FFmpeg (the ubiquitous multimedia backend library) handles VP8 decoding without any outside help<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[219],"tags":[],"class_list":["post-2575","post","type-post","status-publish","format-standard","hentry","category-vp8"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/comments?post=2575"}],"version-history":[{"count":10,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2575\/revisions"}],"predecessor-version":[{"id":2585,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2575\/revisions\/2585"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=2575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=2575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=2575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}