Changeset 846 for trunk/src/3rdparty/phonon/mmf/mediaobject.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/3rdparty/phonon/mmf/mediaobject.cpp
r769 r846 35 35 36 36 #include <QDir> 37 #include <QResource> 37 38 #include <QUrl> 39 #include <cdbcols.h> 40 #include <cdblen.h> 41 #include <commdb.h> 42 #include <mmf/common/mmfcontrollerframeworkbase.h> 38 43 39 44 QT_BEGIN_NAMESPACE … … 53 58 , m_recognizerOpened(false) 54 59 , m_nextSourceSet(false) 60 , m_file(0) 61 , m_resource(0) 55 62 { 56 63 m_player.reset(new DummyPlayer()); … … 59 66 TRACE_ENTRY_0(); 60 67 61 Q_UNUSED(parent); 68 const int err = m_fileServer.Connect(); 69 QT_TRAP_THROWING(User::LeaveIfError(err)); 70 71 parent->installEventFilter(this); 72 m_iap = KUseDefaultIap; 62 73 63 74 TRACE_EXIT_0(); … … 69 80 TRACE_ENTRY_0(); 70 81 71 m_file.Close(); 82 parent()->removeEventFilter(this); 83 delete m_resource; 84 85 if (m_file) 86 m_file->Close(); 87 delete m_file; 88 72 89 m_fileServer.Close(); 73 90 m_recognizer.Close(); … … 89 106 if (KErrNone != err) { 90 107 TRACE("RApaLsSession::Connect error %d", err); 91 return false;92 }93 94 err = m_fileServer.Connect();95 if (KErrNone != err) {96 TRACE("RFs::Connect error %d", err);97 108 return false; 98 109 } … … 120 131 121 132 if (openRecognizer()) { 122 123 const QHBufC fileNameSymbian(QDir::toNativeSeparators(fileName)); 124 125 m_file.Close(); 126 TInt err = m_file.Open(m_fileServer, *fileNameSymbian, EFileRead | EFileShareReadersOnly); 127 133 TInt err = openFileHandle(fileName); 134 const QHBufC nativeFileName(QDir::toNativeSeparators(fileName)); 128 135 if (KErrNone == err) { 129 136 TDataRecognitionResult recognizerResult; 130 err = m_recognizer.RecognizeData( m_file, recognizerResult);137 err = m_recognizer.RecognizeData(*m_file, recognizerResult); 131 138 if (KErrNone == err) { 132 139 const TPtrC mimeType = recognizerResult.iDataType.Des(); 133 140 result = Utils::mimeTypeToMediaType(mimeType); 134 141 } else { 135 TRACE("RApaLsSession::RecognizeData filename %S error %d", fileNameSymbian.data(), err);142 TRACE("RApaLsSession::RecognizeData filename %S error %d", nativeFileName.data(), err); 136 143 } 137 144 } else { 138 TRACE("RFile::Open filename %S error %d", fileNameSymbian.data(), err);145 TRACE("RFile::Open filename %S error %d", nativeFileName.data(), err); 139 146 } 140 147 } … … 143 150 } 144 151 152 int MMF::MediaObject::openFileHandle(const QString &fileName) 153 { 154 TRACE_CONTEXT(MediaObject::openFileHandle, EAudioInternal); 155 const QHBufC nativeFileName(QDir::toNativeSeparators(fileName)); 156 TRACE_ENTRY("filename %S", nativeFileName.data()); 157 if (m_file) 158 m_file->Close(); 159 delete m_file; 160 m_file = 0; 161 m_file = new RFile; 162 TInt err = m_file->Open(m_fileServer, *nativeFileName, EFileRead | EFileShareReadersOrWriters); 163 return err; 164 } 165 166 MMF::MediaType MMF::MediaObject::bufferMediaType(const uchar *data, qint64 size) 167 { 168 TRACE_CONTEXT(MediaObject::bufferMediaType, EAudioInternal); 169 MediaType result = MediaTypeUnknown; 170 if (openRecognizer()) { 171 TDataRecognitionResult recognizerResult; 172 const TPtrC8 des(data, size); 173 const TInt err = m_recognizer.RecognizeData(KNullDesC, des, recognizerResult); 174 if (KErrNone == err) { 175 const TPtrC mimeType = recognizerResult.iDataType.Des(); 176 result = Utils::mimeTypeToMediaType(mimeType); 177 } else { 178 TRACE("RApaLsSession::RecognizeData error %d", err); 179 } 180 } 181 return result; 182 } 145 183 146 184 //----------------------------------------------------------------------------- … … 229 267 void MMF::MediaObject::switchToSource(const MediaSource &source) 230 268 { 269 if (m_file) 270 m_file->Close(); 271 delete m_file; 272 m_file = 0; 273 274 delete m_resource; 275 m_resource = 0; 276 231 277 createPlayer(source); 232 278 m_source = source; 233 m_player->open( m_source, m_file);279 m_player->open(); 234 280 emit currentSourceChanged(m_source); 235 281 } … … 273 319 case MediaSource::Invalid: 274 320 case MediaSource::Disc: 321 errorMessage = tr("Error opening source: type not supported"); 322 break; 323 275 324 case MediaSource::Stream: 276 errorMessage = tr("Error opening source: type not supported"); 325 { 326 const QString fileName = source.url().toLocalFile(); 327 if (fileName.startsWith(QLatin1String(":/")) || fileName.startsWith(QLatin1String("qrc://"))) { 328 Q_ASSERT(!m_resource); 329 m_resource = new QResource(fileName); 330 if (m_resource->isValid()) { 331 if (m_resource->isCompressed()) 332 errorMessage = tr("Error opening source: resource is compressed"); 333 else 334 mediaType = bufferMediaType(m_resource->data(), m_resource->size()); 335 } else { 336 errorMessage = tr("Error opening source: resource not valid"); 337 } 338 } else { 339 errorMessage = tr("Error opening source: type not supported"); 340 } 341 } 277 342 break; 278 343 … … 281 346 break; 282 347 } 348 349 if (oldPlayer) 350 oldPlayer->close(); 283 351 284 352 AbstractPlayer* newPlayer = 0; … … 372 440 } 373 441 442 RFile* MMF::MediaObject::file() const 443 { 444 return m_file; 445 } 446 447 QResource* MMF::MediaObject::resource() const 448 { 449 return m_resource; 450 } 451 374 452 //----------------------------------------------------------------------------- 375 453 // MediaNode … … 422 500 423 501 //----------------------------------------------------------------------------- 502 // IAP support 503 //----------------------------------------------------------------------------- 504 505 int MMF::MediaObject::currentIAP() const 506 { 507 return m_iap; 508 } 509 510 bool MMF::MediaObject::eventFilter(QObject *watched, QEvent *event) 511 { 512 if (event->type() == QEvent::DynamicPropertyChange ) { 513 QDynamicPropertyChangeEvent* dynamicEvent = static_cast<QDynamicPropertyChangeEvent*>(event); 514 if (dynamicEvent->propertyName() == "InternetAccessPointName") { 515 QVariant value = watched->property("InternetAccessPointName"); 516 if (value.isValid()) { 517 QString iapName = value.toString(); 518 TRAPD(err, setIAPIdFromNameL(iapName)); 519 if (err) 520 m_player->setError(tr("Failed to set requested IAP"), err); 521 } 522 } 523 } 524 return false; 525 } 526 527 void MMF::MediaObject::setIAPIdFromNameL(const QString& iapString) 528 { 529 TRACE_CONTEXT(MediaObject::getIapIdFromName, EVideoInternal); 530 TBuf<KCommsDbSvrMaxColumnNameLength> iapDes = qt_QString2TPtrC(iapString); 531 CCommsDatabase *commsDb = CCommsDatabase::NewL(EDatabaseTypeIAP); 532 CleanupStack::PushL(commsDb); 533 commsDb->ShowHiddenRecords(); 534 CCommsDbTableView *view = commsDb->OpenTableLC(TPtrC(IAP)); 535 for (TInt l = view->GotoFirstRecord(); l != KErrNotFound; l = view->GotoNextRecord()) { 536 TBuf<KCommsDbSvrMaxColumnNameLength> iapName; 537 view->ReadTextL(TPtrC(COMMDB_NAME), iapName); 538 TRACE("found IAP %S", &iapName); 539 if (iapName.CompareF(iapDes) == 0) { 540 TUint32 uiap; 541 view->ReadUintL(TPtrC(COMMDB_ID), uiap); 542 TRACE("matched IAP %S, setting m_iap %d", &iapName, uiap); 543 m_iap = uiap; 544 break; 545 } 546 } 547 CleanupStack::PopAndDestroy(2); // commsDb, view 548 } 549 550 //----------------------------------------------------------------------------- 424 551 // Other private functions 425 552 //-----------------------------------------------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.