X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_ffmpeg%2Fmptr_ffmpeg.cpp;h=e74f772f7593bd0e1811f658d64ee2b21c87b920;hb=d04c74c8f5a45493895afdaba9b39772401fbf39;hp=f1f7e0be458598b6fc9856b769a34f487ec6059d;hpb=792ed706efeef84c5b82abf982078daad15f5d6c;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp b/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp index f1f7e0b..e74f772 100644 --- a/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp +++ b/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp @@ -35,7 +35,18 @@ #include "mptr_ffmpeg.h" #include #include -#include +#if HAVE_SYS_WAIT_H + #include +#endif +#if HAVE_IO_H + #include +#endif +#if HAVE_PROCESS_H + #include +#endif +#if HAVE_FCNTL_H + #include +#endif #include #include #include @@ -49,6 +60,12 @@ using namespace synfig; 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); @@ -66,11 +83,25 @@ ffmpeg_mptr::seek_to(int frame) { 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)) { @@ -108,6 +139,10 @@ ffmpeg_mptr::seek_to(int frame) 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"<