1 /******************************
2 * Qt player using libVLC *
6 ******************************/
10 #define qtu( i ) ((i).toUtf8().constData())
18 if((vlcObject
= libvlc_new(0,NULL
)) == NULL
) {
19 printf("Could not init libVLC");
23 /* Display libVLC version */
24 printf("libVLC version: %s\n",libvlc_get_version());
26 /* Interface initialisation */
33 libvlc_release(vlcObject
);
36 void Mwindow::initMenus() {
38 centralWidget
= new QWidget
;
40 videoWidget
= new QWidget
;
41 videoWidget
->setAutoFillBackground( true );
42 QPalette plt
= palette();
43 plt
.setColor( QPalette::Window
, Qt::black
);
44 videoWidget
->setPalette( plt
);
46 QMenu
*fileMenu
= menuBar()->addMenu("&File");
47 QMenu
*editMenu
= menuBar()->addMenu("&Edit");
49 QAction
*Open
= new QAction("&Open", this);
50 QAction
*Quit
= new QAction("&Quit", this);
51 QAction
*playAc
= new QAction("&Play/Pause", this);
53 Open
->setShortcut(QKeySequence("Ctrl+O"));
54 Quit
->setShortcut(QKeySequence("Ctrl+Q"));
56 fileMenu
->addAction(Open
);
57 fileMenu
->addAction(Quit
);
58 editMenu
->addAction(playAc
);
60 connect(Open
, SIGNAL(triggered()), this, SLOT(openFile()));
61 connect(playAc
, SIGNAL(triggered()), this, SLOT(play()));
62 connect(Quit
, SIGNAL(triggered()), qApp
, SLOT(quit()));
65 void Mwindow::initComponents() {
67 playBut
= new QPushButton("Play");
68 QObject::connect(playBut
, SIGNAL(clicked()), this, SLOT(play()));
70 stopBut
= new QPushButton("Stop");
71 QObject::connect(stopBut
, SIGNAL(clicked()), this, SLOT(stop()));
73 muteBut
= new QPushButton("Mute");
74 QObject::connect(muteBut
, SIGNAL(clicked()), this, SLOT(mute()));
76 volumeSlider
= new QSlider(Qt::Horizontal
);
77 QObject::connect(volumeSlider
, SIGNAL(sliderMoved(int)), this, SLOT(changeVolume(int)));
78 volumeSlider
->setValue(80);
80 slider
= new QSlider(Qt::Horizontal
);
81 slider
->setMaximum(1000);
82 QObject::connect(slider
, SIGNAL(sliderMoved(int)), this, SLOT(changePosition(int)));
84 QTimer
*timer
= new QTimer(this);
85 connect(timer
, SIGNAL(timeout()), this, SLOT(updateInterface()));
88 QHBoxLayout
*layout
= new QHBoxLayout
;
89 layout
->addWidget(playBut
);
90 layout
->addWidget(stopBut
);
91 layout
->addWidget(muteBut
);
92 layout
->addWidget(volumeSlider
);
94 QVBoxLayout
*layout2
= new QVBoxLayout
;
95 layout2
->addWidget(videoWidget
);
96 layout2
->addWidget(slider
);
97 layout2
->addLayout(layout
);
99 centralWidget
->setLayout(layout2
);
100 setCentralWidget(centralWidget
);
104 void Mwindow::openFile() {
105 /* Just the basic file-select box */
106 QString fileOpen
= QFileDialog::getOpenFileName(this,tr("Load a file"), "~");
108 /* Stop if something is playing */
109 if( vlcPlayer
&& libvlc_media_player_is_playing(vlcPlayer
) )
113 libvlc_media_t
*vlcMedia
= libvlc_media_new_path(vlcObject
,qtu(fileOpen
));
117 vlcPlayer
= libvlc_media_player_new_from_media (vlcMedia
);
118 libvlc_media_release(vlcMedia
);
120 /* Integrate the video in the interface */
121 #if defined(Q_OS_MAC)
122 libvlc_media_player_set_nsobject(vlcPlayer
, (void *) videoWidget
->winId());
123 #elif defined(Q_OS_UNIX)
124 libvlc_media_player_set_xwindow(vlcPlayer
, videoWidget
->winId());
125 #elif defined(Q_OS_WIN)
126 libvlc_media_player_set_hwnd(vlcPlayer
, videoWidget
->winId());
130 libvlc_media_player_play (vlcPlayer
);
132 //Set vars and text correctly
133 playBut
->setText("Pause");
136 void Mwindow::play() {
140 if (libvlc_media_player_is_playing(vlcPlayer
))
142 libvlc_media_player_pause(vlcPlayer
);
143 playBut
->setText("Play");
147 libvlc_media_player_play(vlcPlayer
);
148 playBut
->setText("Pause");
153 int Mwindow::changeVolume(int vol
) { //Called if you change the volume slider
156 return libvlc_audio_set_volume (vlcPlayer
,vol
);
161 void Mwindow::changePosition(int pos
) { //Called if you change the position slider
163 if(vlcPlayer
) //It segfault if vlcPlayer don't exist
164 libvlc_media_player_set_position(vlcPlayer
,(float)pos
/(float)1000);
167 void Mwindow::updateInterface() { //Update interface and check if song is finished
169 if(vlcPlayer
) //It segfault if vlcPlayer don't exist
171 /* update the timeline */
172 float pos
= libvlc_media_player_get_position(vlcPlayer
);
173 int siderPos
=(int)(pos
*(float)(1000));
174 slider
->setValue(siderPos
);
177 if (libvlc_media_player_get_state(vlcPlayer
) == 6) { this->stop(); }
181 void Mwindow::stop() {
183 libvlc_media_player_stop(vlcPlayer
);
184 libvlc_media_player_release(vlcPlayer
);
186 playBut
->setText("Play");
191 void Mwindow::mute() {
193 if(volumeSlider
->value() == 0) { //if already muted...
195 this->changeVolume(80);
196 volumeSlider
->setValue(80);
198 } else { //else mute volume
200 this->changeVolume(0);
201 volumeSlider
->setValue(0);
207 void Mwindow::closeEvent(QCloseEvent
*event
) {