X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_ffmpeg%2Fmptr_ffmpeg.cpp;h=d1eb7aa20e1fc109ef120d5c9f92465b563162b4;hb=334e15ce6c4d9b1f30a168a55e7ef4d31320d568;hp=4266184d515e9864bc89de6d0de47f5066b45a1c;hpb=cc54c38609ee9745ad678e5e9b9d7d2912be9c95;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 4266184..d1eb7aa 100644 --- a/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp +++ b/synfig-core/trunk/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp @@ -2,8 +2,11 @@ /*! \file mptr_ffmpeg.cpp ** \brief ppm Target Module ** +** $Id$ +** ** \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 @@ -32,6 +35,20 @@ #include #include "mptr_ffmpeg.h" #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 #include @@ -44,6 +61,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); @@ -61,14 +84,65 @@ 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 } - string command; +#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)) { + cerr<<"Unable to open pipe to ffmpeg"<