src/3rdparty/phonon/qt7/quicktimemetadata.mm
changeset 30 5dc02b23752f
parent 0 1918ee327afb
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
    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;