diff src/_gcommand.c @ 1849:301bc61643a9 math_module

merged changes from trunk
author lorenz
date Mon, 16 Nov 2009 18:31:40 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/_gcommand.c	Mon Nov 16 18:31:40 2009 +0000
@@ -0,0 +1,115 @@
+/*
+  pygame - Python Game Library
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Library 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
+  Library General Public License for more details.
+
+  You should have received a copy of the GNU Library General Public
+  License along with this library; if not, write to the Free
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  
+*/
+
+/*
+ * _movie - movie support for pygame with ffmpeg
+ * Author: Tyler Laing
+ *
+ * This module allows for the loading of, playing, pausing, stopping, and so on
+ *  of a video file. Any format supported by ffmpeg is supported by this
+ *  video player. Any bugs, please email trinioler@gmail.com :)
+ */
+
+#include "_gcommand.h"
+
+/* command queue management routines... I make a lot of queues, don't I? */
+void addCommand(CommandQueue *q, Command *comm)
+{
+	SDL_LockMutex(q->q_mutex);
+	comm->next=NULL;
+	q->registry[comm->type]++;
+	if(!q->size)
+	{
+		q->first=comm;
+		q->size++;
+		SDL_UnlockMutex(q->q_mutex);
+		return;
+	}
+	if(q->size==1)
+	{
+		q->last=comm;
+		q->first->next=comm;
+		q->size++;
+		SDL_UnlockMutex(q->q_mutex);
+		return;
+	}
+	q->last->next=comm;
+	q->last=comm;
+	q->size++;
+	SDL_UnlockMutex(q->q_mutex);
+	return;
+}
+
+Command *getCommand(CommandQueue *q)
+{
+	SDL_LockMutex(q->q_mutex);
+	Command *comm;
+	if(!q->last && q->first)
+	{
+		comm=q->first;
+		q->size--;
+		SDL_UnlockMutex(q->q_mutex);
+		return comm;
+	}
+	else if (!q->last && !q->first)
+	{
+		SDL_UnlockMutex(q->q_mutex);
+		return NULL;
+	}
+	comm=q->first;
+	q->first=q->first->next;
+	q->size--;
+	SDL_UnlockMutex(q->q_mutex);
+	return comm;
+}
+
+inline int hasCommand(CommandQueue *q)
+{
+	if(q->size>0)
+		return 1;
+	return 0;
+}
+
+void flushCommands(CommandQueue *q)
+{
+	SDL_LockMutex(q->q_mutex);
+	Command *prev;
+	Command *cur = q->first;
+	while(cur!=NULL)
+	{
+		prev=cur;
+		cur=cur->next;
+		PyMem_Free(prev);
+		q->size--;
+	}
+	SDL_UnlockMutex(q->q_mutex);
+}
+
+/* registers a command with a particular movie object's command queue. 
+ *  Basically, this means, theoretically, different movie objects could have different commands... 
+ */
+int registerCommand(CommandQueue *q)
+{
+	//int cur = q->reg_ix;
+	if(q->reg_ix>=1024)
+		q->reg_ix=0;
+	q->registry[q->reg_ix]=0;
+	q->reg_ix++;
+	return q->reg_ix-1;
+}