{"id":105,"date":"2005-08-01T23:20:49","date_gmt":"2005-08-02T05:20:49","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=105"},"modified":"2006-06-11T11:22:20","modified_gmt":"2006-06-11T18:22:20","slug":"pavc-crashes-linux-kernel","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/pavc-crashes-linux-kernel\/","title":{"rendered":"PAVC Crashes Linux Kernel"},"content":{"rendered":"<p>I was trying to prototype some coding ideas for the new PAVC codec. Specifically, I decided to run the palettized keyframe data through the <a href=\"http:\/\/www.dogma.net\/markn\/articles\/bwt\/bwt.htm\">Burrows-Wheeler Transform (BWT)<\/a> followed by a move-to-front (MTF) encoder and a Golomb encoder. Why BWT? I guess because I do not see it used in video compression at all and I wanted to see how it stacked up. In comparison to the <a href=\"http:\/\/multimedia.cx\/eggs\/?p=103\">least-bit approach in the last experiment<\/a>, the results were a little better on my NES sample and significantly better for my SNES sample:<\/p>\n<p><center><br \/>\n<img decoding=\"async\" src=\"\/eggs\/images\/castlevania4.png\" alt=\"Super Castlevania IV\" \/><br \/>\n<a href=\"http:\/\/www.mobygames.com\/game\/snes\/super-castlevania-iv\"><em>Super Castlevania IV, SNES<\/em><\/a><br \/>\n<\/center><\/p>\n<p>A serious problem, however, is that my AMD64 Linux PC kept crashing during the encoding. Eventually, I tried upgrading the kernel but that procedure also crashed. Per my understanding, these things are not supposed to happen during normal operation. I thought maybe my computer was too hot on this August night. So I am typing this in Windows XP on the same machine and no problem has manifested yet. Maybe I should try the <em>Doom 3<\/em> demo&#8230;<\/p>\n<p><!--more--><\/p>\n<p>Hmm, well, <em>Doom 3<\/em> crashes pretty quickly, too. I guess I can claim that the problem is heat exhaustion on the part of the hardware. Anyway, presented for your academic consideration are some very shaky numbers from some very dodgy experiments. I should disclose at this point that I have not actually written a decoder for the BWT\/MTF\/Golomb coding method yet. But since the <a href=\"http:\/\/www.dogma.net\/markn\/articles\/bwt\/bwt.htm\">standalone sample code provided by the BWT article worked so well<\/a>, and I incorporated the same code into the encoder, I am at least a little confident that the compressed data is valid.<\/p>\n<p>NES sample, least bit method:<\/p>\n<pre>\r\n  60 video frames, 0m1s running time, 1694598 total video bytes\r\n  1694598 avg video bytes\/sec, 28243 avg video bytes\/frame\r\n  min video frame = 28722 bytes, max video frame = 28722 bytes\r\n<\/pre>\n<p>NES sample, BWT\/MTF\/Golomb method:<\/p>\n<pre>\r\n  60 video frames, 0m1s running time, 1272276 total video bytes\r\n  1272276 avg video bytes\/sec, 21204 avg video bytes\/frame\r\n  min video frame = 21564 bytes, max video frame = 21564 bytes\r\n<\/pre>\n<p>SNES sample, least bit method:<\/p>\n<pre>\r\n  60 video frames, 0m1s running time, 3408719 total video bytes\r\n  3408719 avg video bytes\/sec, 56811 avg video bytes\/frame\r\n  min video frame = 57742 bytes, max video frame = 57802 bytes\r\n<\/pre>\n<p>SNES sample, BWT\/MTF\/Golomb method:<\/p>\n<pre>\r\n  60 video frames, 0m1s running time, 1294749 total video bytes\r\n  1294749 avg video bytes\/sec, 21579 avg video bytes\/frame\r\n  min video frame = 21912 bytes, max video frame = 21972 bytes\r\n<\/pre>\n<p>I only collected the first 60 frames (1 second) of data since the kernel was likely to panic if I ran the testbed program any longer. Thus, we do not see those best-case scenarios, where the whole frame is a single color, that we saw in the previous experiment.<\/p>\n<p>The next experiment I wish to try is a limited block search on keyframes. I have seen this technique used in <a href=\"http:\/\/multimedia.cx\/interplay-mve.txt\">Interplay&#8217;s MVE format<\/a>. Search the area above and to the left for a block that matches the one to be coded. This could potentially work very well, especially for NES frames which rely on 8&#215;8 block tiling, have a high degree of redundancy, and do not commonly have overlapped, transparent backgrounds. And for even faster encoding, it should only be necessary to search on 8-pel boundaries with respect to the current block being coded.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So I was developing PAVC and the Linux kernel kept crashing&#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,20],"tags":[],"class_list":["post-105","post","type-post","status-publish","format-standard","hentry","category-open-source-multimedia","category-pavc"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/105","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=105"}],"version-history":[{"count":0,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}