*****************************************************************************
* Copyright (C) 2001 VideoLAN
*
- * Authors:
+ * Authors: Colin Delacroix <colin@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "defs.h"
#include <stdlib.h> /* malloc(), free() */
+#include <sys/param.h> /* for MAXPATHLEN */
#include "config.h"
#include "common.h"
#include "mtime.h"
#include "tests.h"
-#include "intf_msg.h"
#include "interface.h"
-
-#include "modules.h"
+#include "intf_msg.h"
+#include "intf_playlist.h"
#include "stream_control.h"
#include "input_ext-intf.h"
-#include "intf_playlist.h"
#include "audio_output.h"
+#include "video.h"
+#include "video_output.h"
+
+#include "modules.h"
#include "main.h"
-#include <Carbon/Carbon.h>
+#include "macosx_common.h"
+
+extern main_t *p_main;
+
+
+/*****************************************************************************
+ * Constants & more
+ *****************************************************************************/
//how often to have callback to main loop. Target of 30fps then 30hz + maybe some more...
//it doesn't really scale if we move to 2x the hz... something else is slowing us down...
-
#define kMainLoopFrequency (kEventDurationSecond / 45) //45 for good measure
-#define PLAYING 0
-#define PAUSED 1
-
// Menu defs
enum
{
*/
kMenuApple = 128,
- kMenuFile = 129,
- kMenuControls = 130,
+ kMenuFile,
+ kMenuControls,
kAppleAbout = 1,
kAppleQuit = 8, //is this always the same?
kControlsEjectDiv,
kControlsEject
-
#if 0
//virtual key codes ; raw subtract 0x40 from these values
//http://devworld.apple.com/techpubs/mac/Text/Text-577.html#HEADING577-0
};
+// Initial Window Constants
+enum
+{
+ kAboutWindowOffset = 200,
+ kAboutWindowWidth = 200, //400
+ kAboutWindowHeight = 50 //100
+};
+
+
/*****************************************************************************
* intf_sys_t: description and status of the interface
*****************************************************************************/
typedef struct intf_sys_s
{
EventLoopTimerRef manageTimer;
-
+ Rect aboutRect;
+ WindowRef p_aboutWindow;
} intf_sys_t;
/*****************************************************************************
/* OS Specific */
+static int MakeAboutWindow ( intf_thread_t *p_intf );
+
void CarbonManageCallback ( EventLoopTimerRef inTimer, void *inUserData );
+OSErr MyOpenDocument(const FSSpecPtr defaultLocationfssPtr);
+
+void playorpause ( intf_thread_t *p_intf );
+void stop ( intf_thread_t *p_intf );
+
+
#ifndef CarbonEvents
void EventLoop( intf_thread_t *p_intf );
void DoEvent( intf_thread_t *p_intf , EventRecord *event);
void DoMenuCommand( intf_thread_t *p_intf , long menuResult);
void DrawWindow(WindowRef window);
+void DrawAboutWindow(WindowRef window);
#else
/*
pascal OSErr QuitEventHandler(const AppleEvent *theEvent, AppleEvent *theReply, SInt32 refCon);
InsertMenu( menu, 0 );
+//Hmm, eventually we might want more than one player window, but for now we assume one only (like OS 9 player)
+//and since we start with a window open, we temporarily disable the 'new' menu
+ DisableMenuItem( GetMenuHandle(kMenuFile), kFileNew);
+//FIXME - Disabled Menus which are not implemented yet
+ DisableMenuItem( GetMenuHandle(kMenuControls), kControlsDVDMenu);
+ DisableMenuItem( GetMenuHandle(kMenuControls), kControlsEject);
DrawMenuBar();
+ if( MakeAboutWindow( p_intf ) )
+ {
+ intf_ErrMsg( "vout error: can't make about window" );
+ return( 1 );
+ }
+
return( 0 );
}
static void intf_Run( intf_thread_t *p_intf )
{
OSStatus err;
-
EventLoopTimerUPP manageUPP;
/*
Eventually we want to use Carbon events, or maybe even write this app in Cocoa
-*/
-
-// EventTypeSpec windowEventType = { kEventClassWindow, kEventWindowClose };
-// EventHandlerUPP windowHandlerUPP;
+
+//kinda going out of bounds here... need to bring window creation to this file.
+ main_t *p_main;
- //kinda going out of bounds here... need to bring window creation to this file.
-// main_t *p_main;
+ EventTypeSpec windowEventType = { kEventClassWindow, kEventWindowClose };
+ EventHandlerUPP windowHandlerUPP;
-/*
EventTypeSpec keyboardEventType = { kEventClassKeyboard, kEventRawKeyDown };
EventHandlerUPP keyboardHandlerUPP;
*/
assert(err == noErr);
DisposeEventLoopTimerUPP(manageUPP);
-/* windowHandlerUPP = NewEventHandlerUPP ( MyWindowEventHandler );
- err = InstallWindowEventHandler ( p_main->p_vout->p_sys->p_window , windowHandlerUPP, GetEventTypeCount(windowEventType), &windowEventType, (void *) p_intf, NULL );
+/*
+ windowHandlerUPP = NewEventHandlerUPP ( MyWindowEventHandler );
+ err = InstallWindowEventHandler ( p_main->p_vout->p_sys->p_window , windowHandlerUPP, GetEventTypeCount(windowEventType), &windowEventType, (void *) p_intf, NULL );
assert(err == noErr);
DisposeEventHandlerUPP(windowHandlerUPP);
*/
//UGLY Event Loop!
EventLoop( p_intf );
#else
- //Our big event loop !-)
RunApplicationEventLoop();
#endif
err = RemoveEventLoopTimer(p_intf->p_sys->manageTimer);
}
+/*****************************************************************************
+ * MakeAboutWindow: similar to MakeWindow in vout_macosx.c ;
+ * open and set-up a Mac OS window to be used for 'about' program...
+ * create it hidden and only show it when requested
+ *****************************************************************************/
+static int MakeAboutWindow( intf_thread_t *p_intf )
+{
+ int left = 0;
+ int top = 0;
+ int bottom = kAboutWindowHeight;
+ int right = kAboutWindowWidth;
+
+ WindowAttributes windowAttr = kWindowCloseBoxAttribute |
+ kWindowStandardHandlerAttribute |
+ kWindowInWindowMenuAttribute;
+
+ SetRect( &p_intf->p_sys->aboutRect, left, top, right, bottom );
+ OffsetRect( &p_intf->p_sys->aboutRect, kAboutWindowOffset, kAboutWindowOffset );
+
+ CreateNewWindow( kDocumentWindowClass, windowAttr, &p_intf->p_sys->aboutRect, &p_intf->p_sys->p_aboutWindow );
+ if ( p_intf->p_sys->p_aboutWindow == nil )
+ {
+ return( 1 );
+ }
+
+ InstallStandardEventHandler(GetWindowEventTarget(p_intf->p_sys->p_aboutWindow));
+ SetWindowTitleWithCFString( p_intf->p_sys->p_aboutWindow, CFSTR("About DVD.app & VLC") );
+
+ return( 0 );
+}
+
void CarbonManageCallback ( EventLoopTimerRef inTimer, void *inUserData )
{
case inGoAway:
p_intf->b_die = true;
return;
- //DisposeWindow(whichWindow);
- //ExitToShell();
break;
case inZoomIn:
break;
case updateEvt:
- DrawWindow((WindowRef) event->message);
- break;
+ DrawWindow((WindowRef) event->message);
+ break;
case kHighLevelEvent:
AEProcessAppleEvent( event );
- break;
+ break;
case diskEvt:
- break;
+ break;
}
}
+//the code for playorpause and stop taken almost directly from the BeOS code
+void playorpause ( intf_thread_t *p_intf )
+{
+// pause the playback
+ if (p_intf->p_input != NULL )
+ {
+ // mute the volume if currently playing
+ if (p_main->p_vout->p_sys->playback_status == PLAYING)
+ {
+ if (p_main->p_aout != NULL)
+ {
+ p_main->p_aout->vol = 0;
+ }
+ p_main->p_vout->p_sys->playback_status = PAUSED;
+ SetMenuItemText( GetMenuHandle(kMenuControls), kControlsPlayORPause, "\pPlay");
+ }
+ else
+ // restore the volume
+ {
+ if (p_main->p_aout != NULL)
+ {
+ p_main->p_aout->vol = p_main->p_vout->p_sys->vol_val;
+ }
+ p_main->p_vout->p_sys->playback_status = PLAYING;
+ SetMenuItemText( GetMenuHandle(kMenuControls), kControlsPlayORPause, "\pPause");
+ }
+ //snooze(400000);
+ input_SetStatus(p_intf->p_input, INPUT_STATUS_PAUSE);
+ }
+}
+
+void stop ( intf_thread_t *p_intf )
+{
+ // this currently stops playback not nicely
+ if (p_intf->p_input != NULL )
+ {
+ // silence the sound, otherwise very horrible
+ if (p_main->p_aout != NULL)
+ {
+ p_main->p_aout->vol = 0;
+ }
+ //snooze(400000);
+ input_SetStatus(p_intf->p_input, INPUT_STATUS_END);
+ }
+ p_main->p_vout->p_sys->playback_status = STOPPED;
+}
+
+
void DoMenuCommand( intf_thread_t *p_intf , long menuResult)
{
short menuID; /* the resource ID of the selected menu */
short menuItem; /* the item number of the selected menu */
- static int vol_val; // remember the current volume
- static int playback_status; // remember playback state
menuID = HiWord(menuResult); /* use macros to get item & menu number */
menuItem = LoWord(menuResult);
switch (menuItem)
{
case kAppleAbout:
- //Fixme
- SysBeep(30);
- //DoAboutBox();
+ ShowWindow( p_intf->p_sys->p_aboutWindow );
+ SelectWindow( p_intf->p_sys->p_aboutWindow );
+ DrawAboutWindow( p_intf->p_sys->p_aboutWindow); //kludge
+ EnableMenuItem( GetMenuHandle(kMenuFile), kFileClose);
break;
case kAppleQuit:
p_intf->b_die = true;
- //hrmm...
- ExitToShell();
- return;
+ //hrmm... don't know what is going on w/ the Quit item in the new application menu...documentation???
break;
default:
switch (menuItem)
{
case kFileNew:
- //Fixme
- SysBeep(30);
- //DoAboutBox();
+ ShowWindow( p_main->p_vout->p_sys->p_window );
+ SelectWindow( p_main->p_vout->p_sys->p_window );
+ DisableMenuItem( GetMenuHandle(kMenuFile), kFileNew);
+ EnableMenuItem( GetMenuHandle(kMenuFile), kFileClose);
+ //hmm, can't say to play() right now because I don't know if a file is in playlist yet.
+ //need to see if I can tell this or eve if calling play() w/o a file is bad...not sure of either
break;
case kFileOpen:
- //Fixme
-/*
- const char **device;
- char device_method_and_name[B_FILE_NAME_LENGTH + 4];
- if(p_message->FindString("device", device) != B_ERROR)
- {
- sprintf(device_method_and_name, "dvd:%s", *device);
- intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, device_method_and_name );
- }
-
-*/
- SysBeep(30);
- //DoAboutBox();
+ playorpause( p_intf );
+ MyOpenDocument(nil);
+ // starts playing automatically on open? playorpause( p_intf );
break;
case kFileClose:
HideWindow( FrontWindow() );
- //Fixme
- SysBeep(30);
- //DoAboutBox();
+ if ( ! IsWindowVisible( p_main->p_vout->p_sys->p_window ) && ! IsWindowVisible( p_intf->p_sys->p_aboutWindow ) )
+ {
+ //calling this even if no file open shouldn't be bad... not sure of opposite situation above
+ stop( p_intf );
+ EnableMenuItem( GetMenuHandle(kMenuFile), kFileNew);
+ DisableMenuItem( GetMenuHandle(kMenuFile), kFileClose);
+ }
break;
case kFileQuitHack:
- p_intf->b_die = true;
+ stop( p_intf );
+ p_intf->b_die = true;
break;
default:
switch (menuItem)
{
case kControlsPlayORPause:
- // pause the playback
- if (p_intf->p_input != NULL )
- {
- // mute the volume if currently playing
- if (playback_status == PLAYING)
- {
- if (p_main->p_aout != NULL)
- {
- p_main->p_aout->vol = 0;
- }
- playback_status = PAUSED;
- }
- else
- // restore the volume
- {
- if (p_main->p_aout != NULL)
- {
- p_main->p_aout->vol = vol_val;
- }
- playback_status = PLAYING;
- }
- //snooze(400000);
- input_SetStatus(p_intf->p_input, INPUT_STATUS_PAUSE);
- }
+ playorpause( p_intf );
break;
case kControlsStop:
- // this currently stops playback not nicely
- if (p_intf->p_input != NULL )
- {
- // silence the sound, otherwise very horrible
- if (p_main->p_aout != NULL)
- {
- p_main->p_aout->vol = 0;
- }
- //snooze(400000);
- input_SetStatus(p_intf->p_input, INPUT_STATUS_END);
- }
+ stop( p_intf );
break;
case kControlsForward:
if (p_main->p_aout->vol == 0)
{
//p_vol->SetEnabled(true);
- p_main->p_aout->vol = vol_val;
+ p_main->p_aout->vol = p_main->p_vout->p_sys->vol_val;
}
else
{
//p_vol->SetEnabled(false);
- vol_val = p_main->p_aout->vol;
+ p_main->p_vout->p_sys->vol_val = p_main->p_aout->vol;
p_main->p_aout->vol = 0;
}
}
void DrawWindow(WindowRef window)
{
- Rect tempRect;
- GrafPtr curPort;
-
- GetPort(&curPort);
+ Rect tempRect;
+ GrafPtr previousPort;
+
+ GetPort(&previousPort);
SetPort(GetWindowPort(window));
BeginUpdate(window);
EraseRect(GetWindowPortBounds(window, &tempRect));
DrawControls(window);
DrawGrowIcon(window);
EndUpdate(window);
- SetPort(curPort);
+ SetPort(previousPort);
}
+void DrawAboutWindow(WindowRef window)
+{
+ GrafPtr previousPort;
+
+ GetPort(&previousPort);
+ SetPort(GetWindowPort(window));
+
+ MoveTo(10,30);
+ DrawString("\phttp://www.videolan.org");
+
+ SetPort(previousPort);
+}
#else
}
return result;
}
-#endif
\ No newline at end of file
+#endif
+
+//FIXME Adding this has introduced or surfaced a lot of bugs...
+//comented out a lot of things to strip this down to make this a 'quicky'
+OSErr MyOpenDocument(const FSSpecPtr defaultLocationfssPtr)
+{
+ NavDialogOptions dialogOptions;
+// AEDesc defaultLocation;
+// NavEventUPP eventProc = NewNavEventProc(myEventProc);
+// NavObjectFilterUPP filterProc =
+// NewNavObjectFilterProc(myFilterProc);
+ OSErr anErr = noErr;
+
+ // Specify default options for dialog box
+ anErr = NavGetDefaultDialogOptions(&dialogOptions);
+ if (anErr == noErr)
+ {
+ // Adjust the options to fit our needs
+ // Set default location option
+// dialogOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ // Clear preview option
+ dialogOptions.dialogOptionFlags ^= kNavAllowPreviews;
+
+ // make descriptor for default location
+// anErr = AECreateDesc(typeFSS, defaultLocationfssPtr,
+// sizeof(*defaultLocationfssPtr),
+// &defaultLocation );
+ if (anErr == noErr)
+ {
+ // Get 'open' resource. A nil handle being returned is OK,
+ // this simply means no automatic file filtering.
+ NavTypeListHandle typeList = (NavTypeListHandle)GetResource(
+ 'open', 128);
+ NavReplyRecord reply;
+
+ // Call NavGetFile() with specified options and
+ // declare our app-defined functions and type list
+// anErr = NavGetFile (&defaultLocation, &reply, &dialogOptions,
+ anErr = NavGetFile (nil, &reply, &dialogOptions,
+// eventProc, nil, filterProc,
+ nil, nil, nil,
+ typeList, nil);
+ if (anErr == noErr && reply.validRecord)
+ {
+ // Deal with multiple file selection
+ long count;
+
+ anErr = AECountItems(&(reply.selection), &count);
+ // Set up index for file list
+ if (anErr == noErr)
+ {
+ long index;
+
+ for (index = 1; index <= count; index++)
+ {
+ AEKeyword theKeyword;
+ DescType actualType;
+ Size actualSize;
+ FSSpec documentFSSpec;
+
+ // Get a pointer to selected file
+ anErr = AEGetNthPtr(&(reply.selection), index,
+ typeFSS, &theKeyword,
+ &actualType,&documentFSSpec,
+ sizeof(documentFSSpec),
+ &actualSize);
+ if (anErr == noErr)
+ {
+// anErr = DoOpenFile(&documentFSSpec);
+//HERE
+ FSRef newRef;
+ char path[MAXPATHLEN];
+
+ //make an FSRef out of an FSSpec
+ anErr = FSpMakeFSRef( &documentFSSpec, &newRef);
+ if (anErr != noErr)
+ {
+ return(anErr);
+ }
+ //make a path out of the FSRef
+ anErr = FSRefMakePath( &newRef, path, MAXPATHLEN);
+ if (anErr != noErr)
+ {
+ return(anErr);
+ }
+
+ //else, ok...add it to playlist!
+ intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, path );
+
+
+ }
+ }
+ }
+ // Dispose of NavReplyRecord, resources, descriptors
+ anErr = NavDisposeReply(&reply);
+ }
+ if (typeList != NULL)
+ {
+ ReleaseResource( (Handle)typeList);
+ }
+ //(void) AEDisposeDesc(&defaultLocation);
+ }
+ }
+// DisposeRoutineDescriptor(eventProc);
+// DisposeRoutineDescriptor(filterProc);
+ return anErr;
+}
+
*****************************************************************************
* Copyright (C) 2001 VideoLAN
*
- * Authors:
+ * Authors: Colin Delacroix <colin@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "mtime.h"
#include "tests.h"
-#include "video.h"
-#include "video_output.h"
-
#include "intf_msg.h"
-#include "main.h"
+#include "video.h"
+#include "video_output.h"
#include "modules.h"
+#include "main.h"
-#ifndef __CARBONPREFIX__
- #define __CARBONPREFIX__
+#include "macosx_common.h"
- // Needed for carbonization
- #define TARGET_API_MAC_CARBON 1
- // For the pascal to C or C to pascal string conversions in carbon
- #define OLDP2C 1
-#endif
-
-#include <Carbon/Carbon.h>
+/*****************************************************************************
+ * Constants & more
+ *****************************************************************************/
// Initial Window Constants
enum
kInSystem
};
-/*****************************************************************************
- * vout_sys_t: MacOS X video output method descriptor
- *****************************************************************************
- * This structure is part of the video output thread descriptor.
- * It describes the MacOS X specific properties of an output thread.
- *****************************************************************************/
-typedef struct vout_sys_s
-{
- /* MacOS X video memory */
- byte_t * p_video; /* base adress */
- size_t i_page_size; /* page size */
-
- Rect wrect;
- WindowRef p_window;
- short gwLocOffscreen;
- GWorldPtr p_gw[ 2 ];
- Boolean gNewNewGWorld; /* can we allocate in VRAm or AGP memory ? */
-
- // Boolean gDone;
- // SInt32 gSleepTime;
-
- GDHandle theGDList;
- Ptr theBase;
- int theRow;
- int theDepth;
-} vout_sys_t;
/*****************************************************************************
* Local prototypes
p_vout->p_sys->p_window = NULL;
p_vout->p_sys->p_gw[ 0 ] = NULL;
p_vout->p_sys->p_gw[ 1 ] = NULL;
- p_vout->p_sys->i_page_size = p_vout->i_width * p_vout->i_height
- * p_vout->i_bytes_per_pixel;
if ( CreateDisplay( p_vout ) )
{
intf_ErrMsg( "vout p_vout->i_height %d" , p_vout->i_height);
intf_ErrMsg( "vout p_vout->i_bytes_per_pixel %d" , p_vout->i_bytes_per_pixel);
intf_ErrMsg( "vout p_vout->i_screen_depth %d" , p_vout->i_screen_depth);
- intf_ErrMsg( "vout p_vout->p_sys->i_page_size %d" , p_vout->p_sys->i_page_size);
-#endif
-
-#if 0
- /* Map two framebuffers a the very beginning of the fb */
- p_vout->p_sys->p_video = malloc( 2 * p_vout->p_sys->i_page_size );
- if( p_vout->p_sys->p_video == NULL )
- {
- intf_ErrMsg( "vout error: can't map video memory (%s)",
- strerror(errno) );
- free( p_vout->p_sys );
- return( 1 );
- }
- /* Set and initialize buffers */
- vout_SetBuffers( p_vout, p_vout->p_sys->p_video,
- p_vout->p_sys->p_video + p_vout->p_sys->i_page_size );
#endif
return( 0 );
#if 0
p_vout->i_screen_depth = wPixDepth;
p_vout->i_bytes_per_pixel = wPixDepth;
- p_vout->i_bytes_per_line = p_vout->i_width * p_vout->i_bytes_per_pixel;
- p_vout->p_sys->i_page_size = p_vout->i_width * p_vout->i_height * p_vout->i_bytes_per_pixel;
-//p_vout->i_bytes_per_line = (**(**hgdWindow).gdPMap).rowBytes & 0x3FFF ;
+ p_vout->i_bytes_per_line = (**(**hgdWindow).gdPMap).rowBytes & 0x3FFF ;
#endif
if( ( noErr == NewGWorld( &pgwTest, wPixDepth, &rectTest, NULL, hgdWindow,
noNewDevice | useDistantHdwrMem ) )
int top = 0;
int bottom = p_vout->i_height;
int right = p_vout->i_width;
+ ProcessSerialNumber PSN;
WindowAttributes windowAttr = kWindowStandardDocumentAttributes |
kWindowStandardHandlerAttribute |
InstallStandardEventHandler(GetWindowEventTarget(p_vout->p_sys->p_window));
SetPort( GetWindowPort( p_vout->p_sys->p_window ) );
SetWindowTitleWithCFString( p_vout->p_sys->p_window, CFSTR("VLC") );
-// ShowWindow( p_vout->p_sys->p_window );
- TransitionWindow( p_vout->p_sys->p_window, kWindowZoomTransitionEffect, kWindowShowTransitionAction, NULL);
- BringToFront( p_vout->p_sys->p_window );
+ ShowWindow( p_vout->p_sys->p_window );
+ SelectWindow( p_vout->p_sys->p_window );
+
+ //in case we are run from the command line, bring us to front instead of Terminal
+ GetCurrentProcess(&PSN);
+ SetFrontProcess(&PSN);
{
short wPixDepth = (**(GetPortPixMap( GetWindowPort( p_vout->p_sys->p_window ) ))).pixelSize;
p_vout->i_screen_depth = wPixDepth;
p_vout->i_bytes_per_pixel = p_vout->i_screen_depth / 8;
p_vout->i_bytes_per_line = p_vout->i_width * p_vout->i_bytes_per_pixel;
- p_vout->p_sys->i_page_size = p_vout->i_width * p_vout->i_height * p_vout->i_bytes_per_pixel;
p_vout->i_bytes_per_line = (**(**GetWindowDevice( p_vout )).gdPMap).rowBytes & 0x3FFF ;
default:
break;
}
+}
#if 0
p_vout->i_red_lshift = 0x10;
p_vout->i_gray_pixel = 0x808080;
p_vout->i_blue_pixel = 0x32;
#endif
-}
return( 0 );
}
{
//intf_ErrMsg( "vout_Destroy()" );
-//FIXME KLUDGE to lock pixels
-#if 1
-{
+//FIXME Big Lock around Gworlds
PixMapHandle hPixmap0, hPixmap1;
hPixmap0 = GetGWorldPixMap( p_vout->p_sys->p_gw[0] );
hPixmap1 = GetGWorldPixMap( p_vout->p_sys->p_gw[1] );
UnlockPixels(hPixmap0);
UnlockPixels(hPixmap1);
-}
-#endif
-#if 1
if ( p_vout->p_sys->p_gw[0] )
{
DisposeGWorld( p_vout->p_sys->p_gw[0] );
{
DisposeWindow( p_vout->p_sys->p_window );
}
-#endif
- free( p_vout->p_sys->p_video );
+
free( p_vout->p_sys );
}
{
// intf_ErrMsg( "vout_Display()" );
- BlitToWindow ( p_vout, p_vout->i_buffer_index );
+ if ( p_vout->p_sys->playback_status != PAUSED && p_vout->p_sys->playback_status != STOPPED )
+ BlitToWindow ( p_vout, p_vout->i_buffer_index );
}
//FIXME have global lock - kinda bad but oh well
// if ( LockPixels( GetGWorldPixMap( p_vout->p_sys->p_gw[index] ) ) )
// {
+
+//LockPortBits(GetWindowPort( p_vout->p_sys->p_window ));
+//NoPurgePixels( GetGWorldPixMap( p_vout->p_sys->p_gw[index] ) );
+
CopyBits( GetPortBitMapForCopyBits( p_vout->p_sys->p_gw[index] ),
GetPortBitMapForCopyBits( GetWindowPort( p_vout->p_sys->p_window ) ),
&rectSource, &rectDest, srcCopy, NULL);
+
+//UnlockPortBits(GetWindowPort( p_vout->p_sys->p_window ));
+//AllowPurgePixels( GetGWorldPixMap( p_vout->p_sys->p_gw[index] ) );
+
// UnlockPixels( GetGWorldPixMap( p_vout->p_sys->p_gw[index] ) );
//flushQD( p_vout );
// }