// ---------------------------------------------------------------------------- // Get URI array with stores // ---------------------------------------------------------------------------- CVPbkContactStoreUriArray* CContactMatcher::GetStoreArrayLC( const TDesC& (* const aFuncPtrs[])() ) { CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC(); // Add stores for(TInt i = 0; aFuncPtrs[i]; i++) { TVPbkContactStoreUriPtr uriPtr(aFuncPtrs[i]()); uriArray->AppendL(uriPtr); } return uriArray; }
TInt XAPlaySessionImpl::load(const TDesC& aURI) { TInt retVal; XAresult xaRes; XAEngineItf engineItf; XADynamicSourceItf dynamicSourceItf; XAboolean required[MAX_NUMBER_INTERFACES]; XAInterfaceID iidArray[MAX_NUMBER_INTERFACES]; XAuint32 noOfInterfaces = 0; TInt i; XAmillisecond dur(0); TPtr8 uriPtr(0,0,0); TPtr8 mimeTypePtr(0,0,0); #ifdef USE_VIDEOPLAYERUTILITY TRAP(m_VPError, mVideoPlayUtil->OpenFileL(_L("C:\\data\\test.3gp"))); if (m_VPError) return 0; if(!mActiveSchedulerWait->IsStarted()) mActiveSchedulerWait->Start(); if (m_VPError) return 0; mVideoPlayUtil->Prepare(); if(!mActiveSchedulerWait->IsStarted()) mActiveSchedulerWait->Start(); return 0; #endif delete mURIName; mURIName = NULL; TRAP(retVal, mURIName = HBufC8::NewL(aURI.Length()+1)); RET_ERR_IF_ERR(retVal); uriPtr.Set(mURIName->Des()); // This has to be done here since we can not destroy the Player // in the Resource Lost callback. if (mbMediaPlayerUnrealized) { if (mMOPlayer) { (*mMOPlayer)->Destroy(mMOPlayer); mMOPlayer = NULL; } } //py uri name into local variable //TODO fix copy issue from 16 bit to 8 bit uriPtr.Copy(aURI); //If media player object already exists, just switch source //using dynamic source interface if (mMOPlayer && mPlayItf) { dynamicSourceItf = NULL; xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_DYNAMICSOURCE, &dynamicSourceItf); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); //Setup the data source //TODO Hard coded locator type mUri.locatorType = XA_DATALOCATOR_URI; //append zero terminator to end of URI mUri.URI = (XAchar*) uriPtr.PtrZ(); //TODO Hard coded locator type mMime.containerType = XA_CONTAINERTYPE_WAV; //TODO Hard coded locator type mMime.formatType = XA_DATAFORMAT_MIME; mimeTypePtr.Set(mWAVMime->Des()); mMime.mimeType = (XAchar*)mimeTypePtr.Ptr(); mDataSource.pFormat = (void*)&mMime; mDataSource.pLocator = (void*)&mUri; xaRes = (*dynamicSourceItf)->SetSource(dynamicSourceItf, &mDataSource); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); } else { // Create media player object // Setup the data source // TODO Hard coded locator type mUri.locatorType = XA_DATALOCATOR_URI; //append zero terminator to end of URI mUri.URI = (XAchar*) uriPtr.PtrZ(); //TODO Hard coded locator type mMime.containerType = XA_CONTAINERTYPE_WAV; //TODO Hard coded locator type mMime.formatType = XA_DATAFORMAT_MIME; mimeTypePtr.Set(mWAVMime->Des()); mMime.mimeType = (XAchar*)mimeTypePtr.Ptr(); mDataSource.pFormat = (void*)&mMime; mDataSource.pLocator = (void*)&mUri; //Setup the audio data sink mLocatorOutputDevice.locatorType = XA_DATALOCATOR_IODEVICE; mLocatorOutputDevice.deviceType = 6; mAudioSink.pLocator = (void*) &mLocatorOutputDevice; mAudioSink.pFormat = NULL; //Init arrays required[] and iidArray[] for (i = 0; i < MAX_NUMBER_INTERFACES; i++) { required[i] = XA_BOOLEAN_FALSE; iidArray[i] = XA_IID_NULL; } noOfInterfaces = 0; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_SEEK; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_DYNAMICSOURCE; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_METADATAEXTRACTION; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_NOKIALINEARVOLUME; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_NOKIAVOLUMEEXT; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_PREFETCHSTATUS; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_STREAMINFORMATION; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_PLAYBACKRATE; noOfInterfaces++; required[noOfInterfaces] = XA_BOOLEAN_FALSE; iidArray[noOfInterfaces] = XA_IID_VIDEOPOSTPROCESSING; noOfInterfaces++; xaRes = (*mEOEngine)->GetInterface(mEOEngine, XA_IID_ENGINE, (void**) &engineItf); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*engineItf)->CreateMediaPlayer(engineItf, &mMOPlayer, &mDataSource, NULL, &mAudioSink, &mVideoSink, NULL, NULL, noOfInterfaces, iidArray, required); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mMOPlayer)->Realize(mMOPlayer, XA_BOOLEAN_FALSE); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); mbMediaPlayerUnrealized = FALSE; xaRes = (*mMOPlayer)->RegisterCallback(mMOPlayer, MediaPlayerCallback, (void*)this); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_PLAY, &mPlayItf); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mPlayItf)->RegisterCallback(mPlayItf, PlayItfCallback, (void*)this); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mPlayItf)->SetPositionUpdatePeriod(mPlayItf, (XAmillisecond)KPlayPosUpdatePeriod); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mPlayItf)->SetCallbackEventsMask( mPlayItf, ( XA_PLAYEVENT_HEADATEND | XA_PLAYEVENT_HEADATNEWPOS | XA_PLAYEVENT_HEADMOVING ) ); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_SEEK, &mSeekItf); retVal = mapError(xaRes, ETrue); //Metadata xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_METADATAEXTRACTION, &mMetadataExtItf); if(mapError(xaRes, ETrue)==KErrNone) { mbMetadataAvailable = ETrue; setupALKeyMap(); //done only once at creation of meadia player } //volume xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_NOKIALINEARVOLUME, &mNokiaLinearVolumeItf); if(mapError(xaRes, ETrue)==KErrNone) mbVolEnabled = ETrue; xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_NOKIAVOLUMEEXT, &mNokiaVolumeExtItf); if(mapError(xaRes, ETrue)==KErrNone) mbMuteEnabled = ETrue; //buffer status xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_PREFETCHSTATUS, &mPrefetchStatusItf); if(mapError(xaRes, ETrue)==KErrNone) { mbPrefetchStatusChange = ETrue; (*mPrefetchStatusItf)->RegisterCallback(mPrefetchStatusItf, PrefetchItfCallback, (void*)this); (*mPrefetchStatusItf)->SetCallbackEventsMask(mPrefetchStatusItf, XA_PREFETCHEVENT_FILLLEVELCHANGE); } //stream information xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_STREAMINFORMATION, &mStreamInformationItf); if(mapError(xaRes, ETrue)==KErrNone) { mbStreamInfoAvailable = ETrue; mParent.cbStreamInformation(ETrue); //indicate first time (*mStreamInformationItf)->RegisterStreamChangeCallback(mStreamInformationItf, StreamInformationItfCallback, (void*)this); } //playback rate xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_PLAYBACKRATE, &mPlaybackRateItf); if(mapError(xaRes, ETrue)==KErrNone) mbPlaybackRateItfAvailable = ETrue; //videopostprocessing xaRes = (*mMOPlayer)->GetInterface(mMOPlayer, XA_IID_VIDEOPOSTPROCESSING, &mVideoPostProcessingItf); if(mapError(xaRes, ETrue)==KErrNone) mbScalable = ETrue; } if(mbMetadataAvailable) { keyMap.clear(); extendedKeyMap.clear(); setupMetaData(); //done every time source is changed } else { //send signal for seekable mParent.cbSeekableChanged(ETrue); } mCurPosition = 0; mParent.cbPositionChanged(mCurPosition); xaRes = (*mPlayItf)->GetDuration(mPlayItf, &dur); retVal = mapError(xaRes, ETrue); RET_ERR_IF_ERR(retVal); mDuration = dur; mParent.cbDurationChanged(mDuration); return retVal; }