File Coverage

blib/lib/Image/MetaData/JPEG/parsers/app14.pl
Criterion Covered Total %
statement 21 21 100.0
branch 1 2 50.0
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 27 29 93.1


line stmt bran cond sub pod time code
1             ###########################################################
2             # A Perl package for showing/modifying JPEG (meta)data. #
3             # Copyright (C) 2004,2005,2006 Stefano Bettelli #
4             # See the COPYING and LICENSE files for license terms. #
5             ###########################################################
6 15     15   64 use Image::MetaData::JPEG::data::Tables qw(:TagsAPP14);
  15         20  
  15         1411  
7 15     15   72 no integer;
  15         22  
  15         126  
8 15     15   283 use strict;
  15         22  
  15         348  
9 15     15   54 use warnings;
  15         16  
  15         2289  
10              
11             ###########################################################
12             # This method parses a misterious Adobe APP14 segment. #
13             # Adobe uses this segment to record information at the #
14             # time of compression such as whether or not the sample #
15             # values were blended and which color transform was #
16             # performed upon the data. The format is the following: #
17             #---------------------------------------------------------#
18             # 5 bytes "Adobe" as identifier (non null-terminated) #
19             # 2 bytes DCTEncode/DCTDecode version number (0x65) #
20             # 2 bytes flags0 #
21             # 2 bytes flags1 #
22             # 1 byte transform code #
23             #=========================================================#
24             # Ref: "Supporting the DCT Filters in PostScript Level 2",#
25             # Adobe Developer Support, Tech. note #5116, pag.27 #
26             ###########################################################
27             sub parse_app14 {
28 2     2 0 4 my ($this) = @_;
29 2         3 my $offset = 0;
30             # exactly 12 bytes, or die
31 2         5 $this->test_size(12);
32             # they say that this segment always starts with a specific
33             # string from Adobe, namely "Adobe". For the time being,
34             # die if you find something else
35 2         6 my $identifier = $this->store_record
36             ('Identifier', $ASCII, $offset, 5)->get_value();
37 2 50       7 $this->die("Wrong identifier ($identifier)")
38             if $identifier ne $APP14_PHOTOSHOP_IDENTIFIER;
39             # the rest is trivial
40 2         5 $this->store_record('DCT_TransfVersion' , $SHORT, $offset );
41 2         6 $this->store_record('Flags0' , $UNDEF, $offset, 2);
42 2         5 $this->store_record('Flags1' , $UNDEF, $offset, 2);
43 2         6 $this->store_record('TransformationCode', $BYTE, $offset );
44             }
45              
46             # successful load
47             1;