]> git.tdb.fi Git - xinema.git/blob - source/xineengine.h
Pass expose events to Xine
[xinema.git] / source / xineengine.h
1 #ifndef XINEENGINE_H_
2 #define XINEENGINE_H_
3
4 #include <pthread.h>
5 #include <sigc++/trackable.h>
6 #include <xine.h>
7 #include <msp/core/mutex.h>
8 #include <msp/graphics/window.h>
9
10 class XineStream;
11
12 class XineEngine: public sigc::trackable
13 {
14 private:
15         Msp::Graphics::Window &window;
16         Msp::Mutex *display_mutex;
17         pthread_t locked_thread;
18         unsigned lock_count;
19         xine_t *engine;
20         xine_audio_port_t *audio_driver;
21         x11_visual_t visual;
22         xine_video_port_t *video_driver;
23         Msp::Graphics::Window::Event *pending_expose;
24
25 public:
26         XineEngine(Msp::Graphics::Window &, Msp::Mutex * = 0);
27         ~XineEngine();
28
29         xine_t *get_engine() { return engine; }
30         xine_audio_port_t *get_audio_driver() { return audio_driver; }
31         xine_video_port_t *get_video_driver() { return video_driver; }
32
33         void tick();
34
35 private:
36         void window_exposed(unsigned, unsigned, unsigned, unsigned, const Msp::Graphics::Window::Event &);
37
38         static void dest_size_cb(void *, int, int, double, int *, int *, double *);
39         static void frame_output_cb(void *, int, int, double, int *, int *, int *, int *, double *, int *, int *);
40         static void lock_cb(void *);
41         static void unlock_cb(void *);
42 };
43
44 #endif