#!/usr/bin/perl use Video::Capture::V4l; use Time::HiRes 'time'; $grab = new Video::Capture::V4l; my $channel = $grab->channel (0); my $tuner = $grab->tuner (0); $tuner->mode(MODE_PAL); $tuner->set; $channel->norm(MODE_PAL); $channel->set; $grab->picture->brightness(32768); $grab->picture->contrast(40000); $grab->picture->hue(32768); $grab->picture->colour(32768); $grab->picture->set; #$RTL2 = 855250; $RTL2 = 154250; print $grab->freq ($RTL2),"\n"; $|=1; open DB," }; my $frame=0; my $fr=$grab->capture ($frame,$w<<4,$h<<4); my $fps = 25; # glorious PAL my @reg; my ($expect_frame,$expect_count); my $start = time; my $next_frame = 0; my $this_frame; my $locked; my $minb1 = 10; for(;;) { my $nfr = $grab->capture (1-$frame,$w<<4,$h<<4); $this_frame = $next_frame; $next_frame = int((time-$start)*$fps); $grab->sync($frame) or die "unable to sync"; Video::Capture::V4l::reduce2($fr,$w<<4); Video::Capture::V4l::reduce2($fr,$w<<3); Video::Capture::V4l::reduce2($fr,$w<<2); Video::Capture::V4l::reduce2($fr,$w<<1); Video::Capture::V4l::normalize($fr); ($fr,$diff) = Video::Capture::V4l::findmin ($db, $fr, $expect_frame, $expect_count); if ($diff < 400*400) { push(@reg,$this_frame,$fr); if (@reg > $fps*2) { shift @reg; shift @reg; my ($a,$b,$r2) = Video::Capture::V4l::linreg(\@reg); if ($frame_zero) { $expect_frame = $this_frame + $frame_zero + 1; $expect_count = 25; } else { $expect_frame = $expect_count = 0; } printf "%9.2f + %7.2f * %6d =~ %4d (@%9.2f) EXPECT %6d - %4d ($minb1)",$a,$b,$this_frame,$fr,$r2,$frame_zero,$expect_frame; my $b1 = abs($b-1); if ($r2<100 && $b1<0.01) { $found++; print " LOCKED LOCKED LOCKED ($locked, $frame_zero)"; } if ($b1<$minb1) { $frame_zero=-$a; $minb1 = $b1; } print "\n"; } $jitter=0; } else { $jitter++; if ($jitter > 5) { $expect_frame=$expect_count=$frame_zero=0; } } if ($found && $this_frame>$frame_zero+2000) { print "KICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFFKICKOFF\n"; die; } $count++; $frame = 1-$frame; $fr = $nfr; }