/* 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? */voidaddCommand(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);returncomm;}elseif(!q->last&&!q->first){SDL_UnlockMutex(q->q_mutex);returnNULL;}comm=q->first;q->first=q->first->next;q->size--;SDL_UnlockMutex(q->q_mutex);returncomm;}inlineinthasCommand(CommandQueue*q){if(q->size>0)return1;return0;}voidflushCommands(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... */intregisterCommand(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++;returnq->reg_ix-1;}