The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

use strict;
use warnings;

use FindBin '$Bin';

use Test::More tests => 8;

use Video::Xine;
use Video::Xine::OSD qw/:cap_constants/;

TEST: {
    my $xine = Video::Xine->new();
    my $audio_port = Video::Xine::Driver::Audio->new( $xine, 'none' );

    my $driver = make_vo($xine);

    my $stream = $xine->stream_new( $audio_port, $driver );

    my $osd = Video::Xine::OSD->new(
        stream => $stream,
        x      => 0,
        y      => 0,
        width  => 500,
        height => 100
    );

    ok(1);

    my $caps = $osd->get_capabilities();
    ( $caps & XINE_OSD_CAP_FREETYPE2 ) and diag("Has freetype2");
    ( $caps & XINE_OSD_CAP_FREETYPE2 ) and diag("Can do unscaled OSD");

    ok(1);

    $stream->open("$Bin/time_015.avi")
      or die "Couldn't open '$Bin/time_015.avi'";

    $stream->play();

    # Skip rest of tests if we can't set the font
  SKIP: {
        $osd->set_font( 'serif', 66 )
          or skip( "Unable to set font", 6 );
        ok( 1, "Set font" );
        $osd->draw_text(
            x          => 5,
            y          => 10,
            text       => "Hello there!",
            color_base => 0
        );
        ok( 1, "draw text" );
        sleep(1);
        $osd->show(0);
        ok( 1, "show" );
        sleep(2);
        $osd->hide(0);
        ok( 1, "hide" );
        sleep(2);

        $osd->clear();
        ok( 1, "clear" );
        $osd->draw_text(
            x          => 0,
            y          => 0,
            text       => q{How's it going?},
            color_base => 0
        );
        ok( 1, "draw_text 2" );
        $osd->show();
    }
}

sub make_vo {
    my ($xine) = @_;

    my $driver = make_x11_vo($xine)
      or return Video::Xine::Driver::Video->new( $xine, 'none' );

}

sub make_x11_vo {
    my ($xine) = @_;

    eval 'use X11::FullScreen;';
    if ($@) {
        warn "Couldn't load X11::FullScreen: $@";
        return;
    }

    defined( $ENV{'VIDEO_XINE_SHOW'} ) && $ENV{'VIDEO_XINE_SHOW'}
      or return;

    my $display_str = defined $ENV{'DISPLAY'} ? $ENV{'DISPLAY'} : ':0.0';

    my $display = X11::FullScreen::Display->new($display_str)
      or do {
        warn( "X11::FullScreen::Display does not initialize", 1 );
        return;
      };


    my $window = $display->createWindow();
    $display->sync();
    my $x11_visual =
      Video::Xine::Util::make_x11_visual( $display,
        $display->getDefaultScreen(),
        $window, $display->getWidth(), $display->getHeight(),
        $display->getPixelAspect() );

    my $driver =
      Video::Xine::Driver::Video->new( $xine, "auto", 1, $x11_visual,
        [ $window, $display ] )
      or do {
        warn "Unable to load video driver";
        return;
      };

    return $driver;
}