79 } |
79 } |
80 |
80 |
81 EXPORT_C void CMMAVideoUrlPlayer::StartL() |
81 EXPORT_C void CMMAVideoUrlPlayer::StartL() |
82 { |
82 { |
83 __ASSERT_DEBUG(iPlayerDelegate != NULL, User::Invariant()); |
83 __ASSERT_DEBUG(iPlayerDelegate != NULL, User::Invariant()); |
84 LOG( EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::StartL() +"); |
84 LOG(EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::StartL() +"); |
85 iPlayerDelegate->StartL(); |
85 iPlayerDelegate->StartL(); |
86 LOG( EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::StartL() -"); |
86 LOG(EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::StartL() -"); |
87 } |
87 } |
88 |
88 |
89 EXPORT_C void CMMAVideoUrlPlayer::StopL(TBool aPostEvent) |
89 EXPORT_C void CMMAVideoUrlPlayer::StopL(TBool aPostEvent) |
90 { |
90 { |
91 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::StopL "); |
91 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::StopL "); |
92 __ASSERT_DEBUG(iPlayerDelegate != NULL, User::Invariant()); |
92 __ASSERT_DEBUG(iPlayerDelegate != NULL, User::Invariant()); |
93 iPlayerDelegate->StopL(aPostEvent); |
93 iPlayerDelegate->StopL(aPostEvent); |
94 } |
94 } |
95 |
95 |
96 EXPORT_C void CMMAVideoUrlPlayer::GetMediaTime(TInt64* aMediaTime) |
96 EXPORT_C void CMMAVideoUrlPlayer::GetMediaTime(TInt64* aMediaTime) |
97 { |
97 { |
98 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime +"); |
98 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime +"); |
99 if (iPlayerDelegate) |
99 if (iPlayerDelegate) |
100 { |
100 { |
101 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime .iPlayerDelegate->GetMediaTime "); |
101 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime .iPlayerDelegate->GetMediaTime "); |
102 iPlayerDelegate->GetMediaTime(aMediaTime); |
102 iPlayerDelegate->GetMediaTime(aMediaTime); |
103 } |
103 } |
104 else |
104 else |
105 { |
105 { |
106 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime Not found "); |
106 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime Not found "); |
107 *aMediaTime = KErrNotFound; |
107 *aMediaTime = KErrNotFound; |
108 } |
108 } |
109 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime -"); |
109 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::GetMediaTime -"); |
110 } |
110 } |
111 |
111 |
112 EXPORT_C void CMMAVideoUrlPlayer::RealizeL() |
112 EXPORT_C void CMMAVideoUrlPlayer::RealizeL() |
113 { |
113 { |
114 CMMAPlayer::RealizeL(); // Changes state to ERealized |
114 CMMAPlayer::RealizeL(); // Changes state to ERealized |
119 { |
119 { |
120 const TUint KConnectionTreshold(1); |
120 const TUint KConnectionTreshold(1); |
121 TUint connectIap((TUint)KUseDefaultIap); |
121 TUint connectIap((TUint)KUseDefaultIap); |
122 TUint connectionCount(0); |
122 TUint connectionCount(0); |
123 User::LeaveIfError(iConnection.EnumerateConnections(connectionCount)); |
123 User::LeaveIfError(iConnection.EnumerateConnections(connectionCount)); |
124 LOG1( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::PrefetchL: connectionCount = %d", connectionCount); |
124 LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::PrefetchL: connectionCount = %d", connectionCount); |
125 if (connectionCount == KConnectionTreshold) |
125 if (connectionCount == KConnectionTreshold) |
126 { |
126 { |
127 // One active connection - find it and try using it |
127 // One active connection - find it and try using it |
128 FindActiveIap(connectionCount, connectIap); |
128 FindActiveIap(connectionCount, connectIap); |
129 } |
129 } |
130 // else No active connections try using the default one |
130 // else No active connections try using the default one |
131 LOG1( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::PrefetchL: connectIap = %d", connectIap); |
131 LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::PrefetchL: connectIap = %d", connectIap); |
132 |
132 |
133 CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(*iUrl, (TInt)connectIap); |
133 CMMFUrlParams* urlCfg = CMMFUrlParams::NewLC(*iUrl, (TInt)connectIap); |
134 CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); |
134 CBufFlat* urlCfgBuffer = urlCfg->ExternalizeToCBufFlatLC(); |
135 |
135 |
136 // Store current thread priority to give |
136 // Store current thread priority to give |
174 aActiveIap = connectionInfo().iIapId; |
174 aActiveIap = connectionInfo().iIapId; |
175 break; |
175 break; |
176 } |
176 } |
177 } |
177 } |
178 |
178 |
179 LOG1( EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::FindActiveIap: aActiveIap = %d -", aActiveIap); |
179 LOG1(EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::FindActiveIap: aActiveIap = %d -", aActiveIap); |
180 } |
180 } |
181 |
181 |
182 TBool CMMAVideoUrlPlayer::IsLiveStreamL() |
182 TBool CMMAVideoUrlPlayer::IsLiveStreamL() |
183 { |
183 { |
184 LOG( EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Checking if this is a live stream.."); |
184 LOG(EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Checking if this is a live stream.."); |
185 |
185 |
186 CMMFMetaDataEntry* currEntry = NULL; |
186 CMMFMetaDataEntry* currEntry = NULL; |
187 |
187 |
188 TInt nEntries = 0; |
188 TInt nEntries = 0; |
189 User::LeaveIfError(iController.GetNumberOfMetaDataEntries(nEntries)); |
189 User::LeaveIfError(iController.GetNumberOfMetaDataEntries(nEntries)); |
193 currEntry = iController.GetMetaDataEntryL(i); |
193 currEntry = iController.GetMetaDataEntryL(i); |
194 |
194 |
195 if ((0 == currEntry->Name().Compare(KMMALiveStreamMetaDataKeyword)) && |
195 if ((0 == currEntry->Name().Compare(KMMALiveStreamMetaDataKeyword)) && |
196 (0 == currEntry->Value().Compare(KMMALiveStreamMetaDataValue))) |
196 (0 == currEntry->Value().Compare(KMMALiveStreamMetaDataValue))) |
197 { |
197 { |
198 LOG( EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Stream is a live stream"); |
198 LOG(EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Stream is a live stream"); |
199 delete currEntry; |
199 delete currEntry; |
200 return ETrue; |
200 return ETrue; |
201 } |
201 } |
202 |
202 |
203 delete currEntry; |
203 delete currEntry; |
204 } |
204 } |
205 |
205 |
206 LOG( EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Not a live stream"); |
206 LOG(EJavaMMAPI, EInfo, "CMMAVideoUrlPlayer::IsLiveStream: Not a live stream"); |
207 return EFalse; |
207 return EFalse; |
208 } |
208 } |
209 |
209 |
210 EXPORT_C void CMMAVideoUrlPlayer::HandleEvent(const TMMFEvent& aEvent) |
210 EXPORT_C void CMMAVideoUrlPlayer::HandleEvent(const TMMFEvent& aEvent) |
211 { |
211 { |
212 LOG1( EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent 0x%X", aEvent.iEventType.iUid); |
212 LOG1(EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent 0x%X", aEvent.iEventType.iUid); |
213 ELOG1( EJavaMMAPI, "MMA:CMMAVideoUrlPlayer::HandleEvent error code: %d", aEvent.iErrorCode); |
213 ELOG1(EJavaMMAPI, "MMA:CMMAVideoUrlPlayer::HandleEvent error code: %d", aEvent.iErrorCode); |
214 RThread currentThread; |
214 RThread currentThread; |
215 |
215 |
216 if (iPlayerDelegate != NULL) |
216 if (iPlayerDelegate != NULL) |
217 { |
217 { |
218 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::HandleEvent: iPlayerDelegate != NULL"); |
218 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::HandleEvent: iPlayerDelegate != NULL"); |
219 iPlayerDelegate->HandleEvent(aEvent); |
219 iPlayerDelegate->HandleEvent(aEvent); |
220 } |
220 } |
221 else |
221 else |
222 { |
222 { |
223 LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::HandleEvent: else"); |
223 LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoUrlPlayer::HandleEvent: else"); |
224 |
224 |
225 __ASSERT_DEBUG(iPlayerDelegate == NULL, User::Invariant()); |
225 __ASSERT_DEBUG(iPlayerDelegate == NULL, User::Invariant()); |
226 TInt err = aEvent.iErrorCode; |
226 TInt err = aEvent.iErrorCode; |
227 |
227 |
228 LOG1( EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() I = %d", currentThread.Priority()); |
228 LOG1(EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() I = %d", currentThread.Priority()); |
229 |
229 |
230 // Lower thread priority to give more CPU time to Java-threads |
230 // Lower thread priority to give more CPU time to Java-threads |
231 // i.e. current thread has one increment higher priority than |
231 // i.e. current thread has one increment higher priority than |
232 // EPriorityNormal |
232 // EPriorityNormal |
233 if (aEvent.iEventType == KMMFEventCategoryVideoOpenComplete && |
233 if (aEvent.iEventType == KMMFEventCategoryVideoOpenComplete && |
234 err == KErrNone) |
234 err == KErrNone) |
235 { |
235 { |
236 currentThread.SetPriority(EPriorityNormal); |
236 currentThread.SetPriority(EPriorityNormal); |
237 } |
237 } |
238 |
238 |
239 LOG1( EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() II = %d", currentThread.Priority()); |
239 LOG1(EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() II = %d", currentThread.Priority()); |
240 |
240 |
241 if (aEvent.iEventType == KMMFEventCategoryVideoPrepareComplete) |
241 if (aEvent.iEventType == KMMFEventCategoryVideoPrepareComplete) |
242 { |
242 { |
243 // Restore original thread priority |
243 // Restore original thread priority |
244 currentThread.SetPriority(iOrigPriority); |
244 currentThread.SetPriority(iOrigPriority); |
245 LOG1( EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() III = %d", currentThread.Priority()); |
245 LOG1(EJavaMMAPI, EInfo, "MMA:CMMAVideoUrlPlayer::HandleEvent: currentThread.Priority() III = %d", currentThread.Priority()); |
246 |
246 |
247 // NotCompleteVideoError is not considered as an error condition, instead it indicates |
247 // NotCompleteVideoError is not considered as an error condition, instead it indicates |
248 // that some elements of the media cannot be played (e.g. video OR audio) |
248 // that some elements of the media cannot be played (e.g. video OR audio) |
249 if (err != KErrNone && err != KNotCompleteVideoError) |
249 if (err != KErrNone && err != KNotCompleteVideoError) |
250 { |
250 { |