diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2009-10-19 09:01:10 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2009-10-19 09:01:10 +0000 |
commit | 0e8cea8527ad2dde96063546fc2bb4989e21c25b (patch) | |
tree | cf3d15b373120581161613774161e9f3f19fbceb | |
parent | 844e6360c2a61086c13fa799f5b6679f6e9b480d (diff) |
Add code to generate and show program screen while waiting for the
next entry.
-rwxr-xr-x | frikanalen/bin/scheduler | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/frikanalen/bin/scheduler b/frikanalen/bin/scheduler index 4a1ef33..475bf23 100755 --- a/frikanalen/bin/scheduler +++ b/frikanalen/bin/scheduler @@ -16,6 +16,8 @@ use XML::Simple; use Data::Dumper; use LWP::UserAgent; use Date::Parse; +use GD; +use POSIX; # SOAP:Lite må modifiseres til å gjøre ting på MS måten :-/ use SOAP::Lite on_action => sub {sprintf '%s/%s', @_}, ; @@ -89,7 +91,7 @@ while ($seq < scalar @events) { my $wait = $starttime - $now; my $title = $event->{'title'}; print "Waiting $wait seconds to start '$title' $start\n"; - show_program($seq); + show_program($vlc, $seq); sleep $wait; process_event($vlc, $event); } elsif ($stoptime >= $now && $starttime <= $now) { @@ -101,15 +103,58 @@ while ($seq < scalar @events) { } sub show_program { - my $start = shift; + my ($vlc, $startseq) = @_; + + my $im = new GD::Image(720,576); # PAL + my $white = $im->colorAllocate(255,255,255); + my $black = $im->colorAllocate( 0, 0, 0); + my $fontsize = 20; + my $left = 0; + my $font = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"; + $im->fill(50,50,$white); + my @bounds = + $im->stringFT($black,$font,$fontsize*2,$left,30,50,"Frikanalen"); + + $bounds[1] += 100; # Move rest of the text down on the screen + my $seq = 0; + my $date = ""; while ($seq < 5) { - my $event = $events[$start + $seq]; + my $event = $events[$startseq + $seq]; my $title = $event->{'title'}; my $start = $event->{'start'}; - print " $start $title\n"; + my $starttime = str2time($start); + my $timestring = strftime("%H:%M", localtime($starttime)); + my $datestring = strftime("%Y-%m-%d", localtime($starttime)); + if ($date ne $datestring) { + my $infostring = "$datestring"; + print " $infostring\n"; + @bounds = $im->stringFT($black,$font,$fontsize,$left, + 150, $bounds[1] + $fontsize * 2, "$infostring"); + $date = $datestring; + } + my $infostring = "$timestring - $title"; + print " $infostring\n"; + @bounds = $im->stringFT($black,$font,$fontsize,$left, + 150, $bounds[1] + $fontsize * 2, "$infostring"); $seq++; } + + if (open(PNG, ">", "test.png")) { + print "Generate pause screen DV\n"; + print PNG $im->png; + close(PNG); + my $len = 10 * 25; # 10 seconds in frames (25 frames/second) + # use image2raw from package smilutils + system("image2raw -r $len test.png > test.dv"); + # Generate Ogg Theora, VLC do not understand raw DV + + system("ffmpeg2theora --width 384 --height 288 -o test.ogv test.dv"); + print "Done generating pause screen DV\n"; + vlc_play($vlc, "test.ogv"); + } else { + print "Unable to save test.png\n"; + } } sub start_order { |