#!/usr/bin/perl
use Video::Capture::V4l;
use Video::Capture::VBI;
use Fcntl;
$vbi = new Video::Capture::V4l::VBI or die;
# the next line is optional (it enables buffering)
$vbi->backlog(50); # max. 1 second backlog (~900kB)
open $fh, ">/dev/null" or die;
# 162203 -> 162586 jinglesize (5000)
# line 0 - relatively normal teletext line (80a Data)
# line 1 - hhFFOOOOLLLLcccccc
# h maybe vertical/horizontal ecc like in intercast?
# F fileno?
# O offset in file
# L length of file
# c checksum?
my $head;
my $body;
for (;;) {
for (decode_field $vbi->field, VBI_VT) {
if ($_->[1] == 0) {
if ($_->[2] == 0) {
printf "\n %04x %s", $_->[5], (unpack "H*", $_->[3]);
} elsif ($_->[2] == 1) {
$head = $_->[3];
$body = "";
} else {
print " ",unpack "H8", $_->[3];
$body .= substr ($_->[3], 1);
if ($_->[2] == 23 && length($body) == (22*39) && $head) {
my ($fno, $t2, $t3) = unpack "xxvVV", $head;
my $seq = Video::Capture::VBI::unham8($head);
if ($t2 <= $t3 && $fno) {
(print "\n$seq X"), next if substr($head,0,1) eq "\xea";
(print "\n$seq Y"), next if substr($head,0,1) eq "\xfd";
my ($s) = unpack "H*", $head;
printf "\n(%2x, %5d, %8d, %8d) # %s-%s", $seq, $fno, $t2, $t3, substr($s,12*2,6*2), substr($s,18*2);
print "X" if substr($head,0,1) eq "\xea";
print "Y" if substr($head,0,1) eq "\xfd";
sysopen FH, "/tmp/nbc/$fno", O_CREAT|O_RDWR, 0666 or die "/tmp/nbc/$fno: $!";
seek FH, $t2, 0;
print " offset $t2 appending (",tell(FH),")";
print FH substr($head, 18);
print FH $body;
close FH;
}
}
}
}
}
}