X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftags%2Fstable%2Fsrc%2Fmodules%2Fmod_ffmpeg%2Fmptr_ffmpeg.cpp;h=d1eb7aa20e1fc109ef120d5c9f92465b563162b4;hb=47fce282611fbba1044921d22ca887f9b53ad91a;hp=430f95b3f8119702f3556b669eb04cac14cfd2a3;hpb=46036a57bc1ab5583c5d5c2188e8c52d7682d9d5;p=synfig.git diff --git a/synfig-core/tags/stable/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp b/synfig-core/tags/stable/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp index 430f95b..d1eb7aa 100644 --- a/synfig-core/tags/stable/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp +++ b/synfig-core/tags/stable/src/modules/mod_ffmpeg/mptr_ffmpeg.cpp @@ -1,18 +1,23 @@ -/*! ======================================================================== -** Sinfg -** ppm Target Module -** $Id: mptr_ffmpeg.cpp,v 1.1.1.1 2005/01/04 01:23:10 darco Exp $ +/* === S Y N F I G ========================================================= */ +/*! \file mptr_ffmpeg.cpp +** \brief ppm Target Module ** -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** $Id$ ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** \endlegal ** ** === N O T E S =========================================================== ** @@ -30,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 @@ -38,17 +57,23 @@ /* === M A C R O S ========================================================= */ -using namespace sinfg; +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 ======================================================= */ -SINFG_IMPORTER_INIT(ffmpeg_mptr); -SINFG_IMPORTER_SET_NAME(ffmpeg_mptr,"ffmpeg"); -SINFG_IMPORTER_SET_EXT(ffmpeg_mptr,"avi"); -SINFG_IMPORTER_SET_VERSION(ffmpeg_mptr,"0.1"); -SINFG_IMPORTER_SET_CVS_ID(ffmpeg_mptr,"$Id: mptr_ffmpeg.cpp,v 1.1.1.1 2005/01/04 01:23:10 darco Exp $"); +SYNFIG_IMPORTER_INIT(ffmpeg_mptr); +SYNFIG_IMPORTER_SET_NAME(ffmpeg_mptr,"ffmpeg"); +SYNFIG_IMPORTER_SET_EXT(ffmpeg_mptr,"avi"); +SYNFIG_IMPORTER_SET_VERSION(ffmpeg_mptr,"0.1"); +SYNFIG_IMPORTER_SET_CVS_ID(ffmpeg_mptr,"$Id$"); /* === M E T H O D S ======================================================= */ @@ -59,15 +84,66 @@ ffmpeg_mptr::seek_to(int frame) { if(file) { - pclose(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 ppmpipe -\n",filename.c_str()); - - file=popen(command.c_str(),"r"); - + + 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"<