source: trunk/src/3rdparty/phonon/waveout/mediaobject.h@ 423

Last change on this file since 423 was 2, checked in by Dmitry A. Kuminov, 17 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 4.9 KB
Line 
1/* This file is part of the KDE project.
2
3Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
5This library is free software: you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation, either version 2.1 or 3 of the License.
8
9This library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU Lesser General Public License for more details.
13
14You should have received a copy of the GNU Lesser General Public License
15along with this library. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef PHONON_MEDIAOBJECT_H
19#define PHONON_MEDIAOBJECT_H
20
21#include <phonon/mediaobjectinterface.h>
22
23#include <QtCore/QHash>
24#include <QtCore/QObject>
25#include <QtCore/QQueue>
26#include <QtCore/QBasicTimer>
27#include <QtCore/QWaitCondition>
28#include <QtCore/QMutex>
29#include <QtCore/QThread>
30#include <QFile>
31#include <QIODevice>
32
33#include <windows.h>
34
35
36QT_BEGIN_NAMESPACE
37
38namespace Phonon
39{
40 class MediaSource;
41
42 namespace WaveOut
43 {
44 class WorkerThread;
45 class AudioOutput;
46
47 class MediaObject : public QObject, public Phonon::MediaObjectInterface
48 {
49 Q_OBJECT
50 Q_INTERFACES(Phonon::MediaObjectInterface)
51
52 public:
53 MediaObject(QObject *parent);
54 ~MediaObject();
55 Phonon::State state() const;
56 bool hasVideo() const;
57 bool isSeekable() const;
58 qint64 currentTime() const;
59 qint32 tickInterval() const;
60
61 void setTickInterval(qint32 newTickInterval);
62 void play();
63 void pause();
64 void stop();
65 void seek(qint64 time);
66
67 QString errorString() const;
68 Phonon::ErrorType errorType() const;
69 qint64 totalTime() const;
70 qint32 prefinishMark() const;
71 void setPrefinishMark(qint32 newPrefinishMark);
72 qint32 transitionTime() const;
73 void setTransitionTime(qint32);
74 qint64 remainingTime() const;
75 MediaSource source() const;
76 void setSource(const MediaSource &source);
77 void setNextSource(const MediaSource &source);
78
79
80 Q_SIGNALS:
81 void stateChanged(Phonon::State newstate, Phonon::State oldstate);
82 void tick(qint64 time);
83 void metaDataChanged(QMultiMap<QString, QString>);
84 void seekableChanged(bool);
85 void hasVideoChanged(bool);
86 void bufferStatus(int);
87 void finished();
88 void prefinishMarkReached(qint32);
89 void aboutToFinish();
90 void totalTimeChanged(qint64 length) const;
91 void currentSourceChanged(const MediaSource &);
92 void outOfData(QIODevice *ioStream, QByteArray *buffer, bool *m_bufferingFinshed);
93
94 protected:
95 void setAudioOutput(QObject *audioOutput);
96
97 private Q_SLOTS:
98 void setVolume(qreal newVolume);
99
100 private:
101 bool m_nextBufferIndex;
102 bool prepareBuffers();
103 void unPrepareBuffers();
104 bool getWaveOutDevice();
105 bool openWaveFile(QString fileName);
106 bool readHeader();
107 bool boolUpdateBuffer();
108 bool fillBuffers();
109 void swapBuffers();
110 void setState(Phonon::State newState);
111 void setError(ErrorType errorType, QString errorMessage);
112 void deleteValidWaveOutDevice();
113 void playBuffer(WAVEHDR *waveHeader);
114
115 static void CALLBACK WaveOutCallBack(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
116
117 struct {
118 WAVEHDR *waveHeader;
119 QByteArray data;
120 } m_soundBuffer1, m_soundBuffer2;
121
122 WAVEFORMATEX m_waveFormatEx;
123 HWAVEOUT m_hWaveOut;
124
125 QFile *m_file;
126 QIODevice *m_stream;
127 QString m_errorString;
128
129 WorkerThread *m_thread;
130
131 MediaSource m_source;
132 MediaSource m_nextSource;
133 AudioOutput *m_audioOutput;
134 ErrorType m_errorType;
135
136 qreal m_volume;
137 qint64 m_mediaSize;
138 qint64 m_totalTime;
139 qint64 m_currentTime;
140 qint64 m_transitionTime;
141 qint64 m_prefinishMark;
142 qint64 m_tickIntervalResolution;
143 qint32 m_tickInterval;
144 qint32 m_tick;
145 Phonon::State m_state;
146
147 bool m_bufferingFinished;
148 bool m_paused;
149 bool m_stopped;
150 bool m_hasNextSource;
151 bool m_hasSource;
152 bool m_sourceIsValid;
153 bool m_bufferPrepared;
154
155 friend class Backend;
156 };
157 }
158}
159
160QT_END_NAMESPACE
161
162#endif // PHONON_MEDIAOBJECT_H
Note: See TracBrowser for help on using the repository browser.