changeset 2178:e509abdbf195

MPsub read/write support 0.5 (-dumpmpsub switch)
author laaz
date Fri, 12 Oct 2001 16:21:55 +0000
parents f723e4e8f4fd
children 2d8d14b882cc
files cfg-mplayer.h mplayer.c subreader.c
diffstat 3 files changed, 56 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/cfg-mplayer.h	Fri Oct 12 13:51:58 2001 +0000
+++ b/cfg-mplayer.h	Fri Oct 12 16:21:55 2001 +0000
@@ -176,7 +176,8 @@
 	{"dumpaudio", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 1},
 	{"dumpvideo", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 2},
 	{"dumpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 3},
-	
+	{"dumpmpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 4},
+
 	{"aofile", &ao_outputfilename, CONF_TYPE_STRING, 0, 0, 0},
 	{"waveheader", &ao_pcm_waveheader, CONF_TYPE_FLAG, 0, 0, 1},
 	{"nowaveheader", &ao_pcm_waveheader, CONF_TYPE_FLAG, 0, 1, 0},
--- a/mplayer.c	Fri Oct 12 13:51:58 2001 +0000
+++ b/mplayer.c	Fri Oct 12 16:21:55 2001 +0000
@@ -672,6 +672,7 @@
 #endif
 
   if(subtitles && stream_dump_type==3) list_sub_file(subtitles);
+  if(subtitles && stream_dump_type==4) dump_mpsub(subtitles);
 
     stream=NULL;
     demuxer=NULL;
@@ -796,7 +797,8 @@
   switch(stream_dump_type){
   case 1: ds=d_audio;break;
   case 2: ds=d_video;break;
-  case 3: ds=d_dvdsub;break;
+  case 3:
+  case 4: ds=d_dvdsub;break;
   }
   if(!ds){        
       mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_DumpSelectedSteramMissing);
--- a/subreader.c	Fri Oct 12 13:51:58 2001 +0000
+++ b/subreader.c	Fri Oct 12 16:21:55 2001 +0000
@@ -23,7 +23,7 @@
 #endif
 
 
-static long int mpsub_position=0;
+static float mpsub_position=0;
 
 int sub_uses_time=0;
 int sub_errs=0;
@@ -373,18 +373,19 @@
 
 subtitle *sub_read_line_mpsub(FILE *fd, subtitle *current) {
 	char line[1000];
-	int a,b,num=0;
+	float a,b;
+	int num=0;
 	char *p, *q;
 
 	do
 	{
 		if (!fgets(line, 1000, fd)) return NULL;
-	} while (sscanf (line, "%d %d", &a, &b) !=2);
+	} while (sscanf (line, "%f %f", &a, &b) !=2);
 
-	mpsub_position += (a*100);
-	current->start=mpsub_position+1;
-	mpsub_position += (b*100);
-	current->end=mpsub_position;
+	mpsub_position += (a*100.0);
+	current->start=(int) mpsub_position;
+	mpsub_position += (b*100.0);
+	current->end=(int) mpsub_position;
 
 	while (num < SUB_MAX_TEXT) {
 		if (!fgets (line, 1000, fd)) return NULL;
@@ -674,6 +675,49 @@
 
 }
 
+void dump_mpsub(subtitle* subs){
+	int i,j;
+	FILE *fd;
+	float a,b;
+
+	mpsub_position=0.0;
+
+	fd=fopen ("dump.mpsub", "w");
+	if (!fd) {
+		perror ("dump_mpsub: fopen");
+		return;
+	}
+	
+
+	if (sub_uses_time) fprintf (fd,"FORMAT=TIME\n\n");
+	else fprintf (fd, "FORMAT=25");  // FIXME: fps
+
+	for(j=0;j<sub_num;j++){
+	    subtitle* egysub=&subs[j];
+	    a=((egysub->start-mpsub_position)/100.0);
+	    b=((egysub->end-egysub->start)/100.0);
+	    if ( (float)((int)a) == a)
+		fprintf (fd, "%.0f",a);
+	    else
+		fprintf (fd, "%.2f",a);
+	    
+	    if ( (float)((int)b) == b)
+		fprintf (fd, " %.0f\n",b);
+	    else
+		fprintf (fd, " %.2f\n",b);
+	    
+	    mpsub_position = egysub->end;
+	    for (i=0; i<egysub->lines; i++) {
+		fprintf (fd, "%s\n",egysub->text[i]);
+	    }
+	    fprintf (fd, "\n");
+	}
+	fclose (fd);
+	printf ("Subtitles dumped in \'dump.mpsub\'.\n");
+}
+
+
+
 #if 0
 int main(int argc, char **argv) {  // for testing