First version of VLC Phonon backend
[phonon:phonon-mplayer.git] / phonon-vlc / vlcloader.h
1 /*
2  * VLC backend for the Phonon library
3  * Copyright (C) 2007-2008  Tanguy Krotoff <tkrotoff@gmail.com>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef PHONON_VLC_VLCLOADER_H
20 #define PHONON_VLC_VLCLOADER_H
21
22 #include <vlc/libvlc.h>
23
24 #include <QtCore/QObject>
25 #include <QtCore/QString>
26
27 #include "vlcevents.h"
28
29 class QLibrary;
30
31 namespace Phonon
32 {
33 namespace VLC
34 {
35
36 /**
37  *
38  *
39  * @see libvlc.h
40  * @author Tanguy Krotoff
41  */
42 class VLCLoader {
43         friend class VLCEvents;
44 public:
45
46         /**
47          * Singleton.
48          * FIXME Ugly hack to get VLCLoader accessible from everywhere.
49          *
50          * Global variable.
51          */
52         static VLCLoader * get();
53
54         bool load(const QString & libname);
55
56         void libvlc_new(int argc, const char * const * argv);
57         void libvlc_release();
58
59         void libvlc_exception_init();
60
61         libvlc_media_descriptor_t * libvlc_media_descriptor_new(const QString & mediaDescriptor);
62
63         libvlc_media_instance_t * libvlc_media_instance_new_from_media_descriptor(libvlc_media_descriptor_t * md);
64
65         void libvlc_media_descriptor_release(libvlc_media_descriptor_t * md);
66
67         void libvlc_media_instance_play(libvlc_media_instance_t * mi);
68         void libvlc_media_instance_pause(libvlc_media_instance_t * mi);
69         void libvlc_media_instance_stop(libvlc_media_instance_t * mi);
70
71         void setDrawableWidget(const QWidget * widget);
72         int getDrawableWidget() const;
73
74         /** FIXME does not work inside VLC!!! */
75         void libvlc_media_instance_set_drawable(libvlc_media_instance_t * mi, libvlc_drawable_t drawable);
76
77         void libvlc_video_set_parent(libvlc_drawable_t drawable);
78
79         libvlc_time_t libvlc_media_instance_get_time(libvlc_media_instance_t * mi);
80
81         void libvlc_media_instance_release(libvlc_media_instance_t * mi);
82
83 private:
84
85         VLCLoader(QObject * parent);
86         ~VLCLoader();
87
88         void checkException();
89
90         int libvlc_exception_raised();
91
92         /** Hack, global variable. */
93         static VLCLoader * _vlcloader;
94
95         const char * libvlc_exception_get_message();
96
97         QLibrary * _vlc;
98
99         libvlc_instance_t * _instance;
100
101         libvlc_exception_t _exception;
102
103         int _drawableWidget;
104 };
105
106 }}      //Namespace Phonon::VLC
107
108 #endif  //PHONON_VLC_VLCLOADER_H