aboutsummaryrefslogtreecommitdiff
path: root/plugins/gpulib/vout_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gpulib/vout_sdl.c')
-rw-r--r--plugins/gpulib/vout_sdl.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/plugins/gpulib/vout_sdl.c b/plugins/gpulib/vout_sdl.c
new file mode 100644
index 0000000..db1ae96
--- /dev/null
+++ b/plugins/gpulib/vout_sdl.c
@@ -0,0 +1,95 @@
+/*
+ * (C) GraÅžvydas "notaz" Ignotas, 2011
+ *
+ * This work is licensed under the terms of any of these licenses
+ * (at your option):
+ * - GNU GPL, version 2 or later.
+ * - GNU LGPL, version 2.1 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include <stdio.h>
+#include <SDL.h>
+#include <SDL_syswm.h>
+#include "gpu.h"
+
+static SDL_Surface *screen;
+static Display *x11_display;
+
+int vout_init(void)
+{
+ SDL_SysWMinfo wminfo;
+ int ret;
+
+ ret = SDL_Init(SDL_INIT_VIDEO);
+ if (ret != 0) {
+ fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
+ return ret;
+ }
+
+ screen = SDL_SetVideoMode(1024, 512, 32, 0);
+ if (screen == NULL) {
+ fprintf(stderr, "SDL_SetVideoMode failed: %s\n", SDL_GetError());
+ SDL_Quit();
+ return -1;
+ }
+
+ SDL_VERSION(&wminfo.version);
+ ret = SDL_GetWMInfo(&wminfo);
+ if (ret == 1)
+ x11_display = wminfo.info.x11.display;
+
+ return 0;
+}
+
+int vout_finish(void)
+{
+ SDL_Quit();
+ return 0;
+}
+
+void vout_update(void)
+{
+ uint32_t *d;
+ int i;
+
+ SDL_LockSurface(screen);
+ if (gpu.status.rgb24)
+ {
+ uint8_t *s;
+ int y;
+ for (y = 0; y < 512; y++) {
+ s = (uint8_t *)gpu.vram + y * 2*1024;
+ d = (uint32_t *)screen->pixels + y * 1024;
+ for (i = 0; i < 1024 * 2 / 3; i++, s += 3)
+ d[i] = (s[0] << 16) | (s[1] << 8) | s[2];
+ }
+ }
+ else
+ {
+ uint16_t *s = gpu.vram;
+ d = (uint32_t *)screen->pixels;
+ for (i = 0; i < 1024 * 512; i++)
+ d[i] = (((uint32_t)s[i] << 19) & 0xf80000) | ((s[i] << 6) & 0xf800) |
+ ((s[i] >> 7) & 0xf8);
+ }
+ SDL_UnlockSurface(screen);
+ SDL_UpdateRect(screen, 0, 0, 1024, 512);
+}
+
+long GPUopen(void **dpy)
+{
+ *dpy = x11_display;
+ return 0;
+}
+
+long GPUclose(void)
+{
+ return 0;
+}
+
+void vout_set_config(const struct rearmed_cbs *cbs)
+{
+}
+
+// vim:shiftwidth=2:expandtab