#include #include #include #include #include "gmencoder.h" void QuitarEspacios (char *in) { char out[1024]; int i; int j = 0; for (i = 0; in[i]; i ++) { if (in[i-1] != ' ' || in[i] != ' ') { out[j] = in[i]; j ++; } } out[j] = 0; strcpy (in, out); } char *SacaOpcionesVideo (char *OpcionesVideo) { char Cropping[512]; char PostProcesado[512]; char Redimensionado[512]; char AlgoritmoRedimensionado[512]; int i; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkCropping)) || strlen (gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbValoresCropping)))) { sprintf (Cropping, "crop=%s", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbValoresCropping))); } else { sprintf (Cropping, ""); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkPostProcesar))) { sprintf (PostProcesado, "pp=%s", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entValoresPostProcesar))); } else { sprintf (PostProcesado, ""); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkRedimensionar))) { AlgoritmoRedimensionado[0] = 0; for (i = 0; opts_sws[i].Text[0]; i ++) { if (!strcmp (opts_sws[i].Text, gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbAlgoritmoRedimensionar)))) { sprintf (AlgoritmoRedimensionado, " %s", opts_sws[i].Value); break; } } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbtMantenerTamanio))) { sprintf (Redimensionado, "scale=%d:%d", /* -3*/ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spX)), gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spY))); } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbtMantenerAspecto))) { sprintf (Redimensionado, "scale=%d:%d", /* -2 */ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spX)), gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spY))); } else { sprintf (Redimensionado, "scale=%d:%d", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spX)), gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spY))); } } else { sprintf (Redimensionado, ""); } sprintf (OpcionesVideo, "-vop "); if (Redimensionado[0]) { strcat (OpcionesVideo, Redimensionado); } if (Cropping[0]) { if (strcmp (OpcionesVideo, "-vop ")) { strcat (OpcionesVideo, ","); } strcat (OpcionesVideo, Cropping); } if (PostProcesado[0]) { if (strcmp (OpcionesVideo, "-vop ")) { strcat (OpcionesVideo, ","); } strcat (OpcionesVideo, PostProcesado); } if (!strcmp (OpcionesVideo, "-vop ")) { sprintf (OpcionesVideo, " "); } else { if (Redimensionado[0]) { strcat (OpcionesVideo, AlgoritmoRedimensionado); } } return OpcionesVideo; } char *SacaOpcionesTiempos (char *OpcionesTiempos) { OpcionesTiempos[0] = ' '; OpcionesTiempos[1] = 0; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkTiemposDe)) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkTiemposA))) { sprintf (OpcionesTiempos, "-ss %d -endpos %d", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(strPrincipal.spTiemposDe)), gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(strPrincipal.spTiemposA))); } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkTiemposDe))) { sprintf (OpcionesTiempos, "-ss %d", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(strPrincipal.spTiemposDe))); } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkTiemposA))) { sprintf (OpcionesTiempos, "-endpos %d", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(strPrincipal.spTiemposA))); } return OpcionesTiempos; } void GeneraOrdenes (char *Origen, char *CodecVideo, char *CodecAudio, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, char *OptsAudio, char *Salida, char *FormatoSalida, DATOS_RIPPEO *datos_rippeo) { int Orden = 0; char SubtitulosV[512]; char SubtitulosF[512]; char FPS[512]; char Aspecto[512]; char OpcionesVideo[512]; char OpcionesTiempos[512]; char FormatoSalida2[512]; int i; int Titulo; char OrigenLocal[1024]; strcpy (OrigenLocal, Origen); sprintf (SubtitulosV, " "); sprintf (SubtitulosF, " "); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbtUsarDVD)) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkSubtitulos)) && strlen (gtk_entry_get_text (GTK_ENTRY(strPrincipal.entFileFicheroSalidaSubtitulos)))) { Titulo = TituloAct() - 1; for (i = 0; i < 100; i ++) { if (!strcmp (medio_dvd.TextoSubtitulos[Titulo][i], (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbIdiomaSubtitulos)))) { break; } } if (i != 100) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkFicheroSalidaSubtitulos))) { sprintf (SubtitulosF, "-vobsubout \"%s\" -vobsuboutindex 0 -sid %d", gtk_entry_get_text (GTK_ENTRY(strPrincipal.entFileFicheroSalidaSubtitulos)), medio_dvd.IdSubtitulos[Titulo][i]); } else { sprintf (SubtitulosV, "-sid %d", medio_dvd.IdSubtitulos[Titulo][i]); } } } sprintf (FPS, " "); if (DameFPS() && GTK_WIDGET_SENSITIVE(strPrincipal.spOutFrames)) { sprintf (FPS, "-ofps %f", DameFPS()); } sprintf (Aspecto, " "); if (DameAspecto()) { sprintf (Aspecto, "-aspect %f", DameAspecto()); } SacaOpcionesVideo (OpcionesVideo); SacaOpcionesTiempos (OpcionesTiempos); strcpy (FormatoSalida2, " "); if (strlen (FormatoSalida)) { sprintf (FormatoSalida2, "-of %s", FormatoSalida); } /* Copiar a disco */ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkCopiarADisco))) { sprintf (datos_rippeo->Orden[Orden], "mencoder %s -o \"%s\" %s %s %s %s -ovc copy %s %s -oac copy", OrigenLocal, gtk_entry_get_text (GTK_ENTRY(strPrincipal.entFileFicheroCopiarDisco)), FormatoSalida2, OpcionesTiempos, SubtitulosF, SubtitulosV, FPS, Aspecto); QuitarEspacios (datos_rippeo->Orden[Orden]); sprintf (OrigenLocal, "\"%s\"", gtk_entry_get_text (GTK_ENTRY(strPrincipal.entFileFicheroCopiarDisco))); strcpy (datos_rippeo->FicheroCopiarDisco, gtk_entry_get_text (GTK_ENTRY(strPrincipal.entFileFicheroCopiarDisco))); datos_rippeo->TipoOrden[Orden] = ORDEN; strcpy (datos_rippeo->Descripcion[Orden], _("Copying source to disk. After this the copy will be ripped.")); sprintf (SubtitulosF, " "); sprintf (SubtitulosV, " "); sprintf (OpcionesTiempos, " "); Orden ++; } /* Todo en un solo paso */ if (datos_rippeo->Pasadas == 1) { sprintf (datos_rippeo->Orden[Orden], "mencoder %s %s %s %s %s %s %s %s %s %s %s %s", OrigenLocal, Salida, OpcionesVideo, OpcionesTiempos, SubtitulosV, SubtitulosF, CodecVideo, OptsVideo, FPS, Aspecto, CodecAudio, OptsAudio); QuitarEspacios (datos_rippeo->Orden[Orden]); datos_rippeo->TipoOrden[Orden] = ORDEN_VIDEO; strcpy (datos_rippeo->Descripcion[Orden], _("Ripping audio and video in one pass.")); Orden ++; } else /* Primero hay que rippear el audio */ { if (!datos_rippeo->SaltarPasada1) { sprintf (datos_rippeo->Orden[Orden], "mencoder %s -o frameno.avi %s %s -ovc frameno %s %s", OrigenLocal, OpcionesTiempos, SubtitulosF, CodecAudio, OptsAudio); QuitarEspacios (datos_rippeo->Orden[Orden]); strcpy (datos_rippeo->Descripcion[Orden], _("Ripping audio and calculating Bitrate.")); datos_rippeo->TipoOrden[Orden] = ORDEN_FRAMENO; Orden ++; } } if (datos_rippeo->Pasadas == 2) { sprintf (datos_rippeo->Orden[Orden], "mencoder %s %s %s %s %s %s %s %s %s %s -oac copy", OrigenLocal, OpcionesVideo, OpcionesTiempos, Salida, FormatoSalida2, SubtitulosV, CodecVideo, OptsVideo, FPS, Aspecto); QuitarEspacios (datos_rippeo->Orden[Orden]); datos_rippeo->TipoOrden[Orden] = ORDEN_VIDEO; strcpy (datos_rippeo->Descripcion[Orden], _("Ripping video and copying the already ripped audio.")); Orden ++; } if (datos_rippeo->Pasadas == 3) { if (!datos_rippeo->SaltarPasada2) { sprintf (datos_rippeo->Orden[Orden], "mencoder %s %s %s %s %s %s %s %s -passlogfile %s %s %s -oac copy", OrigenLocal, OpcionesVideo, OpcionesTiempos, Salida, FormatoSalida2, SubtitulosV, CodecVideo, OptsVideo1, datos_rippeo->FicheroPasada2, FPS, Aspecto); QuitarEspacios (datos_rippeo->Orden[Orden]); datos_rippeo->TipoOrden[Orden] = ORDEN_VIDEO; strcpy (datos_rippeo->Descripcion[Orden], _("Getting data for using variable bitrate.")); Orden ++; } sprintf (datos_rippeo->Orden[Orden], "mencoder %s %s %s %s %s %s %s %s -passlogfile %s %s %s -oac copy", OrigenLocal, OpcionesVideo, OpcionesTiempos, Salida, FormatoSalida2, SubtitulosV, CodecVideo, OptsVideo2, datos_rippeo->FicheroPasada2, FPS, Aspecto); QuitarEspacios (datos_rippeo->Orden[Orden]); datos_rippeo->TipoOrden[Orden] = ORDEN_VIDEO; strcpy (datos_rippeo->Descripcion[Orden], _("Ripping the video with variable bitrate an copying the already ripped audio.")); Orden ++; } if (datos_rippeo->FicheroCopiarDisco[0]) { sprintf (datos_rippeo->Nombre, "%s -> %s -> %s", datos_rippeo->Origen, datos_rippeo->FicheroCopiarDisco, datos_rippeo->FicheroSalida); } else { sprintf (datos_rippeo->Nombre, "%s -> %s", datos_rippeo->Origen, datos_rippeo->FicheroSalida); } #ifdef DEBUG fprintf (stderr, "Name: [%s]\n", datos_rippeo->Nombre); #endif }