Changeset 561 for trunk/src/3rdparty/phonon/ds9/qaudiocdreader.cpp
- Timestamp:
- Feb 11, 2010, 11:19:06 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/vendor/nokia/qt/4.6.1 merged eligible /branches/vendor/nokia/qt/current merged eligible /branches/vendor/trolltech/qt/current 3-149
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
trunk/src/3rdparty/phonon/ds9/qaudiocdreader.cpp
r2 r561 104 104 private: 105 105 HANDLE m_cddrive; 106 CDROM_TOC *m_toc;107 WaveStructure *m_waveHeader;106 CDROM_TOC m_toc; 107 WaveStructure m_waveHeader; 108 108 qint64 m_trackAddress; 109 109 }; … … 113 113 #define NB_SECTORS_READ 20 114 114 115 static AM_MEDIA_TYPE getAudioCDMediaType() 116 { 117 AM_MEDIA_TYPE mt; 118 qMemSet(&mt, 0, sizeof(AM_MEDIA_TYPE)); 119 mt.majortype = MEDIATYPE_Stream; 120 mt.subtype = MEDIASUBTYPE_WAVE; 121 mt.bFixedSizeSamples = TRUE; 122 mt.bTemporalCompression = FALSE; 123 mt.lSampleSize = 1; 124 mt.formattype = GUID_NULL; 125 return mt; 126 } 127 115 static const AM_MEDIA_TYPE audioCDMediaType = { MEDIATYPE_Stream, MEDIASUBTYPE_WAVE, TRUE, FALSE, 1, GUID_NULL, 0, 0, 0}; 116 128 117 int addressToSectors(UCHAR address[4]) 129 118 { … … 142 131 143 132 144 QAudioCDReader::QAudioCDReader(QBaseFilter *parent, QChar drive) : QAsyncReader(parent, QVector<AM_MEDIA_TYPE>() << getAudioCDMediaType()) 145 { 146 m_toc = new CDROM_TOC; 147 m_waveHeader = new WaveStructure; 148 133 QAudioCDReader::QAudioCDReader(QBaseFilter *parent, QChar drive) : QAsyncReader(parent, QVector<AM_MEDIA_TYPE>() << audioCDMediaType) 134 { 149 135 //now open the cd-drive 150 136 QString path; … … 155 141 } 156 142 157 m_cddrive = QT_WA_INLINE ( 158 ::CreateFile( (TCHAR*)path.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ), 159 ::CreateFileA( path.toLocal8Bit().constData(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ) 160 ); 161 162 qMemSet(m_toc, 0, sizeof(CDROM_TOC)); 143 m_cddrive = ::CreateFile((const wchar_t *)path.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 144 145 qMemSet(&m_toc, 0, sizeof(CDROM_TOC)); 163 146 //read the TOC 164 147 DWORD bytesRead = 0; 165 bool tocRead = ::DeviceIoControl(m_cddrive, IOCTL_CDROM_READ_TOC, 0, 0, m_toc, sizeof(CDROM_TOC), &bytesRead, 0);148 bool tocRead = ::DeviceIoControl(m_cddrive, IOCTL_CDROM_READ_TOC, 0, 0, &m_toc, sizeof(CDROM_TOC), &bytesRead, 0); 166 149 167 150 if (!tocRead) { … … 170 153 } 171 154 172 m_trackAddress = addressToSectors(m_toc ->TrackData[0].Address);173 const qint32 nbSectorsToRead = (addressToSectors(m_toc ->TrackData[m_toc->LastTrack + 1 - m_toc->FirstTrack].Address)155 m_trackAddress = addressToSectors(m_toc.TrackData[0].Address); 156 const qint32 nbSectorsToRead = (addressToSectors(m_toc.TrackData[m_toc.LastTrack + 1 - m_toc.FirstTrack].Address) 174 157 - m_trackAddress); 175 158 const qint32 dataLength = nbSectorsToRead * SECTOR_SIZE; 176 159 177 m_waveHeader ->chunksize = 4 + (8 + m_waveHeader->chunksize2) + (8 + dataLength);178 m_waveHeader ->dataLength = dataLength;160 m_waveHeader.chunksize = 4 + (8 + m_waveHeader.chunksize2) + (8 + dataLength); 161 m_waveHeader.dataLength = dataLength; 179 162 } 180 163 … … 182 165 { 183 166 ::CloseHandle(m_cddrive); 184 delete m_toc;185 delete m_waveHeader;186 187 167 } 188 168 … … 200 180 STDMETHODIMP QAudioCDReader::Length(LONGLONG *total,LONGLONG *available) 201 181 { 202 const LONGLONG length = sizeof(WaveStructure) + m_waveHeader ->dataLength;182 const LONGLONG length = sizeof(WaveStructure) + m_waveHeader.dataLength; 203 183 if (total) { 204 184 *total = length; … … 239 219 //we first copy the content of the structure 240 220 nbRead = qMin(LONG(sizeof(WaveStructure) - pos), length); 241 qMemCopy(buffer, reinterpret_cast<char*>( m_waveHeader) + pos, nbRead);221 qMemCopy(buffer, reinterpret_cast<char*>(&m_waveHeader) + pos, nbRead); 242 222 } 243 223 244 224 const LONGLONG posInTrack = pos - sizeof(WaveStructure) + nbRead; 245 const int bytesLeft = qMin(m_waveHeader ->dataLength - posInTrack, LONGLONG(length - nbRead));225 const int bytesLeft = qMin(m_waveHeader.dataLength - posInTrack, LONGLONG(length - nbRead)); 246 226 247 227 if (bytesLeft > 0) { … … 298 278 QList<qint64> ret; 299 279 ret << 0; 300 for(int i = m_toc ->FirstTrack; i <= m_toc->LastTrack ; ++i) {301 const uchar *address = m_toc ->TrackData[i].Address;280 for(int i = m_toc.FirstTrack; i <= m_toc.LastTrack ; ++i) { 281 const uchar *address = m_toc.TrackData[i].Address; 302 282 ret << ((address[0] * 60 + address[1]) * 60 + address[2]) * 1000 + address[3]*1000/75 - 2000; 303 283
Note:
See TracChangeset
for help on using the changeset viewer.