**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include "mptr_ffmpeg.h"
#include <stdio.h>
#include <sys/types.h>
-#include <sys/wait.h>
+#if HAVE_SYS_WAIT_H
+ #include <sys/wait.h>
+#endif
+#if HAVE_IO_H
+ #include <io.h>
+#endif
+#if HAVE_PROCESS_H
+ #include <process.h>
+#endif
+#if HAVE_FCNTL_H
+ #include <fcntl.h>
+#endif
#include <unistd.h>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace etl;
+#if defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID)
+ #define UNIX_PIPE_TO_PROCESSES
+#else
+ #define WIN32_PIPE_TO_PROCESSES
+#endif
+
/* === G L O B A L S ======================================================= */
SYNFIG_IMPORTER_INIT(ffmpeg_mptr);
{
if(file)
{
+#if defined(WIN32_PIPE_TO_PROCESSES)
+ pclose(file);
+#elif defined(UNIX_PIPE_TO_PROCESSES)
fclose(file);
int status;
waitpid(pid,&status,0);
+#endif
}
+#if defined(WIN32_PIPE_TO_PROCESSES)
+
+ string command;
+
+ command=strprintf("ffmpeg -i \"%s\" -an -f image2pipe -vcodec ppm -\n",filename.c_str());
+
+ file=popen(command.c_str(),POPEN_BINARY_READ_TYPE);
+
+#elif defined(UNIX_PIPE_TO_PROCESSES)
+
int p[2];
if (pipe(p)) {
// Parent process
// Close pipeout, not needed
close(p[1]);
- // Save pipeout to file handle, will write to it later
- file = fdopen(p[0], "wb");
+ // Save pipein to file handle, will read from it later
+ file = fdopen(p[0], "rb");
}
+#else
+ #error There are no known APIs for creating child processes
+#endif
+
if(!file)
{
cerr<<"Unable to open pipe to ffmpeg"<<endl;
{
if(file)
{
+#if defined(WIN32_PIPE_TO_PROCESSES)
+ pclose(file);
+#elif defined(UNIX_PIPE_TO_PROCESSES)
fclose(file);
int status;
waitpid(pid,&status,0);
+#endif
}
#ifdef HAVE_TERMIOS_H
tcsetattr(0,TCSANOW,&oldtty);
{
if(!seek_to(i))
return false;
- if(!grab_frame());
+ if(!grab_frame())
return false;
}