diff src/video/quartz/SDL_QuartzYUV.m @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents 14717b52abc0
children
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzYUV.m	Sun May 21 17:27:13 2006 +0000
+++ b/src/video/quartz/SDL_QuartzYUV.m	Sun May 28 13:04:16 2006 +0000
@@ -37,17 +37,23 @@
 #define yuv_port (this->hidden->yuv_port)
 
 
-static int QZ_LockYUV (_THIS, SDL_Overlay *overlay) {
+static int
+QZ_LockYUV (_THIS, SDL_Overlay * overlay)
+{
 
     return 0;
 }
 
-static void QZ_UnlockYUV (_THIS, SDL_Overlay *overlay) {
+static void
+QZ_UnlockYUV (_THIS, SDL_Overlay * overlay)
+{
 
     ;
 }
 
-static int QZ_DisplayYUV (_THIS, SDL_Overlay *overlay, SDL_Rect *src, SDL_Rect *dst) {
+static int
+QZ_DisplayYUV (_THIS, SDL_Overlay * overlay, SDL_Rect * src, SDL_Rect * dst)
+{
 
     OSErr err;
     CodecFlags flags;
@@ -62,11 +68,12 @@
 
         Fixed scale_x, scale_y;
 
-        scale_x = FixDiv ( Long2Fix (dst->w), Long2Fix (overlay->w) );
-        scale_y = FixDiv ( Long2Fix (dst->h), Long2Fix (overlay->h) );
+        scale_x = FixDiv (Long2Fix (dst->w), Long2Fix (overlay->w));
+        scale_y = FixDiv (Long2Fix (dst->h), Long2Fix (overlay->h));
 
         SetIdentityMatrix (yuv_matrix);
-        ScaleMatrix (yuv_matrix, scale_x, scale_y, Long2Fix (0), Long2Fix (0));
+        ScaleMatrix (yuv_matrix, scale_x, scale_y, Long2Fix (0),
+                     Long2Fix (0));
 
         SetDSequenceMatrix (yuv_seq, yuv_matrix);
 
@@ -74,34 +81,35 @@
         yuv_height = dst->h;
     }
 
-    if( ( err = DecompressSequenceFrameS(
-                                         yuv_seq,
-                                         (void*)yuv_pixmap,
+    if ((err = DecompressSequenceFrameS (yuv_seq,
+                                         (void *) yuv_pixmap,
                                          sizeof (PlanarPixmapInfoYUV420),
-                                         codecFlagUseImageBuffer, &flags, nil ) != noErr ) )
-    {
+                                         codecFlagUseImageBuffer, &flags,
+                                         nil) != noErr)) {
         SDL_SetError ("DecompressSequenceFrameS failed");
     }
 
     return err != noErr;
 }
 
-static void QZ_FreeHWYUV (_THIS, SDL_Overlay *overlay) {
+static void
+QZ_FreeHWYUV (_THIS, SDL_Overlay * overlay)
+{
 
     CDSequenceEnd (yuv_seq);
-    ExitMovies();
+    ExitMovies ();
 
     SDL_free (overlay->hwfuncs);
     SDL_free (overlay->pitches);
     SDL_free (overlay->pixels);
 
     if (SDL_VideoSurface->flags & SDL_FULLSCREEN) {
-        [ qz_window close ];
+        [qz_window close];
         qz_window = nil;
     }
 
     SDL_free (yuv_matrix);
-    DisposeHandle ((Handle)yuv_idh);
+    DisposeHandle ((Handle) yuv_idh);
 }
 
 /* check for 16 byte alignment, bail otherwise */
@@ -110,37 +118,38 @@
 /* align a byte offset, return how much to add to make it a multiple of 16 */
 #define ALIGN(x) ((16 - (x & 15)) & 15)
 
-SDL_Overlay* QZ_CreateYUVOverlay (_THIS, int width, int height,
-                                         Uint32 format, SDL_Surface *display) {
+SDL_Overlay *
+QZ_CreateYUVOverlay (_THIS, int width, int height,
+                     Uint32 format, SDL_Surface * display)
+{
 
     Uint32 codec;
     OSStatus err;
     CGrafPtr port;
     SDL_Overlay *overlay;
 
-    if (format == SDL_YV12_OVERLAY ||
-        format == SDL_IYUV_OVERLAY) {
+    if (format == SDL_YV12_OVERLAY || format == SDL_IYUV_OVERLAY) {
 
         codec = kYUV420CodecType;
-    }
-    else {
+    } else {
         SDL_SetError ("Hardware: unsupported video format");
         return NULL;
     }
 
-    yuv_idh = (ImageDescriptionHandle) NewHandleClear (sizeof(ImageDescription));
+    yuv_idh =
+        (ImageDescriptionHandle) NewHandleClear (sizeof (ImageDescription));
     if (yuv_idh == NULL) {
-        SDL_OutOfMemory();
+        SDL_OutOfMemory ();
         return NULL;
     }
 
-    yuv_matrix = (MatrixRecordPtr) SDL_malloc (sizeof(MatrixRecord));
+    yuv_matrix = (MatrixRecordPtr) SDL_malloc (sizeof (MatrixRecord));
     if (yuv_matrix == NULL) {
-        SDL_OutOfMemory();
+        SDL_OutOfMemory ();
         return NULL;
     }
 
-    if ( EnterMovies() != noErr ) {
+    if (EnterMovies () != noErr) {
         SDL_SetError ("Could not init QuickTime for YUV playback");
         return NULL;
     }
@@ -154,68 +163,64 @@
     if (SDL_VideoSurface->flags & SDL_FULLSCREEN) {
 
         /*
-          Acceleration requires a window to be present.
-          A CGrafPtr that points to the screen isn't good enough
-        */
-        NSRect content = NSMakeRect (0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h);
+           Acceleration requires a window to be present.
+           A CGrafPtr that points to the screen isn't good enough
+         */
+        NSRect content =
+            NSMakeRect (0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h);
 
-        qz_window = [ [ SDL_QuartzWindow alloc ]
-                            initWithContentRect:content
-                            styleMask:NSBorderlessWindowMask
-                            backing:NSBackingStoreBuffered defer:NO ];
+      qz_window =[[SDL_QuartzWindow alloc] initWithContentRect: content styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer:NO];
 
         if (qz_window == nil) {
             SDL_SetError ("Could not create the Cocoa window");
             return NULL;
         }
 
-        [ qz_window setContentView:[ [ NSQuickDrawView alloc ] init ] ];
-        [ qz_window setReleasedWhenClosed:YES ];
-        [ qz_window center ];
-        [ qz_window setAcceptsMouseMovedEvents:YES ];
-        [ qz_window setLevel:CGShieldingWindowLevel() ];
-        [ qz_window makeKeyAndOrderFront:nil ];
+      [qz_window setContentView:[[NSQuickDrawView alloc] init]];
+      [qz_window setReleasedWhenClosed:YES];
+        [qz_window center];
+      [qz_window setAcceptsMouseMovedEvents:YES];
+      [qz_window setLevel:CGShieldingWindowLevel ()];
+      [qz_window makeKeyAndOrderFront:nil];
 
-        port = [ [ qz_window contentView ] qdPort ];
+        port =[[qz_window contentView] qdPort];
         SetPort (port);
-        
+
         /*
-            BUG: would like to remove white flash when window kicks in
-            {
-                Rect r;
-                SetRect (&r, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h);
-                PaintRect (&r);
-                QDFlushPortBuffer (port, nil);
-            }
-        */
-    }
-    else {
-        port = [ window_view qdPort ];
+           BUG: would like to remove white flash when window kicks in
+           {
+           Rect r;
+           SetRect (&r, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h);
+           PaintRect (&r);
+           QDFlushPortBuffer (port, nil);
+           }
+         */
+    } else {
+        port =[window_view qdPort];
         SetPort (port);
     }
-    
+
     SetIdentityMatrix (yuv_matrix);
-    
-    HLock ((Handle)yuv_idh);
-    
-    (**yuv_idh).idSize = sizeof(ImageDescription);
-    (**yuv_idh).cType  = codec;
+
+    HLock ((Handle) yuv_idh);
+
+    (**yuv_idh).idSize = sizeof (ImageDescription);
+    (**yuv_idh).cType = codec;
     (**yuv_idh).version = 1;
     (**yuv_idh).revisionLevel = 0;
     (**yuv_idh).width = width;
     (**yuv_idh).height = height;
-    (**yuv_idh).hRes = Long2Fix(72);
-    (**yuv_idh).vRes = Long2Fix(72);
+    (**yuv_idh).hRes = Long2Fix (72);
+    (**yuv_idh).vRes = Long2Fix (72);
     (**yuv_idh).spatialQuality = codecLosslessQuality;
     (**yuv_idh).frameCount = 1;
     (**yuv_idh).clutID = -1;
     (**yuv_idh).dataSize = 0;
     (**yuv_idh).depth = 24;
-    
-    HUnlock ((Handle)yuv_idh);
-    
-    err = DecompressSequenceBeginS (
-                                    &yuv_seq,
+
+    HUnlock ((Handle) yuv_idh);
+
+    err = DecompressSequenceBeginS (&yuv_seq,
                                     yuv_idh,
                                     NULL,
                                     0,
@@ -226,68 +231,65 @@
                                     0,
                                     NULL,
                                     codecFlagUseImageBuffer,
-                                    codecLosslessQuality,
-                                    yuv_codec);
-    
+                                    codecLosslessQuality, yuv_codec);
+
     if (err != noErr) {
         SDL_SetError ("Error trying to start YUV codec.");
         return NULL;
     }
-    
-    overlay = (SDL_Overlay*) SDL_malloc (sizeof(*overlay));
+
+    overlay = (SDL_Overlay *) SDL_malloc (sizeof (*overlay));
     if (overlay == NULL) {
-        SDL_OutOfMemory();
+        SDL_OutOfMemory ();
         return NULL;
     }
-    
-    overlay->format      = format;
-    overlay->w           = width;
-    overlay->h           = height;
-    overlay->planes      = 3;
-    overlay->hw_overlay  = 1;
+
+    overlay->format = format;
+    overlay->w = width;
+    overlay->h = height;
+    overlay->planes = 3;
+    overlay->hw_overlay = 1;
     {
-        int      offset;
-        Uint8  **pixels;
-        Uint16  *pitches;
-        int      plane2, plane3;
+        int offset;
+        Uint8 **pixels;
+        Uint16 *pitches;
+        int plane2, plane3;
 
         if (format == SDL_IYUV_OVERLAY) {
 
-            plane2 = 1; /* Native codec format */
+            plane2 = 1;         /* Native codec format */
             plane3 = 2;
-        }
-        else if (format == SDL_YV12_OVERLAY) {
+        } else if (format == SDL_YV12_OVERLAY) {
 
             /* switch the U and V planes */
-            plane2 = 2; /* U plane maps to plane 3 */
-            plane3 = 1; /* V plane maps to plane 2 */
-        }
-        else {
-            SDL_SetError("Unsupported YUV format");
+            plane2 = 2;         /* U plane maps to plane 3 */
+            plane3 = 1;         /* V plane maps to plane 2 */
+        } else {
+            SDL_SetError ("Unsupported YUV format");
             return NULL;
         }
 
-        pixels = (Uint8**) SDL_malloc (sizeof(*pixels) * 3);
-        pitches = (Uint16*) SDL_malloc (sizeof(*pitches) * 3);
+        pixels = (Uint8 **) SDL_malloc (sizeof (*pixels) * 3);
+        pitches = (Uint16 *) SDL_malloc (sizeof (*pitches) * 3);
         if (pixels == NULL || pitches == NULL) {
-            SDL_OutOfMemory();
+            SDL_OutOfMemory ();
             return NULL;
         }
 
-        yuv_pixmap = (PlanarPixmapInfoYUV420*)
-            SDL_malloc (sizeof(PlanarPixmapInfoYUV420) +
-                    (width * height * 2));
+        yuv_pixmap = (PlanarPixmapInfoYUV420 *)
+            SDL_malloc (sizeof (PlanarPixmapInfoYUV420) +
+                        (width * height * 2));
         if (yuv_pixmap == NULL) {
             SDL_OutOfMemory ();
             return NULL;
         }
 
         /* CHECK_ALIGN(yuv_pixmap); */
-        offset  = sizeof(PlanarPixmapInfoYUV420);
+        offset = sizeof (PlanarPixmapInfoYUV420);
         /* offset += ALIGN(offset); */
         /* CHECK_ALIGN(offset); */
 
-        pixels[0] = (Uint8*)yuv_pixmap + offset;
+        pixels[0] = (Uint8 *) yuv_pixmap + offset;
         /* CHECK_ALIGN(pixels[0]); */
 
         pitches[0] = width;
@@ -295,13 +297,13 @@
         yuv_pixmap->componentInfoY.rowBytes = width;
 
         offset += width * height;
-        pixels[plane2] = (Uint8*)yuv_pixmap + offset;
+        pixels[plane2] = (Uint8 *) yuv_pixmap + offset;
         pitches[plane2] = width / 2;
         yuv_pixmap->componentInfoCb.offset = offset;
         yuv_pixmap->componentInfoCb.rowBytes = width / 2;
 
         offset += (width * height / 4);
-        pixels[plane3] = (Uint8*)yuv_pixmap + offset;
+        pixels[plane3] = (Uint8 *) yuv_pixmap + offset;
         pitches[plane3] = width / 2;
         yuv_pixmap->componentInfoCr.offset = offset;
         yuv_pixmap->componentInfoCr.rowBytes = width / 2;
@@ -310,19 +312,19 @@
         overlay->pitches = pitches;
     }
 
-    overlay->hwfuncs = SDL_malloc (sizeof(*overlay->hwfuncs));
+    overlay->hwfuncs = SDL_malloc (sizeof (*overlay->hwfuncs));
     if (overlay->hwfuncs == NULL) {
-        SDL_OutOfMemory();
+        SDL_OutOfMemory ();
         return NULL;
     }
-    
-    overlay->hwfuncs->Lock    = QZ_LockYUV;
-    overlay->hwfuncs->Unlock  = QZ_UnlockYUV;
+
+    overlay->hwfuncs->Lock = QZ_LockYUV;
+    overlay->hwfuncs->Unlock = QZ_UnlockYUV;
     overlay->hwfuncs->Display = QZ_DisplayYUV;
-    overlay->hwfuncs->FreeHW  = QZ_FreeHWYUV;
+    overlay->hwfuncs->FreeHW = QZ_FreeHWYUV;
 
     yuv_width = overlay->w;
     yuv_height = overlay->h;
-    
+
     return overlay;
 }