#include #include #include #include #include #include "gmencoder.h" int CalculaBitrateV () { int TamanioCD = 0; int Tiempo = 0; int BitrateV; int BitrateA; char tmp[400]; /* Calculo el Bitrate para el video */ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkTamanioFijo))) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt650))) { TamanioCD = 650; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt700))) { TamanioCD = 700; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt800))) { TamanioCD = 800; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt2CD))) { TamanioCD *= 2; } /* Lo tengo que pasar a kilobits */ } else { TamanioCD = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(strPrincipal.spTamanioFijo)); } TamanioCD *= (1024*8); Tiempo = DameTiempo (); if (Tiempo) { BitrateA = CalculaBitrateA (); BitrateV = (TamanioCD / Tiempo) - BitrateA; #ifdef DEBUG fprintf (stderr, _("Output size [%d]. Tiempo [%d]. BitrateV [%d]. BitrateA [%d]\n"), TamanioCD, Tiempo, BitrateV, BitrateA); #endif return BitrateV; } return -1; } int GeneraOptsVideoLav (char *CodecVideo, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, float Aspecto, DATOS_RIPPEO *datos_rippeo) { char codeclavc[256]; char tmp[512]; char tmp2[512]; int i; int retorno = 0; int Retorno = 0; struct stat strStat; sprintf (CodecVideo, "-ovc lavc"); /* SubCodec del lav */ strcpy (codeclavc, gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecLav))); for (i = 0 ; i < strlen (codeclavc); i++) { if (codeclavc[i] == ' ') { codeclavc[i] = 0; break; } } /* Opciones de Lavc para */ if (Aspecto) { sprintf (OptsVideo, "-lavcopts vcodec=%s:aspect=%.2f", codeclavc, Aspecto); } else { sprintf (OptsVideo, "-lavcopts vcodec=%s", codeclavc); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkCalidadAltaLav))) { strcat (OptsVideo, ":vhq"); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkBitrateAutoLav))) { sprintf (tmp, ":vbitrate=%%d"); strcat (OptsVideo, tmp); datos_rippeo->BitrateAuto = 1; } else { sprintf (tmp, ":vbitrate=%d", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spBitrateLav))); strcat (OptsVideo, tmp); datos_rippeo->BitrateAuto = 0; } sprintf (OptsVideo1, "%s:vpass=1", OptsVideo); sprintf (OptsVideo2, "%s:vpass=2", OptsVideo); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt1PasadaLav))) { retorno = 1; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt2PasadasLav))) { retorno = 2; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt3PasadasLav))) { retorno = 3; } fprintf (stderr, "Pasadas: [%d]\n", retorno); return retorno; } int GeneraOptsVideoDivx4 (char *CodecVideo, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, float Aspecto, DATOS_RIPPEO *datos_rippeo) { char tmp[512]; char tmp2[512]; int i; int retorno = 0; int Retorno = 0; struct stat strStat; sprintf (CodecVideo, "-ovc divx4"); sprintf (OptsVideo, "-divx4opts q=%d", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spCalidadDivx4))); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkBitrateAutoDivx4))) { sprintf (tmp, ":br=%%d"); strcat (OptsVideo, tmp); datos_rippeo->BitrateAuto = 1; } else { sprintf (tmp, ":br=%d", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(strPrincipal.spBitrateDivx4))); strcat (OptsVideo, tmp); datos_rippeo->BitrateAuto = 0; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkXvidVBRDivx4))) { sprintf (OptsVideo1, "%s:vbrpass=1", OptsVideo); sprintf (OptsVideo2, "%s:vbrpass=2", OptsVideo); } else { sprintf (OptsVideo1, "%s:pass=1", OptsVideo); sprintf (OptsVideo2, "%s:pass=2", OptsVideo); } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt1PasadaDivx4))) { retorno = 1; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt2PasadaDivx4))) { retorno = 2; } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.rbt3PasadaDivx4))) { retorno = 3; } fprintf (stderr, "Pasadas: [%d]\n", retorno); return retorno; } int GeneraOptsVideoRawRgb (char *CodecVideo, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, float Aspecto, DATOS_RIPPEO *datos_rippeo) { char codeclavc[256]; char tmp[512]; char tmp2[512]; int i; int retorno = 0; int Retorno = 0; struct stat strStat; sprintf (CodecVideo, "-ovc rawrgb"); sprintf (OptsVideo, " "); sprintf (OptsVideo1, " "); sprintf (OptsVideo2, " "); return 1; } int GeneraOptsVideoCopy (char *CodecVideo, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, float Aspecto, DATOS_RIPPEO *datos_rippeo) { char codeclavc[256]; char tmp[512]; char tmp2[512]; int i; int retorno = 0; int Retorno = 0; struct stat strStat; sprintf (CodecVideo, "-ovc copy"); sprintf (OptsVideo, " "); sprintf (OptsVideo1, " "); sprintf (OptsVideo2, " "); return 1; } int GeneraOptsVideo (char *CodecVideo, char *OptsVideo, char *OptsVideo1, char *OptsVideo2, float Aspecto, DATOS_RIPPEO *datos_rippeo) { if (!strcmp ("lavcodec", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { return GeneraOptsVideoLav (CodecVideo, OptsVideo, OptsVideo1, OptsVideo2, Aspecto, datos_rippeo); } else if (!strcmp ("rawrgb", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { return GeneraOptsVideoRawRgb (CodecVideo, OptsVideo, OptsVideo1, OptsVideo2, Aspecto, datos_rippeo); } else if (!strcmp ("copy", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { return GeneraOptsVideoCopy (CodecVideo, OptsVideo, OptsVideo1, OptsVideo2, Aspecto, datos_rippeo); } else if (!strcmp ("divx4linux/divx5linux", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { return GeneraOptsVideoDivx4 (CodecVideo, OptsVideo, OptsVideo1, OptsVideo2, Aspecto, datos_rippeo); } return 0; } void FicheroPasada2 (char *Fichero, DATOS_RIPPEO *datos_rippeo) { if (!strcmp ("lavcodec", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { sprintf (Fichero, "%slavc.stats", datos_rippeo->Path); } else if (!strcmp ("divx4linux/divx5linux", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(strPrincipal.chkXvidVBRDivx4))) { sprintf (Fichero, "%sxvid.stats", datos_rippeo->Path); } else { sprintf (Fichero, "%sdivx4.stats", datos_rippeo->Path); } } else { sprintf (Fichero, "", datos_rippeo->Path); } } void FicheroBr (char *Fichero, DATOS_RIPPEO *datos_rippeo) { if (!strcmp ("lavcodec", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { sprintf (Fichero, "%sframeno.br", datos_rippeo->Path); } else if (!strcmp ("divx4linux/divx5linux", (char *) gtk_entry_get_text (GTK_ENTRY(strPrincipal.entCmbCodecVideo)))) { sprintf (Fichero, "%sframeno.br", datos_rippeo->Path); } else { sprintf (Fichero, "", datos_rippeo->Path); } }