#include #include #include "gmencoder.h" int AnalizaDVD () { char linea[512]; char Tmp[512]; char dato[32]; char dato1[32]; char dato2[32]; FILE *pipe; int i; int j; int k; char comando[512]; int cuantos; int pid; char nombre[512]; nombre[0] = 0; sprintf (Tmp, _("Working. Wait...")); gtk_label_set_text (GTK_LABEL(strOperacion.lblOperacionEnCurso), Tmp); gtk_widget_show (strOperacion.winOperacionEnCurso); while (gtk_events_pending()) { gtk_main_iteration (); } /* Busco el número de títulos en el DVD */ if (NULL == (pipe = mypopen (CfgGen.Path_mp, ANALIZAR_DVD, "r", &pid, "/"))) { MsgError ("Error executing: [%s]", ANALIZAR_DVD); } else { memset (&medio_dvd, 0, sizeof(DATOS_DVD)); /* Limpio la combo de titulos y al hacerlo todas las demás */ strPrincipal.cmbTitulosDVD_items = g_list_append (strPrincipal.cmbTitulosDVD_items, (gpointer) ""); gtk_combo_set_popdown_strings (GTK_COMBO (strPrincipal.cmbTitulosDVD), strPrincipal.cmbTitulosDVD_items); g_list_free(strPrincipal.cmbTitulosDVD_items); strPrincipal.cmbTitulosDVD_items = NULL; while (!feof (pipe)) { LeeLinea (linea, 512, pipe); /* Primero localizo los titulos que hay */ if (NULL != AnalizaLinea (linea, dato, LINEA_TITULOS, INI_TITULOS, FIN_TITULOS, SALTA_TITULOS)) { medio_dvd.Titulos = atoi (dato); #ifdef DEBUG fprintf (stderr, _("Number of Titles [%d] in line: %s\n"), medio_dvd.Titulos, linea); #endif } while (gtk_events_pending()) { gtk_main_iteration (); } } mypclose (pipe); } if (medio_dvd.Titulos) { /* Había linea de títulos a analizar cada uno de ellos */ for (i = 0; i < medio_dvd.Titulos; i ++) { #ifdef DEBUG fprintf (stderr, _("-----------\n")); fprintf (stderr, _("Title [%d]\n"), i+1); fprintf (stderr, _("-----------\n")); #endif sprintf (Tmp, _("Analyzing Title %d of %d..."), i+1, medio_dvd.Titulos); gtk_label_set_text (GTK_LABEL(strOperacion.lblOperacionEnCurso), Tmp); sprintf (comando, ANALIZAR_TITULO_DVD, i+1); if (NULL == (pipe = mypopen (CfgGen.Path_mp, comando, "r", &pid, "/"))) { MsgError ("Error Executing: [%s]", comando); } else { while (!feof (pipe)) { LeeLinea (linea, 512, pipe); while (gtk_events_pending()) { gtk_main_iteration (); } /* Cuantos capitulos */ if (NULL != AnalizaLinea (linea, dato, LINEA_CAPITULOS, INI_CAPITULOS, FIN_CAPITULOS, SALTA_CAPITULOS)) { medio_dvd.Capitulos[i] = atoi (dato); #ifdef DEBUG fprintf (stderr, _("Chapter in the title [%d] in line: %s\n"), medio_dvd.Capitulos[i], linea); #endif } /* Relacion de aspecto */ else if (NULL != AnalizaLinea (linea, dato, LINEA_ASPECTO, INI_ASPECTO, FIN_ASPECTO, SALTA_ASPECTO)) { if (dato[0] == '1' && dato[2] == '7') { strcpy (medio_dvd.Aspecto[i], "16:9"); medio_dvd.AspectoNum[i] = 1.777777; } else if (dato[0] == '1' && dato[2] == '3') { strcpy (medio_dvd.Aspecto[i], "4:3"); medio_dvd.AspectoNum[i] = 1.333333; } else { #ifdef DEBUG fprintf (stderr, _("Aspect Ratio [%s] not valid in line: %s\n"), dato, linea); #endif } #ifdef DEBUG fprintf (stderr, _("We have an aspect ratio of [%s] in line: %s\n"), medio_dvd.Aspecto[i], linea); #endif } /* Tiempo original */ else if (NULL != AnalizaLinea (linea, dato, LINEA_TAMANIO, INI_TAMANIO, FIN_TAMANIO, SALTA_TAMANIO)) { medio_dvd.TiempoOrg[i] = atoi (dato); #ifdef DEBUG fprintf (stderr, _("We have a time in the source of [%d] in line: %s\n"), medio_dvd.TiempoOrg[i], linea); #endif } /* Bitrate original del Video */ else if (NULL != AnalizaLinea (linea, dato, LINEA_BITRATE_V, INI_BITRATE_V, FIN_BITRATE_V, SALTA_BITRATE_V)) { medio_dvd.BitrateOrgV[i] = atoi (dato)/1024; #ifdef DEBUG fprintf (stderr, _("We have a video bitrate in the source of [%d] in line: %s\n"), medio_dvd.BitrateOrgV[i], linea); #endif } /* Bitrate original del Audio */ else if (NULL != AnalizaLinea (linea, dato, LINEA_BITRATE_A, INI_BITRATE_A, FIN_BITRATE_A, SALTA_BITRATE_A)) { medio_dvd.BitrateOrgA[i] = atoi (dato)/1024; #ifdef DEBUG fprintf (stderr, _("We have a audio bitrate in the source of [%d] in line: %s\n"), medio_dvd.BitrateOrgA[i], linea); #endif } /* Frames por Segundo originales */ else if (NULL != AnalizaLinea (linea, dato, LINEA_FPS, INI_FPS, FIN_FPS, SALTA_FPS)) { medio_dvd.FPS[i] = atof (dato); #ifdef DEBUG fprintf (stderr, _("We have a [%f] FPS if the source in line: %s\n"), medio_dvd.FPS[i], linea); #endif } /* Ver el ancho X */ else if (NULL != AnalizaLinea (linea, dato, LINEA_X, INI_X, FIN_X, SALTA_X)) { medio_dvd.x[i] = atoi (dato); #ifdef DEBUG fprintf (stderr, _("We have a width (x) of [%d] in line: %s\n"), medio_dvd.x[i], linea); #endif } /* Ver el alto Y */ else if (NULL != AnalizaLinea (linea, dato, LINEA_Y, INI_Y, FIN_Y, SALTA_Y)) { medio_dvd.y[i] = atoi (dato); #ifdef DEBUG fprintf (stderr, _("We have a height (y) of [%d] in line: %s\n"), medio_dvd.y[i], linea); #endif } /* Ver si es de subtitulos */ else if (NULL != AnalizaLinea (linea, dato, LINEA_SUBTITULOS, INI_LAN_SUBTITULOS, FIN_LAN_SUBTITULOS, SALTA_LAN_SUBTITULOS)) { if (NULL != AnalizaLinea (linea, dato1, LINEA_SUBTITULOS, INI_ID_SUBTITULOS, FIN_ID_SUBTITULOS, SALTA_ID_SUBTITULOS)) { sprintf (medio_dvd.TextoSubtitulos[i][medio_dvd.NumSubtitulos[i]], _("%s"), dato); medio_dvd.IdSubtitulos[i][medio_dvd.NumSubtitulos[i]] = atoi (dato1); cuantos = 0; for (j = 0; j < medio_dvd.NumSubtitulos[i]; j ++) { if (!strcmp (medio_dvd.TextoSubtitulos[i][j], medio_dvd.TextoSubtitulos[i][medio_dvd.NumSubtitulos[i]])) { cuantos ++; } } if (cuantos) { sprintf (medio_dvd.TextoSubtitulos[i][medio_dvd.NumSubtitulos[i]], _("%s - %d"), dato, cuantos + 1); } #ifdef DEBUG fprintf (stderr, _("We have a subtitle Id [%d] text [%s] in line: %s\n"), medio_dvd.IdSubtitulos[i][medio_dvd.NumSubtitulos[i]], medio_dvd.TextoSubtitulos[i][medio_dvd.NumSubtitulos[i]], linea); #endif medio_dvd.NumSubtitulos[i] ++; } else { #ifdef DEBUG1 fprintf (stderr, _("%s"), dato); #endif } } /* Ver si es de subtitulos audio */ else if (NULL != AnalizaLinea (linea, dato, LINEA_AUDIO, INI_LAN_AUDIO, FIN_LAN_AUDIO, SALTA_LAN_AUDIO)) { if (NULL != AnalizaLinea (linea, dato1, LINEA_AUDIO, INI_FMT_AUDIO, FIN_FMT_AUDIO, SALTA_FMT_AUDIO)) { if (NULL != AnalizaLinea (linea, dato2, LINEA_AUDIO, INI_ID_AUDIO, FIN_ID_AUDIO, SALTA_ID_AUDIO)) { sprintf (medio_dvd.TextoAudio[i][medio_dvd.NumAudio[i]], _("%s - %s"), dato, dato1); medio_dvd.IdAudio[i][medio_dvd.NumAudio[i]] = atoi (dato2); #ifdef DEBUG fprintf (stderr, _("[%s][%s][%s]\n"), dato, dato1, dato2); fprintf (stderr, _("We have an audio Id [%d] Text [%s] in line: %s\n"), medio_dvd.IdAudio[i][medio_dvd.NumAudio[i]], medio_dvd.TextoAudio[i][medio_dvd.NumAudio[i]], linea); #endif medio_dvd.NumAudio[i] ++; } else { #ifdef DEBUG1 fprintf (stderr, _("%s"), dato); #endif } } else { #ifdef DEBUG1 fprintf (stderr, _("%s"), dato); #endif } } else if (NULL != AnalizaLinea (linea, nombre, LINEA_NOMBRE, INI_NOMBRE, FIN_NOMBRE, SALTA_NOMBRE)) { #ifdef DEBUG fprintf (stderr, _("We have the name of the file [%s] in line: %s\n"), nombre, linea); #endif medio_dvd.Analizado = strlen (nombre); } else { #ifdef DEBUG1 fprintf (stderr, _("%s"), dato); #endif } } mypclose (pipe); sprintf (medio_dvd.TextoTitulos[i], _("%d - Size [%d sg] - Chapters [%d]"), i + 1, medio_dvd.TiempoOrg[i], medio_dvd.Capitulos[i]); } } /* Actualizo la Información en pantalla (solo los títulos el resto al selecionar uno en la combo) */ for (i = 0; i < medio_dvd.Titulos; i ++) { strPrincipal.cmbTitulosDVD_items = g_list_append (strPrincipal.cmbTitulosDVD_items, (gpointer) medio_dvd.TextoTitulos[i]); } gtk_combo_set_popdown_strings (GTK_COMBO (strPrincipal.cmbTitulosDVD), strPrincipal.cmbTitulosDVD_items); g_list_free(strPrincipal.cmbTitulosDVD_items); strPrincipal.cmbTitulosDVD_items = NULL; } else { MsgError ("There is no title"); } gtk_widget_hide (strOperacion.winOperacionEnCurso); return medio_dvd.Titulos && strlen (nombre); } int AnalizaCapitulos (int Titulo) { char linea[512]; char Tmp[512]; char dato[32]; FILE *pipe; int i; char comando[512]; int pid; char nombre[512]; nombre[0] = 0; #ifdef DEBUG fprintf (stderr, _("-----------\n")); fprintf (stderr, _("Title [%d] [%d]\n"), Titulo, medio_dvd.TiempoCap[Titulo-1][0]); fprintf (stderr, _("-----------\n")); #endif if (! medio_dvd.TiempoCap[Titulo-1][0]) { if (Titulo <= medio_dvd.Titulos) { sprintf (Tmp, _("Analyzing Chapters in Title..."), i+1, medio_dvd.Titulos); gtk_label_set_text (GTK_LABEL(strOperacion.lblOperacionEnCurso), Tmp); gtk_widget_show (strOperacion.winOperacionEnCurso); while (gtk_events_pending()) { gtk_main_iteration (); } for (i = 0; i < medio_dvd.Capitulos[Titulo-1]; i ++) { #ifdef DEBUG fprintf (stderr, _("-------------\n")); fprintf (stderr, _("Chapter [%d]\n"), i+1); fprintf (stderr, _("-------------\n")); #endif sprintf (Tmp, _("Analyzing Chapter %d of %d..."), i+1, medio_dvd.Capitulos[Titulo-1]); gtk_label_set_text (GTK_LABEL(strOperacion.lblOperacionEnCurso), Tmp); sprintf (Tmp, ANALIZAR_TITULO_DVD, Titulo); sprintf (comando, "%s -chapter %d-%d", Tmp, i+1, i+1); if (NULL == (pipe = mypopen (CfgGen.Path_mp, comando, "r", &pid, "/"))) { MsgError ("Error Executing: [%s]", comando); } else { while (!feof (pipe)) { LeeLinea (linea, 512, pipe); while (gtk_events_pending()) { gtk_main_iteration (); } /* Tiempo original */ if (NULL != AnalizaLinea (linea, dato, LINEA_TAMANIO, INI_TAMANIO, FIN_TAMANIO, SALTA_TAMANIO)) { medio_dvd.TiempoCap[Titulo-1][i] = atoi (dato); #ifdef DEBUG fprintf (stderr, _("We have a time in the chapter of [%d] in line: %s\n"), medio_dvd.TiempoCap[Titulo-1][i], linea); #endif } else { #ifdef DEBUG1 fprintf (stderr, _("%s"), dato); #endif } } mypclose (pipe); } } } else { MsgError ("This title is not OK"); } } else { #ifdef DEBUG fprintf (stderr, _("It is allredy calculated...\n")); #endif } gtk_widget_hide (strOperacion.winOperacionEnCurso); return medio_dvd.TiempoCap[Titulo-1][0] && strlen (nombre); }