[Ffmpeg-devel] [PATCH 4 of 8] RFC 2 stage: First feedback from review comments

Edouard Gomez ed.gomez
Mon Dec 4 21:41:01 CET 2006


# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1165185848 -3600
# Node ID 20688ec350356508eb851f0ecbff5e167b3090ca
# Parent  7d1fe57e3af9c22d6e2090c621a65660e31d8c15
RFC 2 stage: First feedback from review comments

- License is GPL, simplify the license header to make it clear
- Add myself to license header, clarify who did what
- Use 64 bit PTS
- Move mouse bitmaps to the mouse cursor painting function. Make them
  const again
- Properly detach X11 from the shared memory segment on close
- Destroy X11 image on close

diff -r 7d1fe57e3af9 -r 20688ec35035 libavformat/x11grab.c
--- a/libavformat/x11grab.c	Sun Dec 03 23:44:08 2006 +0100
+++ b/libavformat/x11grab.c	Sun Dec 03 23:44:08 2006 +0100
@@ -1,46 +1,32 @@
 /*
  * X11 video grab interface
- * Copyright (C) 2006 Clemens Fruhwirth
- *
- * A quick note on licensing. This file is a mixture of LGPL code
- * (ffmpeg) and GPL code (xvidcap). The result is a file that must
- * abid both licenses. As they are compatible and GPL is more
- * strict, this code has an "effective" GPL license.
- * 
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg integration:
+ * Copyright (C) 2006 Clemens Fruhwirth <clemens at endorphin.org>
+ *                    Edouard Gomez <ed.gomez at free.fr>
+ *
  * This file contains code from grab.c:
- * Copyright (c) 2000, 2001 Fabrice Bellard 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Copyright (c) 2000-2001 Fabrice Bellard 
  *
  * This file contains code from the xvidcap project:
- * Copyright (C) 1997-98 Rasca, Berlin
- * Copyright (C) 2003,04 Karl H. Beckers, Frankfurt
- *
- * This program is free software; you can redistribute it and/or modify
+ * Copyright (C) 1997-1998 Rasca, Berlin
+ *               2003-2004 Karl H. Beckers, Frankfurt
+ *
+ * FFmpeg is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include "avformat.h"
@@ -55,6 +41,7 @@
 #include <X11/Xlib.h>
 #include <X11/Xlibint.h>
 #include <X11/Xproto.h>
+#include <X11/Xutil.h>
 #include <sys/ipc.h>
 #include <sys/shm.h>
 #include <X11/extensions/XShm.h>
@@ -113,7 +100,7 @@ x11grab_read_header(AVFormatContext *s1,
 	if (!st) {
 		return -ENOMEM;
 	}
-	av_set_pts_info(st, 48, 1, 1000000); /* 48 bits pts in us */
+	av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
 
 	use_shm = XShmQueryExtension(dpy);
 	av_log(s1, AV_LOG_INFO, "shared memory extension %s\n", use_shm ? "found" : "not found");
@@ -121,8 +108,8 @@ x11grab_read_header(AVFormatContext *s1,
 	if(use_shm) {
 		int scr = XDefaultScreen(dpy);
 		image = XShmCreateImage(dpy,
-					DefaultVisual(dpy,scr),
-					DefaultDepth(dpy,scr),
+					DefaultVisual(dpy, scr),
+					DefaultDepth(dpy, scr),
 					ZPixmap,
 					NULL,
 					&x11grab->shminfo,
@@ -235,18 +222,6 @@ fail:
 	av_free(st);
 	return AVERROR_IO;  
 }
-
-static uint16_t mousePointerBlack[] =
-{
-	0, 49152, 40960, 36864, 34816, 33792, 33280, 33024, 32896, 32832,
-	33728, 37376, 43264, 51456, 1152, 1152, 576, 576, 448, 0
-};
-
-static uint16_t mousePointerWhite[] =
-{
-	0, 0, 16384, 24576, 28672, 30720, 31744, 32256, 32512, 32640, 31744,
-	27648, 17920, 1536, 768, 768, 384, 384, 0, 0
-};
 
 static void
 getCurrentPointer(AVFormatContext *s1, X11Grab *s, int *x, int *y)
@@ -299,6 +274,22 @@ static void
 static void
 paintMousePointer(AVFormatContext *s1, X11Grab *s, int *x, int *y, XImage *image)
 {
+	static const uint16_t const mousePointerBlack[] =
+		{
+			0, 49152, 40960, 36864, 34816,
+			33792, 33280, 33024, 32896, 32832,
+			33728, 37376, 43264, 51456, 1152,
+			1152, 576, 576, 448, 0
+		};
+
+	static const uint16_t const mousePointerWhite[] =
+		{
+			0, 0, 16384, 24576, 28672,
+			30720, 31744, 32256, 32512, 32640,
+			31744, 27648, 17920, 1536, 768,
+			768, 384, 384, 0, 0
+		};
+
 	int x_off = s->x_off;
 	int y_off = s->y_off;
 	int width = s->width;
@@ -429,10 +420,17 @@ static int x11grab_read_close(AVFormatCo
 {
 	X11Grab *x11grab = s1->priv_data;
 
-	/* Free shared mem if necessary */
+	/* Detach cleanly from shared mem */
 	if (x11grab->use_shm) {
+		XShmDetach(x11grab->dpy, &x11grab->shminfo);
 		shmdt(x11grab->shminfo.shmaddr);
 		shmctl(x11grab->shminfo.shmid, IPC_RMID, NULL);
+	}
+
+	/* Destroy X11 image */
+	if (x11grab->image) {
+		XDestroyImage(x11grab->image);
+		x11grab->image = NULL;
 	}
 
 	/* Free X11 display */




More information about the ffmpeg-devel mailing list