X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_dv%2Ftrgt_dv.cpp;fp=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_dv%2Ftrgt_dv.cpp;h=f215f64d2169de2a3ef42e2f68725b34231c5510;hb=d04c74c8f5a45493895afdaba9b39772401fbf39;hp=d4b7440cf56767f2df614891f11b53469fca677a;hpb=415526d5dabad4301dc8f38c77536cdb5d3a2df8;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp b/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp index d4b7440..f215f64 100644 --- a/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp +++ b/synfig-core/trunk/src/modules/mod_dv/trgt_dv.cpp @@ -64,7 +64,7 @@ using namespace etl; #if defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID) #define UNIX_PIPE_TO_PROCESSES -#elif defined(HAVE__SPAWNLP) && defined(HAVE__PIPE) && defined(HAVE_CWAIT) +#else #define WIN32_PIPE_TO_PROCESSES #endif @@ -94,11 +94,11 @@ dv_trgt::dv_trgt(const char *Filename) dv_trgt::~dv_trgt() { if(file){ - fclose(file); - int status; #if defined(WIN32_PIPE_TO_PROCESSES) - cwait(&status,pid,0); + pclose(file); #elif defined(UNIX_PIPE_TO_PROCESSES) + fclose(file); + int status; waitpid(pid,&status,0); #endif } @@ -150,61 +150,21 @@ dv_trgt::init() #if defined(WIN32_PIPE_TO_PROCESSES) - int p[2]; - int stdin_fileno, stdout_fileno; - - if(_pipe(p, 512, O_BINARY | O_NOINHERIT) < 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - - // Save stdin/stdout so we can restore them later - stdin_fileno = _dup(_fileno(stdin)); - stdout_fileno = _dup(_fileno(stdout)); - - // encodedv should read from the pipe - if(_dup2(p[0], _fileno(stdin)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - - FILE* outfile = fopen(filename.c_str(),"wb"); - if( outfile == NULL ){ - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - if(_dup2(_fileno(outfile), _fileno(stdout)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - + string command; + if(wide_aspect) - pid = _spawnlp(_P_NOWAIT, "encodedv", "encodedv", "-w", "1", "-", (const char *)NULL); + command=strprintf("encodedv -w 1 - > \"%s\"\n",filename.c_str()); else - pid = _spawnlp(_P_NOWAIT, "encodedv", "encodedv", "-", (const char *)NULL); + command=strprintf("encodedv - > \"%s\"\n",filename.c_str()); - if( pid < 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } + // Open the pipe to encodedv + file=popen(command.c_str(),POPEN_BINARY_WRITE_TYPE); - // Restore stdin/stdout - if(_dup2(stdin_fileno, _fileno(stdin)) != 0) { - synfig::error(_("Unable to open pipe to encodedv")); - return false; - } - if(_dup2(stdout_fileno, _fileno(stdout)) != 0) { + if(!file) + { synfig::error(_("Unable to open pipe to encodedv")); return false; } - close(stdin_fileno); - close(stdout_fileno); - - // Close the pipe read end - encodedv uses it - close(p[0]); - - // We write data to the write end of the pipe - file = fdopen(p[1], "wb"); #elif defined(UNIX_PIPE_TO_PROCESSES)