13 |
13 |
14 You should have received a copy of the GNU Lesser General Public License |
14 You should have received a copy of the GNU Lesser General Public License |
15 along with this library. If not, see <http://www.gnu.org/licenses/>. |
15 along with this library. If not, see <http://www.gnu.org/licenses/>. |
16 */ |
16 */ |
17 |
17 |
18 #include <QtCore/QFileInfo> |
18 #import <QTKit/QTMovie.h> |
|
19 |
19 #include "quicktimemetadata.h" |
20 #include "quicktimemetadata.h" |
20 #include "quicktimevideoplayer.h" |
21 #include "quicktimevideoplayer.h" |
21 |
22 |
22 QT_BEGIN_NAMESPACE |
23 QT_BEGIN_NAMESPACE |
23 |
24 |
24 namespace Phonon |
25 namespace Phonon |
25 { |
26 { |
26 namespace QT7 |
27 namespace QT7 |
27 { |
28 { |
28 |
29 |
29 QuickTimeMetaData::QuickTimeMetaData(QuickTimeVideoPlayer *videoPlayer) |
30 QuickTimeMetaData::QuickTimeMetaData() |
30 { |
31 { |
31 m_videoPlayer = videoPlayer; |
32 m_videoPlayer = 0; |
32 m_movieChanged = false; |
33 m_movieChanged = false; |
33 } |
34 } |
34 |
35 |
35 void QuickTimeMetaData::update() |
36 QuickTimeMetaData::~QuickTimeMetaData() |
36 { |
37 { |
|
38 } |
|
39 |
|
40 void QuickTimeMetaData::setVideo(QuickTimeVideoPlayer *videoPlayer) |
|
41 { |
|
42 m_videoPlayer = videoPlayer; |
37 m_movieChanged = true; |
43 m_movieChanged = true; |
38 m_metaData.clear(); |
44 m_metaData.clear(); |
39 } |
45 } |
40 |
46 |
41 #ifdef QUICKTIME_C_API_AVAILABLE |
47 #ifdef QUICKTIME_C_API_AVAILABLE |
139 } |
145 } |
140 } |
146 } |
141 |
147 |
142 #endif // QUICKTIME_C_API_AVAILABLE |
148 #endif // QUICKTIME_C_API_AVAILABLE |
143 |
149 |
144 void QuickTimeMetaData::guessMetaDataForCD() |
150 void QuickTimeMetaData::readMetaData() |
145 { |
151 { |
146 QString album = QFileInfo(m_videoPlayer->movieCompactDiscPath()).fileName(); |
152 if (!m_videoPlayer) |
147 QString title = QFileInfo(m_videoPlayer->currentTrackPath()).fileName(); |
153 return; |
148 title = title.left(title.lastIndexOf('.')); |
|
149 m_metaData.insert(QLatin1String("ALBUM"), album); |
|
150 m_metaData.insert(QLatin1String("TITLE"), title); |
|
151 m_metaData.insert(QLatin1String("TRACKNUMBER"), QString::number(m_videoPlayer->currentTrack())); |
|
152 } |
|
153 |
|
154 void QuickTimeMetaData::readMetaDataFromMovie() |
|
155 { |
|
156 QMultiMap<QString, QString> metaMap; |
154 QMultiMap<QString, QString> metaMap; |
157 |
155 |
158 #ifdef QUICKTIME_C_API_AVAILABLE |
156 #ifdef QUICKTIME_C_API_AVAILABLE |
159 QTMetaDataRef metaDataRef; |
157 QTMetaDataRef metaDataRef; |
160 OSStatus err = QTCopyMovieMetaData([m_videoPlayer->qtMovie() quickTimeMovie], &metaDataRef); |
158 OSStatus err = QTCopyMovieMetaData([m_videoPlayer->qtMovie() quickTimeMovie], &metaDataRef); |
161 BACKEND_ASSERT2(err == noErr, "Could not read QuickTime meta data", NORMAL_ERROR) |
159 BACKEND_ASSERT2(err == noErr, "Could not read QuickTime meta data", NORMAL_ERROR) |
162 |
160 |
163 readFormattedData(metaDataRef, kQTMetaDataStorageFormatUserData, metaMap); |
161 readFormattedData(metaDataRef, kQTMetaDataStorageFormatUserData, metaMap); |
164 readFormattedData(metaDataRef, kQTMetaDataStorageFormatQuickTime, metaMap); |
162 readFormattedData(metaDataRef, kQTMetaDataStorageFormatQuickTime, metaMap); |
175 m_metaData.insert(QLatin1String("GENRE"), metaMap.value(QLatin1String("gnre"))); |
173 m_metaData.insert(QLatin1String("GENRE"), metaMap.value(QLatin1String("gnre"))); |
176 m_metaData.insert(QLatin1String("TRACKNUMBER"), metaMap.value(QLatin1String("trk"))); |
174 m_metaData.insert(QLatin1String("TRACKNUMBER"), metaMap.value(QLatin1String("trk"))); |
177 m_metaData.insert(QLatin1String("DESCRIPTION"), metaMap.value(QLatin1String("des"))); |
175 m_metaData.insert(QLatin1String("DESCRIPTION"), metaMap.value(QLatin1String("des"))); |
178 } |
176 } |
179 |
177 |
180 void QuickTimeMetaData::readMetaData() |
|
181 { |
|
182 if (!m_videoPlayer) |
|
183 return; |
|
184 |
|
185 if (m_videoPlayer->mediaSource().type() == Phonon::MediaSource::Disc) |
|
186 guessMetaDataForCD(); |
|
187 else |
|
188 readMetaDataFromMovie(); |
|
189 } |
|
190 |
|
191 QMultiMap<QString, QString> QuickTimeMetaData::metaData() |
178 QMultiMap<QString, QString> QuickTimeMetaData::metaData() |
192 { |
179 { |
193 if (m_videoPlayer && m_videoPlayer->hasMovie() && m_movieChanged) |
180 if (m_videoPlayer && m_videoPlayer->hasMovie() && m_movieChanged) |
194 readMetaData(); |
181 readMetaData(); |
195 return m_metaData; |
182 return m_metaData; |