/[amv]/amv.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /amv.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8 by dpavlin, Fri Jul 20 11:13:55 2007 UTC revision 15 by dpavlin, Sat Jul 21 11:05:43 2007 UTC
# Line 15  use strict; Line 15  use strict;
15  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
16  use Carp qw/confess/;  use Carp qw/confess/;
17  use File::Path;  use File::Path;
18    use Getopt::Long;
19    
20  my $dump = 0;  my $dump = 0;
21  my $debug = 0;  my $debug = 0;
22    my $dump_dir = '/tmp/dump/';
23    
24    GetOptions(
25            "dump!"                 => \$dump,
26            "debug!"                => \$debug,
27            "dump-dir=s"    => \$dump_dir,
28    );
29    
30  my $path = shift @ARGV || die "usage: $0 movie.amv\n";  my $path = shift @ARGV || die "usage: $0 movie.amv\n";
31    
32  my $dump_dir = '/tmp/dump/';  
33  if ( ! -e $dump_dir ) {  rmtree $dump_dir if -e $dump_dir;
34          mkpath $dump_dir || die "can't create $dump_dir: $!";  mkpath $dump_dir || die "can't create $dump_dir: $!";
 }  
35    
36  open(my $fh, '<', $path) || die "can't open $path: $!";  open(my $fh, '<', $path) || die "can't open $path: $!";
37    
# Line 164  sub mkjpg { Line 171  sub mkjpg {
171                  0,0,            # X,Y thumbnail                  0,0,            # X,Y thumbnail
172          ).          ).
173  #------------------------------------------------------------------  #------------------------------------------------------------------
174                  "\xFF\xDB".     # Define Quantization table marker          "\xFF\xC0".     # Start of frame
                 "\x00\x43".     # len  
                 "\x00".         # the precision and the quantization table index  
                 "\x00" x 64 .  
 #------------------------------------------------------------------  
                 "\xFF\xC0".     # Start of frame  
