use JSON;
use HTML::TreeBuilder;
use Graphics::Magick;
+use lib 'lib';
+use HTML5TV::Slides;
my $debug = $ENV{DEBUG} || 0;
sub load_movie {
warn "$movie ", -s $movie, " bytes $edl\n";
print $to_mplayer qq|loadfile "$movie"\n|;
- print $to_mplayer "get_property $_\n" foreach ( qw/metadata video_codec video_bitrate width height fps length/ );
load_subtitles;
}
}
- my $slide_overview = Graphics::Magick->new;
-
- foreach my $slide (
- sort {
- my $n_a = $1 if $a =~ m{(\d+)};
- my $n_b = $1 if $b =~ m{(\d+)};
- $n_a <=> $n_b || $a cmp $b
- } glob("$media_dir/s/2/*")
- ) {
- my $s = Graphics::Magick->new;
- $s->ReadImage( $slide );
- push @$slide_overview, $s;
- }
-
- my $montage = $slide_overview->Montage(
- geometry => "320x200+5+5>",
- tile => '3x+10+10',
- compose => 'over',
- background => '#ffffff',
- font => 'Sans', pointsize => 18, fill => '#ff0', stroke => 'none',
- shadow => 'true',
- );
- $montage->Set( matte => 'false' );
- $montage->Write( filename => "$media_dir/s/overview.jpg" );
-# $montage->Write('win:'); # blocks
-
my ($slide_width, $slide_height, $size, $format) = Graphics::Magick->new->Ping( slide_jpg( $slide_factor => 1 ) );
my $html5tv = {
load_movie;
+my $slides = HTML5TV::Slides->new;
+
+print $to_mplayer "get_property $_\n" foreach grep { ! $prop->{$_} } ( qw/metadata video_codec video_bitrate width height fps length/ );
+
while ( 1 ) {
my @fd_selected = $select->can_read(1);
+ current_subtitle( sub {
+ my ($nr,$pos) = @_;
+ $slides->show( $nr, $pos );
+ } ) if ! @fd_selected;
+
foreach my $fileno ( @fd_selected ) {
if ( $fileno == $from_mplayer ) {
+package HTML5TV::Slides;
+
use warnings;
use strict;
-package HTML5TV::Slides;
-
use SDL::App;
use SDL::Surface;
use SDL::Rect;
+use Data::Dump qw/dump/;
+
sub new {
my $class = shift;
my $self = {
- border_color => SDL::Color->new( -r => 0xFF, -g => 0xCC, -b => 0x00 ),
+ last_nr => -42,
};
bless $self, $class;
}
-our $app;
-
-my ( $x, $y ) = ( 0, 0 );
-my ( $w, $h );
+sub show {
+ my ( $self, $nr ) = @_;
-my @factors = ( qw/ 4 4 4 4 1 2 2 4 4 4 4 / );
+ if ( $self->{last_nr} == $nr ) {
+ $self->{app}->sync if $self->{app};
+ return;
+ }
-foreach my $path (
- sort {
- my $n_a = $1 if $a =~ m{(\d+)};
- my $n_b = $1 if $b =~ m{(\d+)};
- $n_a <=> $n_b || $a cmp $b
- } glob("media/_editing/s/2/*")
-) {
+ $self->{last_nr} = $nr;
- my $factor = shift @factors || '4';
- $path =~ s{/s/[124]/}{/s/$factor/};
+ my @subtitles =
+ sort {
+ my $n_a = $1 if $a =~ m{(\d+)};
+ my $n_b = $1 if $b =~ m{(\d+)};
+ $n_a <=> $n_b || $a cmp $b
+ } glob("media/_editing/s/1/*")
+ ;
- my $slide = SDL::Surface->new( -name => $path );
+ my $slide = SDL::Surface->new( -name => $subtitles[0] );
+ my $w = $slide->width;
+ my $h = $slide->height;
- my $rect = SDL::Rect->new(
- -width => $slide->width(),
- -height => $slide->height(),
- -x => 0,
- -y => 0,
- );
+ my @factors = ( qw/ 4 4 4 4 1 2 2 4 4 4 4 / );
- my $to = SDL::Rect->new(
- -width => $slide->width(),
- -height => $slide->height(),
- -x => $x,
- -y => $y,
- );
+ my ( $x, $y ) = ( 0, 0 );
- warn "$x $y $path\n";
+ my $background = SDL::Color->new( -r => 0x11, -g => 0x11, -b => 0x33 );
- if ( ! $app ) {
- $w = $slide->width() * $factor;
- $h = $slide->height() * $factor * 2;
+ foreach my $i ( 0 .. $#factors ) {
- warn "window $w $h\n";
+ my $factor = $factors[$i] || die "no factor $i in ",dump @factors;
- $app = SDL::App->new(
- -width => $w,
- -height => $h,
- -depth => 24,
- -title => 'Slides',
+ my $to = SDL::Rect->new(
+ -width => $w / $factor,
+ -height => $h / $factor,
+ -x => $x,
+ -y => $y,
);
- }
+ my $pos = $nr + $i - 5;
-
- $slide->blit( $rect, $app, $to );
- $app->update( $to );
+ if ( $pos < 0 ) {
- $x += $slide->width();
+ $slide->fill( $to, $background );
- if ( $x >= $w ) {
- $x = 0;
- $y += $slide->height();
- }
+ } else {
-}
+ my $path = $subtitles[ $pos ];
+ $path =~ s{/s/[124]/}{/s/$factor/};
+
+ my $slide = SDL::Surface->new( -name => $path );
-$app->sync;
+ my $rect = SDL::Rect->new(
+ -width => $slide->width(),
+ -height => $slide->height(),
+ -x => 0,
+ -y => 0,
+ );
-warn "window $w $h\n";
+# warn "$x $y $path\n";
+ if ( ! $self->{app} ) {
-<STDIN>;
+ $self->{app} = SDL::App->new(
+ -width => $w,
+ -height => $h * 2,
+ -depth => 24,
+ -title => 'Slides',
+ );
+
+ }
+
+ $slide->blit( $rect, $self->{app}, $to );
+
+ }
+
+ $self->{app}->update( $to ) if $self->{app};
+
+ $x += $w / $factor;
+
+ if ( $x >= $w ) {
+ $x = 0;
+ $y += $h / $factor;
+ }
+
+ }
+
+ $self->{app}->sync;
+
+}
+1;