6 use IPC::Open3 qw(open3);
8 use Data::Dump qw(dump);
11 my $movie = shift @ARGV
12 || 'media/lpc-2009-network-namespaces/Pavel Emelyanov.ogg';
13 # || die "usage: $0 path/to/movie.ogv\n";
20 my $pid = open3( $to_mplayer, $from_mplayer, $from_mplayer,
26 my $epfd = epoll_create(10);
28 epoll_ctl($epfd, EPOLL_CTL_ADD, fileno STDIN , EPOLLIN ) >= 0 || die $!;
29 epoll_ctl($epfd, EPOLL_CTL_ADD, fileno $from_mplayer , EPOLLIN ) >= 0 || die $!;
30 epoll_ctl($epfd, EPOLL_CTL_ADD, fileno $to_mplayer , EPOLLOUT ) >= 0 || die $!;
32 warn "$movie ", -s $movie, " bytes $edl\n";
33 print $to_mplayer qq|loadfile "$movie"\n|;
44 print $to_mplayer $cmd;
48 while ( my $events = epoll_wait($epfd, 10, 1000) ) { # Max 10 events returned, 1s timeout
50 warn "no events" unless $events;
52 foreach my $e ( @$events ) {
53 # warn "# event: ", dump($e), $/;
57 if ( $fileno == fileno STDIN ) {
61 } elsif ( $fileno == fileno $from_mplayer ) {
63 read $from_mplayer, $chr, 1;
66 if ( $chr =~ m{[\n\r]} ) {
68 exit if $line =~ m{Exiting};
70 if ( $line =~ m{No bind found for key '(.)'} ) {
73 } elsif ( $line =~ m{EDL}i ) {
74 print $to_mplayer qq|osd_show_text "$line"\n|;
83 } elsif ( $fileno == fileno $to_mplayer ) {
86 die "invalid fileno $fileno";