{"id":190,"date":"2006-01-15T21:06:00","date_gmt":"2006-01-16T05:06:00","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=190"},"modified":"2006-01-15T21:07:53","modified_gmt":"2006-01-16T05:07:53","slug":"profiles-in-multimedia-hacking","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/profiles-in-multimedia-hacking\/","title":{"rendered":"Profiles In Multimedia Hacking"},"content":{"rendered":"<p>Kudos to Reimar D\u00f6ffinger for a new, clean implementation of the LZO lossless coding algorithm for the <a href=\"http:\/\/ffmpeg.sf.net\">FFmpeg project<\/a>. This means that there is one less external package that multimedia players have to rely on since there is an equivalent capability in FFmpeg.<\/p>\n<p>I wanted to highlight this because it is useful when someone undertakes to re-implement a decoder from another package as another FFmpeg module. This has happened a number of times already, in the cases of Vorbis, FLAC, and VP3, for example. Remember, reverse engineering also applies to understanding bodies of code written in higher level languages than ASM and re-implementing them based on your newfound understanding.<\/p>\n<p>For eye candy, check out Reimar&#8217;s <a href=\"http:\/\/www.stud.uni-karlsruhe.de\/~uvhe\/LZODraw_bw.png\">&#8220;show your work&#8221; handwritten notes<\/a> for understanding the LZO decoder. The original LZO decoder seemed to have so many labels and goto statements that it might as well have been written in straight ASM.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meet Reimar D\u00c3\u00b6ffinger&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-open-source-multimedia","category-reverse-engineering"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/190","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=190"}],"version-history":[{"count":0,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}