#include #include #include #include #include #include "gmencoder.h" void EjecutaMplayer (char *param) { char Origen[256]; char Orden[256]; char Tmp[256]; char linea[512]; int Titulo; float Aspecto; FILE *pipe; int pid; int mask; int fd; struct timeval time_out; int ret; if (GeneraOrigen (Origen, &Titulo, &Aspecto)) { return; } if (param) { sprintf (Orden, "mplayer -noquiet %s %s", Origen, param); } else { sprintf (Orden, "mplayer -noquiet %s", Origen); } #ifdef DEBUG fprintf (stderr, _("Executing [%s].\n"), Orden); #endif if (NULL == (pipe = mypopen (CfgGen.Path_mp, Orden, "r", &pid, "/"))) { MsgError ("Error executing: [%s]", Orden); } else { fd = fileno(pipe); mask = (((int)1) << fd); fprintf (stderr, _("pid: %d\n"), pid); sprintf (Tmp, _("Executing mplayer. (Exit from mplayer to return to the gmencoder)")); gtk_widget_show (strOperacion.winOperacionEnCurso); gtk_label_set_text (GTK_LABEL(strOperacion.lblOperacionEnCurso), Tmp); while (!feof (pipe)) { while (gtk_events_pending()) { gtk_main_iteration (); } time_out.tv_sec = 2; time_out.tv_usec = 500000; ret = select (fd + 1, (fd_set *)&mask, NULL, NULL, &time_out); if (ret == 0) { #ifdef DEBUG fprintf (stderr, _("\nExiting because timeout... [%d]\n"), pid); #endif kill (pid, SIGTERM); break; } else if (ret == -1) { #ifdef DEBUG fprintf (stderr, _("\nExiting because error... [%d]\n"), pid); #endif kill (pid, SIGTERM); break; } else { LeeLinea (linea, 512, pipe); } } while (gtk_events_pending()) { gtk_main_iteration (); } mypclose (pipe); } gtk_widget_hide (strOperacion.winOperacionEnCurso); return; }