handle multibuffering better
[sdl_omap.git] / src / video / omapdss / omapsdl.h
index 250099f..12a6f6e 100644 (file)
@@ -1,8 +1,22 @@
+/*
+ * (C) GraÅžvydas "notaz" Ignotas, 2010-2012
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
+ * See the COPYING file in the top-level directory.
+ */
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
 
-#define err(fmt, ...) fprintf(stderr, "omapsdl: " fmt "\n", ##__VA_ARGS__)
-#define not_supported() fprintf(stderr, "omapsdl: %s not supported\n", __FUNCTION__)
+#define err(fmt, ...) \
+       fprintf(stderr, "omapsdl: " fmt "\n", ##__VA_ARGS__)
+#define err_perror(fmt, ...) do { \
+       fprintf(stderr, "omapsdl: " fmt ": ", ##__VA_ARGS__); \
+       perror(NULL); \
+} while (0)
+#define log(fmt, ...) \
+       fprintf(stdout, "omapsdl: " fmt "\n", ##__VA_ARGS__)
+#define not_supported() \
+       fprintf(stderr, "omapsdl: %s not supported\n", __FUNCTION__)
 #if 0
 #define trace(fmt, ...) printf(" %s(" fmt ")\n", __FUNCTION__, ##__VA_ARGS__)
 #define dbg err
 #define dbg(...)
 #endif
 
+struct SDL_PrivateVideoData {
+       struct vout_fbdev *fbdev;
+       void *saved_layer;
+       /* physical screen size, should match touchscreen */
+       int phys_w, phys_h;
+       /* layer */
+       int layer_x, layer_y, layer_w, layer_h;
+       /* SDL surface borders to hide */
+       int border_l, border_r, border_t, border_b;
+       /* phys -> layer coord multipliers (16.16) */
+       int ts_xmul, ts_ymul;
+       /* misc/config */
+       unsigned int xenv_up:1;
+       unsigned int app_uses_flip:1;
+       unsigned int cfg_force_vsync:1;
+       unsigned int cfg_force_doublebuf:1;
+       unsigned int cfg_no_ts_translate:1;
+};
+
+void *osdl_video_set_mode(struct SDL_PrivateVideoData *pdata,
+                         int border_l, int border_r, int border_t, int border_b,
+                         int width, int height, int bpp, int *doublebuf);
+void *osdl_video_flip(struct SDL_PrivateVideoData *pdata);
+int   osdl_video_detect_screen(struct SDL_PrivateVideoData *pdata);
+void  osdl_video_finish(struct SDL_PrivateVideoData *pdata);
+
 void omapsdl_input_init(void);
 void omapsdl_input_bind(const char *kname, const char *sdlname);
 int  omapsdl_input_get_events(int timeout_ms,
@@ -19,10 +59,9 @@ int  omapsdl_input_get_events(int timeout_ms,
                void *cb_arg);
 void omapsdl_input_finish(void);
 
-void omapsdl_config(void);
+void omapsdl_config(struct SDL_PrivateVideoData *pdata);
+void omapsdl_config_from_env(struct SDL_PrivateVideoData *pdata);
 
 /* functions for standalone */
 void do_clut(void *dest, void *src, unsigned short *pal, int count);
 
-/* config */
-extern int gcfg_force_vsync;