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

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

  ViewVC Help
Powered by ViewVC 1.1.26