package App::VideoMixer::External::FFmpeg;
use strict;
use vars qw($VERSION);
$VERSION = '0.02';
use parent 'Class::Accessor';
__PACKAGE__->mk_accessors(qw(width height depth pid stream texture_id
+file pixel_format ffmpeg));
sub spawn {
my ($self,$cmd) = @_;
my $pid = open my $stream, $cmd
or die "Couldn't spawn '$cmd': $!/$?";
binmode $stream;
return ($pid,$stream)
};
sub DESTROY {
if (my $pid = $_[0]->pid) {
kill 9, $pid
};
};
This will kill the external process once the object gets destroyed. You can read the data from $stream and you have to set $self->pid to the returned $pid (and looking at this code, I'm not sure why ->spawn does it that way instead of setting $pid instead - I guess it's because I turned a subroutine into an object later).
As a side note, App::VideoMixer v0.02 is in a sad state, as even the distribution is incomplete, so I'll have to release a fixed version soonish. |