From 41650393e8037493532fdcb18f793696af2d2e6a Mon Sep 17 00:00:00 2001 From: Anssi Hannula Date: Sun, 3 Jan 2010 04:34:01 +0000 Subject: move standard timing mode parsing into its own function --- monitor-parse-edid | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) (limited to 'monitor-parse-edid') diff --git a/monitor-parse-edid b/monitor-parse-edid index 73fc264..dacc8ad 100755 --- a/monitor-parse-edid +++ b/monitor-parse-edid @@ -662,6 +662,28 @@ sub build_detailed_timing { $h; } +sub add_standard_timing_modes { + my ($edid, $v) = @_; + + my @aspect2ratio = ( + $edid->{edid_version} > 1 || $edid->{edid_revision} > 2 ? '16/10' : '1/1', + '4/3', '5/4', '16/9', + ); + $v = [ map { + my $h = get_many_bits($_, 'standard_timing'); + $h->{X} = ($h->{X} + 31) * 8; + if ($_ ne "\x20\x20" && $h->{X} > 256) { # cf VALID_TIMING in Xorg edid.h + $h->{vfreq} += 60; + if ($h->{ratio} = $aspect2ratio[$h->{aspect}]) { + delete $h->{aspect}; + $h->{Y} = $h->{X} / eval($h->{ratio}); + } + $h; + } else { () } + } unpack('a2' x 8, $v) ]; + $v; +} + sub parse_edid { my ($raw_edid, $verbose) = @_; @@ -688,22 +710,7 @@ sub parse_edid { map { /(\d+)x(\d+)_(\d+)(i?)/ ? { X => $1, Y => $2, vfreq => $3, $4 ? (interlace => 1) : () } : () } grep { $h->{$_} } keys %$h ]; } elsif ($field eq 'standard_timings') { - my @aspect2ratio = ( - $edid{edid_version} > 1 || $edid{edid_revision} > 2 ? '16/10' : '1/1', - '4/3', '5/4', '16/9', - ); - $v = [ map { - my $h = get_many_bits($_, 'standard_timing'); - $h->{X} = ($h->{X} + 31) * 8; - if ($_ ne "\x20\x20" && $h->{X} > 256) { # cf VALID_TIMING in Xorg edid.h - $h->{vfreq} += 60; - if ($h->{ratio} = $aspect2ratio[$h->{aspect}]) { - delete $h->{aspect}; - $h->{Y} = $h->{X} / eval($h->{ratio}); - } - $h; - } else { () } - } unpack('a2' x 8, $v) ]; + $v = add_standard_timing_modes(\%edid, $v); } elsif ($field eq 'monitor_details') { while ($v) { (my $pixel_clock, my $vv, $v) = unpack("v a16 a*", $v); -- cgit v1.2.1