175          pack("ncnncc9",          pack("ncnncc9",
176                  17,                     # len                  17,                     # len
177                  8,                      # sample precision in bits                  8,                      # sample precision in bits
178                  120,160,        # X,Y size                  120,160,        # X,Y size
179                  3,                      # number of components                  3,                      # number of components
180                  1,0x22,0,       # Component ID, H+V sampling factors, Quantization table number                  1,0x21,0,       # Component ID, H+V sampling factors, Quantization table number
181                  2,0x11,0,                  2,0x11,1,
182                  3,0x11,0,                  3,0x11,1,
183          ).          ).
184  #------------------------------------------------------------------  #------------------------------------------------------------------
185            "\xFF\xDB".             # Define Quantization table marker
186            "\x00\x84".             # len
187            "\x00".                 # 8 bit values, (byte) table 0
188            "\x10\x0B\x0C\x0E\x0C".
189            "\x0A\x10\x0E\x0D\x0E".
190            "\x12\x11\x10\x13\x18".
191            "\x28\x1A\x18\x16\x16".
192            "\x18\x31\x23\x25\x1D".
193            "\x28\x3A\x33\x3D\x3C".
194            "\x39\x33\x38\x37\x40".
195            "\x48\x5C\x4E\x40\x44".
196            "\x57\x45\x37\x38\x50".
197            "\x6D\x51\x57\x5F\x62".
198            "\x67\x68\x67\x3E\x4D".
199            "\x71\x79\x70\x64\x78".
200            "\x5C\x65\x67\x63".
201            "\x01".         # 8 bit values, (byte) table 1
202            "\x11\x12\x12\x18\x15".
203            "\x18\x2F\x1A\x1A\x2F".
204            "\x63\x42\x38\x42\x63".
205            "\x63\x63\x63\x63\x63".
206            "\x63\x63\x63\x63\x63".
207            "\x63\x63\x63\x63\x63".
208            "\x63\x63\x63\x63\x63".
209            "\x63\x63\x63\x63\x63".
210            "\x63\x63\x63\x63\x63".
211            "\x63\x63\x63\x63\x63".
212            "\x63\x63\x63\x63\x63".
213            "\x63\x63\x63\x63\x63".
214            "\x63\x63\x63\x63".
215    #------------------------------------------------------------------
216  #       huffman("\x00").        # 0 DC  #       huffman("\x00").        # 0 DC
217          huffman("\x01").        # 1 DC  #       huffman("\x01").        # 1 DC
218  #       huffman("\x10").        # 0 AC  #       huffman("\x10").        # 0 AC
219  #       huffman("\x11").        # 1 AC  #       huffman("\x11").        # 1 AC
220  #------------------------------------------------------------------  #------------------------------------------------------------------
221            # Define huffman table (section B.2.4.1)
222            "\xFF\xC4".             # Marker
223            "\x00\x1F".             # Length (31 bytes)
224            "\x00".                 # DC, (byte) table 0
225            "\x00\x01\x05\x01\x01".
226            "\x01\x01\x01\x01\x00".
227            "\x00\x00\x00\x00\x00".
228            "\x00\x00\x01\x02\x03".
229            "\x04\x05\x06\x07\x08".
230            "\x09\x0A\x0B".
231            # Define huffman table (section B.2.4.1)
232            "\xFF\xC4".             # Marker
233            "\x00\xB5".             # Length (181 bytes)
234            "\x10".                 # AC, (byte) table 0
235            "\x00\x02\x01\x03\x03".
236            "\x02\x04\x03\x05\x05".
237            "\x04\x04\x00\x00\x01".
238            "\x7D\x01\x02\x03\x00".
239            "\x04\x11\x05\x12\x21".
240            "\x31\x41\x06\x13\x51".
241            "\x61\x07\x22\x71\x14".
242            "\x32\x81\x91\xA1\x08".
243            "\x23\x42\xB1\xC1\x15".
244            "\x52\xD1\xF0\x24\x33".
245            "\x62\x72\x82\x09\x0A".
246            "\x16\x17\x18\x19\x1A".
247            "\x25\x26\x27\x28\x29".
248            "\x2A\x34\x35\x36\x37".
249            "\x38\x39\x3A\x43\x44".
250            "\x45\x46\x47\x48\x49".
251            "\x4A\x53\x54\x55\x56".
252            "\x57\x58\x59\x5A\x63".
253            "\x64\x65\x66\x67\x68".
254            "\x69\x6A\x73\x74\x75".
255            "\x76\x77\x78\x79\x7A".
256            "\x83\x84\x85\x86\x87".
257            "\x88\x89\x8A\x92\x93".
258            "\x94\x95\x96\x97\x98".
259            "\x99\x9A\xA2\xA3\xA4".
260            "\xA5\xA6\xA7\xA8\xA9".
261            "\xAA\xB2\xB3\xB4\xB5".
262            "\xB6\xB7\xB8\xB9\xBA".
263            "\xC2\xC3\xC4\xC5\xC6".
264            "\xC7\xC8\xC9\xCA\xD2".
265            "\xD3\xD4\xD5\xD6\xD7".
266            "\xD8\xD9\xDA\xE1\xE2".
267            "\xE3\xE4\xE5\xE6\xE7".
268            "\xE8\xE9\xEA\xF1\xF2".
269            "\xF3\xF4\xF5\xF6\xF7".
270            "\xF8\xF9\xFA".
271            # Define huffman table (section B.2.4.1)
272            "\xFF\xC4".             # Marker
273            "\x00\x1F".             # Length (31 bytes)
274            "\x01".                 # DC, (byte) table 1
275            "\x00\x03\x01\x01\x01".
276            "\x01\x01\x01\x01\x01".
277            "\x01\x00\x00\x00\x00".
278            "\x00\x00\x01\x02\x03".
279            "\x04\x05\x06\x07\x08".
280            "\x09\x0A\x0B".
281            # Define huffman table (section B.2.4.1)
282            "\xFF\xC4".             # Marker
283            "\x00\xB5".             # Length (181 bytes)
284            "\x11".                 # AC, (byte) table 1
285            "\x00\x02\x01\x02\x04".
286            "\x04\x03\x04\x07\x05".
287            "\x04\x04\x00\x01\x02".
288            "\x77\x00\x01\x02\x03".
289            "\x11\x04\x05\x21\x31".
290            "\x06\x12\x41\x51\x07".
291            "\x61\x71\x13\x22\x32".
292            "\x81\x08\x14\x42\x91".
293            "\xA1\xB1\xC1\x09\x23".
294            "\x33\x52\xF0\x15\x62".
295            "\x72\xD1\x0A\x16\x24".
296            "\x34\xE1\x25\xF1\x17".
297            "\x18\x19\x1A\x26\x27".
298            "\x28\x29\x2A\x35\x36".
299            "\x37\x38\x39\x3A\x43".
300            "\x44\x45\x46\x47\x48".
301            "\x49\x4A\x53\x54\x55".
302            "\x56\x57\x58\x59\x5A".
303            "\x63\x64\x65\x66\x67".
304            "\x68\x69\x6A\x73\x74".
305            "\x75\x76\x77\x78\x79".
306            "\x7A\x82\x83\x84\x85".
307            "\x86\x87\x88\x89\x8A".
308            "\x92\x93\x94\x95\x96".
309            "\x97\x98\x99\x9A\xA2".
310            "\xA3\xA4\xA5\xA6\xA7".
311            "\xA8\xA9\xAA\xB2\xB3".
312            "\xB4\xB5\xB6\xB7\xB8".
313            "\xB9\xBA\xC2\xC3\xC4".
314            "\xC5\xC6\xC7\xC8\xC9".
315            "\xCA\xD2\xD3\xD4\xD5".
316            "\xD6\xD7\xD8\xD9\xDA".
317            "\xE2\xE3\xE4\xE5\xE6".
318            "\xE7\xE8\xE9\xEA\xF2".
319            "\xF3\xF4\xF5\xF6\xF7".
320            "\xF8\xF9\xFA".
321    #------------------------------------------------------------------
322                  "\xFF\xDA".     # Start of Scan marker                  "\xFF\xDA".     # Start of Scan marker
323          pack("nC11",          pack("nC11",
324                  12,                     # length                  12,                     # length
325                  3,                      # number of components                  3,                      # number of components
326                  1,0,            # components DC+AC table numbers                  1,0x00,         # Scan 1: use DC/AC huff tables 0/0
327                  2,17,                  2,0x11,         # Scan 2: use DC/AC huff tables 1/1
328                  3,17,                  3,0x11,         # Scan 3: use DC/AC huff tables 1/1
329                  0,63,           # Ss, Se                  0,0x3f,         # Ss, Se
330                  0,165,          # Ah, Ai                  0,                      # Ah, Ai (not used)
331          );          );
332  #------------------------------------------------------------------  #------------------------------------------------------------------
333    
334            my $header =
335            # SOI
336            "\xFF\xD8".
337            # JFIF
338            "\xFF\xE0".
339            "\x00\x0e\x41\x56\x49\x31\x00\x00\x00\x00\x00\x00\x00\x00".
340            "\xff\xDD\x00\x04\x00\x00".
341            # quantization table
342            "\xFF\xDB".
343            "\x00\x43\x00\x21\x16\x18".
344            "\x1D\x18\x14\x21\x1D\x1B\x1D\x25".
345            "\x23\x21\x27\x31\x53\x36\x31\x2D".
346            "\x2D\x31\x65\x48\x4c\x3c\x53\x78".
347            "\x6a\x7e\x7c\x76\x6a\x74\x72\x85".
348            "\x95\xbf\xa2\x85\x8d\xb4\x8f\x72".
349            "\x74\xa6\xe2\xa8\xb4\xc5\xcb\xd6".
350            "\xd8\xd6\x80\xa0\xeb\xfb\xe8\xd0".
351            "\xf9\xbf\xd2\xd6\xcd".
352            # quantization table
353            "\xff\xdb".
354            "\x00\x43\x01\x23\x25\x25\x31\x2b\x31".
355            "\x61\x36\x36\x61\xcd\x89\x74\x89".
356            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
357            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
358            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
359            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
360            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
361            "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd".
362            "\xcd\xcd".
363            # Define huffman table (section B.2.4.1)
364            "\xFF\xC4".     # Marker
365            "\x00\x1F".     # Length (31 bytes)
366            "\x00".         # DC luminance, table 0
367            "\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00".
368            "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B".
369            # Define huffman table (section B.2.4.1)
370            "\xFF\xC4".     # Marker
371            "\x00\x1F".     # Length (31 bytes)
372            "\x01".         # DC chrominance, table 1
373            "\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00".
374            "\x00\x00\x00\x00".
375            "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B".
376            # Define huffman table (section B.2.4.1)
377            "\xFF\xC4".     # Marker
378            "\x00\xB5".     # Length (181 bytes)
379            "\x10".         # AC luminance, table 0
380            "\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01\x7D".
381            "\x01\x02\x03\x00\x04\x11\x05\x12".
382            "\x21\x31\x41\x06\x13\x51\x61\x07\x22\x71\x14\x32".
383            "\x81\x91\xA1\x08\x23\x42\xB1\xC1\x15\x52\xD1\xF0".
384            "\x24\x33\x62\x72\x82\x09\x0A\x16\x17\x18\x19\x1A".
385            "\x25\x26\x27\x28\x29\x2A\x34\x35\x36\x37\x38\x39".
386            "\x3A\x43\x44\x45\x46\x47\x48\x49\x4A\x53\x54\x55".
387            "\x56\x57\x58\x59\x5A\x63\x64\x65\x66\x67\x68\x69".
388            "\x6A\x73\x74\x75\x76\x77\x78\x79\x7A\x83\x84\x85".
389            "\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98".
390            "\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2".
391            "\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5".
392            "\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8".
393            "\xD9\xDA\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA".
394            "\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA".
395            #/* Define huffman table (section B.2.4.1) */
396            "\xFF\xC4".     # Marker
397            "\x00\xB5".     # Length (181 bytes)
398            "\x11".         # AC chrominance, table 1
399            "\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04".
400            "\x00\x01\x02\x77".
401            "\x00\x01\x02\x03\x11\x04\x05\x21".
402            "\x31\x06\x12\x41\x51\x07\x61\x71\x13\x22\x32\x81".
403            "\x08\x14\x42\x91\xA1\xB1\xC1\x09\x23\x33\x52\xF0".
404            "\x15\x62\x72\xD1\x0A\x16\x24\x34\xE1\x25\xF1\x17".
405            "\x18\x19\x1A\x26\x27\x28\x29\x2A\x35\x36\x37\x38".
406            "\x39\x3A\x43\x44\x45\x46\x47\x48\x49\x4A\x53\x54".
407            "\x55\x56\x57\x58\x59\x5A\x63\x64\x65\x66\x67\x68".
408            "\x69\x6A\x73\x74\x75\x76\x77\x78\x79\x7A\x82\x83".
409            "\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96".
410            "\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9".
411            "\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3".
412            "\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6".
413            "\xD7\xD8\xD9\xDA\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9".
414            "\xEA\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA".
415            # start of frame
416            "\xff\xc0".
417            "\x00\x11\x08".
418            pack("nn", 120, 160).
419            "\x03\x01\x21\x00\x02\x11\x01\x03\x11\x01".
420            #
421            "\xff\xda".
422            "\x00\x0c\x03\x01\x00\x02\x11\x03\x11".
423            "\x00\x3f\x00";
424    
425            if ( $dump ) {
426                    warn "## created JPEG header...\n";
427                    hex_dump( $header, 0 );
428            }
429    
430          warn "## created JPEG header...", dump( $header );          print $fh $header || die "can't write header into $path: $!";
431          hex_dump( $header, 0 );          print $fh $data || die "can't write frame into $path: $!";
   
         print $fh $header . $data || die "can't write frame into $path: $!";  
432          close $fh || die "can't close $path: $!";          close $fh || die "can't close $path: $!";
433          print ">> created $path ", -s $path, " bytes\n";          print ">> created $path ", -s $path, " bytes\n";
434  }  }

Legend:
Removed from v.8  
changed lines
  Added in v.15

  ViewVC Help
Powered by ViewVC 1.1.26