diff src/video/directfb/SDL_DirectFB_yuv.c @ 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 4da1ee79c9af
line wrap: on
line diff
--- a/src/video/directfb/SDL_DirectFB_yuv.c	Sun May 21 17:27:13 2006 +0000
+++ b/src/video/directfb/SDL_DirectFB_yuv.c	Sun May 28 13:04:16 2006 +0000
@@ -30,252 +30,252 @@
 
 /* The functions used to manipulate software video overlays */
 static struct private_yuvhwfuncs directfb_yuvfuncs = {
-  DirectFB_LockYUVOverlay,
-  DirectFB_UnlockYUVOverlay,
-  DirectFB_DisplayYUVOverlay,
-  DirectFB_FreeYUVOverlay
+    DirectFB_LockYUVOverlay,
+    DirectFB_UnlockYUVOverlay,
+    DirectFB_DisplayYUVOverlay,
+    DirectFB_FreeYUVOverlay
 };
 
-struct private_yuvhwdata {
-  DFBDisplayLayerID      layer_id;
+struct private_yuvhwdata
+{
+    DFBDisplayLayerID layer_id;
 
-  IDirectFBDisplayLayer *layer;
-  IDirectFBSurface      *surface;
+    IDirectFBDisplayLayer *layer;
+    IDirectFBSurface *surface;
 
-  /* These are just so we don't have to allocate them separately */
-  Uint16 pitches[3];
-  Uint8 *planes[3];
+    /* These are just so we don't have to allocate them separately */
+    Uint16 pitches[3];
+    Uint8 *planes[3];
 };
 
 static DFBEnumerationResult
-enum_layers_callback( DFBDisplayLayerID            id,
-                      DFBDisplayLayerDescription   desc,
-                      void                        *data )
+enum_layers_callback (DFBDisplayLayerID id,
+                      DFBDisplayLayerDescription desc, void *data)
 {
-  struct private_yuvhwdata *hwdata = (struct private_yuvhwdata *) data;
+    struct private_yuvhwdata *hwdata = (struct private_yuvhwdata *) data;
 
-  /* we don't want the primary */
-  if (id == DLID_PRIMARY)
-    return DFENUM_OK;
+    /* we don't want the primary */
+    if (id == DLID_PRIMARY)
+        return DFENUM_OK;
 
-  /* take the one with a surface for video */
-  if ((desc.caps & DLCAPS_SURFACE) && (desc.type & DLTF_VIDEO))
-    {
-      hwdata->layer_id = id;
+    /* take the one with a surface for video */
+    if ((desc.caps & DLCAPS_SURFACE) && (desc.type & DLTF_VIDEO)) {
+        hwdata->layer_id = id;
 
-      return DFENUM_CANCEL;
+        return DFENUM_CANCEL;
     }
 
-  return DFENUM_OK;
+    return DFENUM_OK;
 }
 
 
-static DFBResult CreateYUVSurface(_THIS, struct private_yuvhwdata *hwdata,
-                                  int width, int height, Uint32 format)
+static DFBResult
+CreateYUVSurface (_THIS, struct private_yuvhwdata *hwdata,
+                  int width, int height, Uint32 format)
 {
-  DFBResult              ret;
-  IDirectFB             *dfb = HIDDEN->dfb;
-  IDirectFBDisplayLayer *layer;
-  DFBDisplayLayerConfig  conf;
+    DFBResult ret;
+    IDirectFB *dfb = HIDDEN->dfb;
+    IDirectFBDisplayLayer *layer;
+    DFBDisplayLayerConfig conf;
 
-  ret = dfb->EnumDisplayLayers (dfb, enum_layers_callback, hwdata);
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFB::EnumDisplayLayers", ret);
-      return ret;
+    ret = dfb->EnumDisplayLayers (dfb, enum_layers_callback, hwdata);
+    if (ret) {
+        SetDirectFBerror ("IDirectFB::EnumDisplayLayers", ret);
+        return ret;
     }
 
-  if (!hwdata->layer_id)
-    return DFB_UNSUPPORTED;
+    if (!hwdata->layer_id)
+        return DFB_UNSUPPORTED;
 
-  ret = dfb->GetDisplayLayer (dfb, hwdata->layer_id, &layer);
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFB::GetDisplayLayer", ret);
-      return ret;
+    ret = dfb->GetDisplayLayer (dfb, hwdata->layer_id, &layer);
+    if (ret) {
+        SetDirectFBerror ("IDirectFB::GetDisplayLayer", ret);
+        return ret;
     }
 
-  conf.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT;
-  conf.width = width;
-  conf.height = height;
+    conf.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT;
+    conf.width = width;
+    conf.height = height;
 
-  switch (format)
-    {
+    switch (format) {
     case SDL_YV12_OVERLAY:
-      conf.pixelformat = DSPF_YV12;
-      break;
+        conf.pixelformat = DSPF_YV12;
+        break;
     case SDL_IYUV_OVERLAY:
-      conf.pixelformat = DSPF_I420;
-      break;
+        conf.pixelformat = DSPF_I420;
+        break;
     case SDL_YUY2_OVERLAY:
-      conf.pixelformat = DSPF_YUY2;
-      break;
+        conf.pixelformat = DSPF_YUY2;
+        break;
     case SDL_UYVY_OVERLAY:
-      conf.pixelformat = DSPF_UYVY;
-      break;
+        conf.pixelformat = DSPF_UYVY;
+        break;
     default:
-      fprintf (stderr, "SDL_DirectFB: Unsupported YUV format (0x%08x)!\n", format);
-      break;
+        fprintf (stderr, "SDL_DirectFB: Unsupported YUV format (0x%08x)!\n",
+                 format);
+        break;
     }
 
-  ret = layer->SetConfiguration (layer, &conf);
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFBDisplayLayer::SetConfiguration", ret);
-      layer->Release (layer);
-      return ret;
+    ret = layer->SetConfiguration (layer, &conf);
+    if (ret) {
+        SetDirectFBerror ("IDirectFBDisplayLayer::SetConfiguration", ret);
+        layer->Release (layer);
+        return ret;
     }
 
-  ret = layer->GetSurface (layer, &hwdata->surface);
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFBDisplayLayer::GetSurface", ret);
-      layer->Release (layer);
-      return ret;
+    ret = layer->GetSurface (layer, &hwdata->surface);
+    if (ret) {
+        SetDirectFBerror ("IDirectFBDisplayLayer::GetSurface", ret);
+        layer->Release (layer);
+        return ret;
     }
 
-  hwdata->layer = layer;
+    hwdata->layer = layer;
 
-  return DFB_OK;
+    return DFB_OK;
 }
 
-SDL_Overlay *DirectFB_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display)
+SDL_Overlay *
+DirectFB_CreateYUVOverlay (_THIS, int width, int height, Uint32 format,
+                           SDL_Surface * display)
 {
-  SDL_Overlay *overlay;
-  struct private_yuvhwdata *hwdata;
+    SDL_Overlay *overlay;
+    struct private_yuvhwdata *hwdata;
 
-  /* Create the overlay structure */
-  overlay = SDL_calloc (1, sizeof(SDL_Overlay));
-  if (!overlay)
-    {
-      SDL_OutOfMemory();
-      return NULL;
+    /* Create the overlay structure */
+    overlay = SDL_calloc (1, sizeof (SDL_Overlay));
+    if (!overlay) {
+        SDL_OutOfMemory ();
+        return NULL;
     }
-	
-  /* Fill in the basic members */
-  overlay->format = format;
-  overlay->w = width;
-  overlay->h = height;
 
-  /* Set up the YUV surface function structure */
-  overlay->hwfuncs = &directfb_yuvfuncs;
+    /* Fill in the basic members */
+    overlay->format = format;
+    overlay->w = width;
+    overlay->h = height;
+
+    /* Set up the YUV surface function structure */
+    overlay->hwfuncs = &directfb_yuvfuncs;
 
-  /* Create the pixel data and lookup tables */
-  hwdata = SDL_calloc(1, sizeof(struct private_yuvhwdata));
-  overlay->hwdata = hwdata;
-  if (!hwdata)
-    {
-      SDL_OutOfMemory();
-      SDL_FreeYUVOverlay (overlay);
-      return NULL;
+    /* Create the pixel data and lookup tables */
+    hwdata = SDL_calloc (1, sizeof (struct private_yuvhwdata));
+    overlay->hwdata = hwdata;
+    if (!hwdata) {
+        SDL_OutOfMemory ();
+        SDL_FreeYUVOverlay (overlay);
+        return NULL;
+    }
+
+    if (CreateYUVSurface (this, hwdata, width, height, format)) {
+        SDL_FreeYUVOverlay (overlay);
+        return NULL;
     }
 
-  if (CreateYUVSurface (this, hwdata, width, height, format))
-    {
-      SDL_FreeYUVOverlay (overlay);
-      return NULL;
-    }
+    overlay->hw_overlay = 1;
 
-  overlay->hw_overlay = 1;
-
-  /* Set up the plane pointers */
-  overlay->pitches = hwdata->pitches;
-  overlay->pixels = hwdata->planes;
-  switch (format)
-    {
+    /* Set up the plane pointers */
+    overlay->pitches = hwdata->pitches;
+    overlay->pixels = hwdata->planes;
+    switch (format) {
     case SDL_YV12_OVERLAY:
     case SDL_IYUV_OVERLAY:
-      overlay->planes = 3;
-      break;
+        overlay->planes = 3;
+        break;
     default:
-      overlay->planes = 1;
-      break;
+        overlay->planes = 1;
+        break;
     }
 
-  /* We're all done.. */
-  return overlay;
+    /* We're all done.. */
+    return overlay;
 }
 
-int DirectFB_LockYUVOverlay(_THIS, SDL_Overlay *overlay)
+int
+DirectFB_LockYUVOverlay (_THIS, SDL_Overlay * overlay)
 {
-  DFBResult         ret;
-  void             *data;
-  int               pitch;
-  IDirectFBSurface *surface = overlay->hwdata->surface;
+    DFBResult ret;
+    void *data;
+    int pitch;
+    IDirectFBSurface *surface = overlay->hwdata->surface;
 
-  ret = surface->Lock (surface, DSLF_READ | DSLF_WRITE, &data, &pitch);
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFBSurface::Lock", ret);
-      return -1;
+    ret = surface->Lock (surface, DSLF_READ | DSLF_WRITE, &data, &pitch);
+    if (ret) {
+        SetDirectFBerror ("IDirectFBSurface::Lock", ret);
+        return -1;
     }
 
-  /* Find the pitch and offset values for the overlay */
-  overlay->pitches[0] = (Uint16) pitch;
-  overlay->pixels[0]  = (Uint8*) data;
+    /* Find the pitch and offset values for the overlay */
+    overlay->pitches[0] = (Uint16) pitch;
+    overlay->pixels[0] = (Uint8 *) data;
 
-  switch (overlay->format)
-    {
+    switch (overlay->format) {
     case SDL_YV12_OVERLAY:
     case SDL_IYUV_OVERLAY:
-      /* Add the two extra planes */
-      overlay->pitches[1] = overlay->pitches[0] / 2;
-      overlay->pitches[2] = overlay->pitches[0] / 2;
-      overlay->pixels[1]  = overlay->pixels[0] + overlay->pitches[0] * overlay->h;
-      overlay->pixels[2]  = overlay->pixels[1] + overlay->pitches[1] * overlay->h / 2;
-      break;
+        /* Add the two extra planes */
+        overlay->pitches[1] = overlay->pitches[0] / 2;
+        overlay->pitches[2] = overlay->pitches[0] / 2;
+        overlay->pixels[1] =
+            overlay->pixels[0] + overlay->pitches[0] * overlay->h;
+        overlay->pixels[2] =
+            overlay->pixels[1] + overlay->pitches[1] * overlay->h / 2;
+        break;
     default:
-      /* Only one plane, no worries */
-      break;
+        /* Only one plane, no worries */
+        break;
     }
 
-  return 0;
+    return 0;
 }
 
-void DirectFB_UnlockYUVOverlay(_THIS, SDL_Overlay *overlay)
+void
+DirectFB_UnlockYUVOverlay (_THIS, SDL_Overlay * overlay)
 {
-  IDirectFBSurface *surface = overlay->hwdata->surface;
+    IDirectFBSurface *surface = overlay->hwdata->surface;
 
-  overlay->pixels[0] = overlay->pixels[1] = overlay->pixels[2] = NULL;
+    overlay->pixels[0] = overlay->pixels[1] = overlay->pixels[2] = NULL;
 
-  surface->Unlock (surface);
+    surface->Unlock (surface);
 }
 
-int DirectFB_DisplayYUVOverlay(_THIS, SDL_Overlay *overlay, SDL_Rect *src, SDL_Rect *dst)
+int
+DirectFB_DisplayYUVOverlay (_THIS, SDL_Overlay * overlay, SDL_Rect * src,
+                            SDL_Rect * dst)
 {
-  DFBResult              ret;
-  DFBDisplayLayerConfig  conf;
-  IDirectFBDisplayLayer *primary = HIDDEN->layer;
-  IDirectFBDisplayLayer *layer   = overlay->hwdata->layer;
+    DFBResult ret;
+    DFBDisplayLayerConfig conf;
+    IDirectFBDisplayLayer *primary = HIDDEN->layer;
+    IDirectFBDisplayLayer *layer = overlay->hwdata->layer;
 
-  primary->GetConfiguration (primary, &conf);
+    primary->GetConfiguration (primary, &conf);
 
-  ret = layer->SetScreenLocation (layer,
-                                  dst->x / (float) conf.width, dst->y / (float) conf.height,
-                                  dst->w / (float) conf.width, dst->h / (float) conf.height );
-  if (ret)
-    {
-      SetDirectFBerror("IDirectFBDisplayLayer::SetScreenLocation", ret);
-      return -1;
+    ret = layer->SetScreenLocation (layer,
+                                    dst->x / (float) conf.width,
+                                    dst->y / (float) conf.height,
+                                    dst->w / (float) conf.width,
+                                    dst->h / (float) conf.height);
+    if (ret) {
+        SetDirectFBerror ("IDirectFBDisplayLayer::SetScreenLocation", ret);
+        return -1;
     }
 
-  return 0;
+    return 0;
 }
 
-void DirectFB_FreeYUVOverlay(_THIS, SDL_Overlay *overlay)
+void
+DirectFB_FreeYUVOverlay (_THIS, SDL_Overlay * overlay)
 {
-  struct private_yuvhwdata *hwdata;
+    struct private_yuvhwdata *hwdata;
 
-  hwdata = overlay->hwdata;
-  if (hwdata)
-    {
-      if (hwdata->surface)
-        hwdata->surface->Release (hwdata->surface);
+    hwdata = overlay->hwdata;
+    if (hwdata) {
+        if (hwdata->surface)
+            hwdata->surface->Release (hwdata->surface);
 
-      if (hwdata->layer)
-        hwdata->layer->Release (hwdata->layer);
+        if (hwdata->layer)
+            hwdata->layer->Release (hwdata->layer);
 
-      free (hwdata);
+        free (hwdata);
     }
 }
 
+/* vi: set ts=4 sw=4 expandtab: */