Perl DVD decoder

  • From: John Madden <weez@xxxxxxxxxxxxx>
  • To: <computers@xxxxxxxxxxxxx>
  • Date: Wed, 7 Mar 2001 08:42:57 -0500 (EST)


This was on Slashdot this morning - I feel it's worthy of a repost (the
archive will make a nice mirror ;)).  It's a perl script that does DVD
decoding, and it's something the movie industry feels we shouldn't have--
that makes it even better. :)


"A rewrite, using an extra six bytes (!) of perl code, caches
a table, which apparently makes the program fast enough to decode a movie
in realtime: "


$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%16or$t^=$c^=(
$m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^=12*($_%16
-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);if((@a=unx"C*",$_)[20]&48){$h
=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$
d=unxV,xb25,$_;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=$t&($d>>12^$d>>4^
$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^
(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval

As Touretzky writes on his Gallery page, typical usage is
just: cat /mnt/dvd/VOB_FILE_NAME | qrpff 153 2 8 105 225 | extract_mpeg2
| mpeg2dec -


...



# John Madden  weez@xxxxxxxxxxxxxx ICQ: 2EB9EA
# FreeLists, Free mailing lists for all: http://www.freelists.org
# UNIX Systems Engineer, Ivy Tech State College: http://www.ivy.tec.in.us
# Linux, Apache, Perl and C: All the best things in life are free!




Other related posts: