changeset 14145:9c47f90ad94a

fix leak with -fixed-vo, allow concatenating
author reimar
date Sun, 12 Dec 2004 15:17:53 +0000
parents 1fcb18e39ef9
children dd7713e9c00b
files ChangeLog libvo/vo_yuv4mpeg.c
diffstat 2 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Dec 11 23:59:36 2004 +0000
+++ b/ChangeLog	Sun Dec 12 15:17:53 2004 +0000
@@ -45,7 +45,8 @@
     * support for mixer channel selection in the ALSA audio output driver
     * jpeg video output driver now supports output to multiple directories
     * audio output driver for the polypaudio sound server
-    * yuv4mpeg video output now has a file= suboption.
+    * yuv4mpeg video output now has a file= suboption, can now be used with
+      -fixed-vo to concatenate files having same width, height and fps
 
     Decoders:
     * "experimental" support for 20 and 24 bit LPCM (DVD-Audio)
--- a/libvo/vo_yuv4mpeg.c	Sat Dec 11 23:59:36 2004 +0000
+++ b/libvo/vo_yuv4mpeg.c	Sun Dec 12 15:17:53 2004 +0000
@@ -51,8 +51,9 @@
 
 LIBVO_EXTERN (yuv4mpeg)
 
-static int image_width;
-static int image_height;
+static int image_width = 0;
+static int image_height = 0;
+static float image_fps = 0;
 
 static uint8_t *image = NULL;
 static uint8_t *image_y = NULL;
@@ -80,8 +81,19 @@
        uint32_t d_height, uint32_t fullscreen, char *title, 
        uint32_t format)
 {
+	if (image_width == width && image_height == height &&
+	     image_fps == vo_fps && vo_config_count)
+	  return 0;
+	if (vo_config_count) {
+	  mp_msg(MSGT_VO, MSGL_WARN,
+	    "Video formats differ (w:%i=>%i, h:%i=>%i, fps:%f=>%f), "
+	    "restarting output.\n",
+	    image_width, width, image_height, height, image_fps, vo_fps);
+	  uninit();
+	}
 	image_height = height;
 	image_width = width;
+	image_fps = vo_fps;
 	using_format = format;
 
 	if (Y4M_IS_INTERLACED)
@@ -146,7 +158,7 @@
 
 	/* At least the interlacing is ok now */
 	fprintf(yuv_out, "YUV4MPEG2 W%d H%d F%ld:%ld I%c A0:0\n", 
-			image_width, image_height, (long)(vo_fps * 1000000.0), 
+			image_width, image_height, (long)(image_fps * 1000000.0), 
 			(long)1000000, config_interlace);
 
 	fflush(yuv_out);
@@ -448,6 +460,7 @@
 	return 0;
 }
 
+// WARNING: config(...) also uses this
 static void uninit(void)
 {
     if(image)
@@ -469,6 +482,9 @@
 	if (yuv_filename)
 		free(yuv_filename);
 	yuv_filename = NULL;
+	image_width = 0;
+	image_height = 0;
+	image_fps = 0;
 }