Skip to content

Commit

Permalink
Hello.
Browse files Browse the repository at this point in the history
This patch provides basic support for video on the Sony PS3
Linux framebuffer. Scaling, format-conversion, and drawing is
done from the SPEs, so there is little performance impact to
PPE applications. This is by no means production quality code,
but it is a very good start and a good example of how to use the
PS3's hardware capabilities to accelerate video playback on
the box.

The driver has been verified to work with ffplay, mplayer and xine.
This piece of software has been developed at the IBM R&D Lab
in Boeblingen, Germany and is now returned to the community.

Enjoy !

Signed-off-by: D.Herrendoerfer < d.herrendoerfer [at] de [dot] ibm [dot] com >
  • Loading branch information
slouken committed Apr 2, 2009
1 parent 12c22be commit 2ea07f1
Show file tree
Hide file tree
Showing 16 changed files with 4,382 additions and 0 deletions.
29 changes: 29 additions & 0 deletions README.PS3
@@ -0,0 +1,29 @@

SDL on Sony Playstation3
------------------------

Installation:
First, you have to install the Cell SDK
- Download the Cell SDK installer RPM and ISO images to
a temporary directory such as /tmp/cellsdk.
- Mount the image: mount -o loop CellSDK-Devel-Fedora_3.1.0.0.0.iso /tmp/cellsdk
- Install the SDK installer: rpm -ivh cell-install-3.1.0-0.0.noarch.rpm
- Install the SDK: cd /opt/cell && ./cellsdk --iso /tmp/cellsdkiso install

You need to install the SPU-libs before installing SDL
- Go to SDL-1.2/src/video/ps3/spulibs/
- Run make && make install

Finally, install SDL
- Go to SDL-1.2/ and build SDL like any other GNU style package.
e.g.
- Build the configure-script with ./autogen.sh
- Configure SDL for your needs: ./configure --enable-video-ps3 ...
- Build and install it: make && make install


Todo:
- mouse/keyboard/controller support

Have fun!
Dirk Herrendoerfer <d.herrendoerfer [at] de [dot ibm [dot] com>
28 changes: 28 additions & 0 deletions configure.in
Expand Up @@ -1287,6 +1287,33 @@ AC_HELP_STRING([--enable-video-ps2gs], [use PlayStation 2 GS video driver [[defa
fi
}

dnl See if we're running on PlayStation 3 Cell hardware
CheckPS3()
{
AC_ARG_ENABLE(video-ps3,
AC_HELP_STRING([--enable-video-ps3], [use PlayStation 3 Cell driver [[default=yes]]]),
, enable_video_ps3=yes)
if test x$enable_video = xyes -a x$enable_video_ps3 = xyes; then
AC_MSG_CHECKING(for PlayStation 3 Cell support)
video_ps3=no
AC_TRY_COMPILE([
#include <linux/fb.h>
#include <asm/ps3fb.h>
],[
],[
video_ps3=yes
])
AC_MSG_RESULT($video_ps3)
if test x$video_ps3 = xyes; then
AC_DEFINE(SDL_VIDEO_DRIVER_PS3)
SOURCES="$SOURCES $srcdir/src/video/ps3/*.c"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I/opt/cell/sdk/usr/include"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lbilin_scaler_spu -lfb_writer_spu -lyuv2rgb_spu -L/opt/cell/sdk/usr/lib -lspe2"
have_video=yes
fi
fi
}

dnl Find the GGI includes
CheckGGI()
{
Expand Down Expand Up @@ -2251,6 +2278,7 @@ case "$host" in
CheckFBCON
CheckDirectFB
CheckPS2GS
CheckPS3
CheckGGI
CheckSVGA
CheckVGL
Expand Down
1 change: 1 addition & 0 deletions include/SDL_config.h.in
Expand Up @@ -269,6 +269,7 @@
#undef SDL_VIDEO_DRIVER_PHOTON
#undef SDL_VIDEO_DRIVER_PICOGUI
#undef SDL_VIDEO_DRIVER_PS2GS
#undef SDL_VIDEO_DRIVER_PS3
#undef SDL_VIDEO_DRIVER_QTOPIA
#undef SDL_VIDEO_DRIVER_QUARTZ
#undef SDL_VIDEO_DRIVER_RISCOS
Expand Down
3 changes: 3 additions & 0 deletions src/video/SDL_sysvideo.h
Expand Up @@ -347,6 +347,9 @@ extern VideoBootStrap DirectFB_bootstrap;
#if SDL_VIDEO_DRIVER_PS2GS
extern VideoBootStrap PS2GS_bootstrap;
#endif
#if SDL_VIDEO_DRIVER_PS3
extern VideoBootStrap PS3_bootstrap;
#endif
#if SDL_VIDEO_DRIVER_GGI
extern VideoBootStrap GGI_bootstrap;
#endif
Expand Down
3 changes: 3 additions & 0 deletions src/video/SDL_video.c
Expand Up @@ -63,6 +63,9 @@ static VideoBootStrap *bootstrap[] = {
#if SDL_VIDEO_DRIVER_PS2GS
&PS2GS_bootstrap,
#endif
#if SDL_VIDEO_DRIVER_PS3
&PS3_bootstrap,
#endif
#if SDL_VIDEO_DRIVER_GGI
&GGI_bootstrap,
#endif
Expand Down
44 changes: 44 additions & 0 deletions src/video/ps3/SDL_ps3events.c
@@ -0,0 +1,44 @@
/*
* SDL - Simple DirectMedia Layer
* CELL BE Support for PS3 Framebuffer
* Copyright (C) 2008, 2009 International Business Machines Corporation
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*
* Martin Lowinski <lowinski [at] de [dot] ibm [ibm] com>
* Dirk Herrendoerfer <d.herrendoerfer [at] de [dot] ibm [dot] com>
* SPE code based on research by:
* Rene Becker
* Thimo Emmerich
*/

#include "SDL_config.h"

#include "../../events/SDL_sysevents.h"
#include "../../events/SDL_events_c.h"
#include "SDL_ps3video.h"
#include "SDL_ps3events_c.h"

void PS3_PumpEvents(_THIS)
{
return;
}

void PS3_InitOSKeymap(_THIS)
{
return;
}

41 changes: 41 additions & 0 deletions src/video/ps3/SDL_ps3events_c.h
@@ -0,0 +1,41 @@
/*
* SDL - Simple DirectMedia Layer
* CELL BE Support for PS3 Framebuffer
* Copyright (C) 2008, 2009 International Business Machines Corporation
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*
* Martin Lowinski <lowinski [at] de [dot] ibm [ibm] com>
* Dirk Herrendoerfer <d.herrendoerfer [at] de [dot] ibm [dot] com>
* SPE code based on research by:
* Rene Becker
* Thimo Emmerich
*/

#include "SDL_config.h"

#ifndef _SDL_ps3events_h
#define _SDL_ps3events_h

#include "SDL_ps3video.h"

extern void PS3_InitOSKeymap(_THIS);
extern void PS3_PumpEvents(_THIS);

extern void enable_cursor(int enable);

#endif /* _SDL_ps3events_h */

0 comments on commit 2ea07f1

Please sign in to comment.