[MPlayer-cvslog] CVS: main/libvo vo_yuv4mpeg.c,1.17,1.18

Reimar Döffinger CVS syncmail at mplayerhq.hu
Fri Dec 3 22:02:15 CET 2004


CVS change done by Reimar Döffinger CVS

Update of /cvsroot/mplayer/main/libvo
In directory mail:/var2/tmp/cvs-serv2109/libvo

Modified Files:
	vo_yuv4mpeg.c 
Log Message:
Add a file= suboption to set output file.
Patch by Olivier Rolland (( billl |at| users <dot> sf <dot> net )).


Index: vo_yuv4mpeg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_yuv4mpeg.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- vo_yuv4mpeg.c	28 Oct 2004 01:15:52 -0000	1.17
+++ vo_yuv4mpeg.c	3 Dec 2004 21:02:13 -0000	1.18
@@ -43,7 +43,7 @@
 
 static vo_info_t info = 
 {
-	"yuv4mpeg output for mjpegtools (to \"stream.yuv\")",
+	"yuv4mpeg output for mjpegtools",
 	"yuv4mpeg",
 	"Robert Kesterson <robertk at robertk.com>",
 	""
@@ -62,6 +62,8 @@
 static uint8_t *rgb_buffer = NULL;
 static uint8_t *rgb_line_buffer = NULL;
 
+static char *yuv_filename = NULL;
+
 static int using_format = 0;
 static FILE *yuv_out;
 static int write_bytes;
@@ -126,11 +128,12 @@
 	write_bytes = image_width * image_height * 3 / 2;
 	image = malloc(write_bytes);
 
-	yuv_out = fopen("stream.yuv", "wb");
+	yuv_out = fopen(yuv_filename ? yuv_filename : "stream.yuv", "wb");
 	if (!yuv_out || image == 0) 
 	{
 		mp_msg(MSGT_VO,MSGL_FATAL,
-			MSGTR_VO_YUV4MPEG_OutFileOpenError);
+			MSGTR_VO_YUV4MPEG_OutFileOpenError,
+			yuv_filename ? yuv_filename : "stream.yuv");
 		return -1;
 	}
 	image_y = image;
@@ -462,6 +465,10 @@
 	if(rgb_line_buffer)
 		free(rgb_line_buffer);
 	rgb_line_buffer = NULL;
+
+	if (yuv_filename)
+		free(yuv_filename);
+	yuv_filename = NULL;
 }
 
 
@@ -472,28 +479,41 @@
 
 static uint32_t preinit(const char *arg)
 {
-    int arg_unrecognized = 0;
-
     if(arg) 
     {
-        /* configure output mode */
-	if (strcmp(arg, "interlaced"))
-            arg_unrecognized++;
-	else
-	    config_interlace = Y4M_ILACE_TOP_FIRST;
+	int parse_err = 0;
+	unsigned int parse_pos = 0;
 
-        if (strcmp(arg, "interlaced_bf"))
-            arg_unrecognized++;
-        else
-            config_interlace = Y4M_ILACE_BOTTOM_FIRST;
-
-        /* If both tests failed the argument is invalid */
-        if (arg_unrecognized == 2)
-        {
-	        mp_msg(MSGT_VO,MSGL_FATAL,
-			MSGTR_VO_YUV4MPEG_UnknownSubDev,arg);
-			return -ENOSYS;
+	while (arg[parse_pos] && !parse_err) {
+	    if (strncmp (&arg[parse_pos], "interlaced", 10) == 0) {
+		parse_pos += 10;
+		config_interlace = Y4M_ILACE_TOP_FIRST;
+	    }
+	    else if (strncmp (&arg[parse_pos], "interlaced_bf", 13) == 0) {
+		parse_pos += 13;
+		config_interlace = Y4M_ILACE_BOTTOM_FIRST;
+	    }
+	    else if (strncmp (&arg[parse_pos], "file=", 5) == 0) {
+		int file_len;
+		parse_pos += 5;
+		file_len = strcspn (&arg[parse_pos], ":");
+		if (file_len < 0) {
+		    parse_err = 1;
+		    break;
 		}
+		yuv_filename = malloc (file_len + 1);
+		memcpy (yuv_filename, &arg[parse_pos], file_len);
+		yuv_filename[file_len] = 0;
+		parse_pos += file_len;
+	    }
+	    if (arg[parse_pos] == ':') parse_pos++;
+	    else if (arg[parse_pos]) parse_err = 1;
+	}
+	if (parse_err) { 
+	    mp_msg(MSGT_VO,MSGL_FATAL, 
+		    MSGTR_VO_YUV4MPEG_UnknownSubDev,arg); 
+	    return -1;
+	}
     }
 
     /* Inform user which output mode is used */




More information about the MPlayer-cvslog mailing list