32 // Controls container |
32 // Controls container |
33 protected ControlContainer iControls; |
33 protected ControlContainer iControls; |
34 |
34 |
35 // object for waiting native asynchronous method calls |
35 // object for waiting native asynchronous method calls |
36 protected Object iLockObject = new Object(); |
36 protected Object iLockObject = new Object(); |
37 protected Object iPrefetchLockObject = new Object(); |
37 protected Object iPrefetchLockObject = new Object(); |
38 |
38 |
39 // native error code |
39 // native error code |
40 protected int iError; |
40 protected int iError; |
41 |
41 |
42 protected PlayerListenerImpl iPlayerListenerImpl; |
42 protected PlayerListenerImpl iPlayerListenerImpl; |
43 |
43 |
44 private Finalizer mFinalizer; |
44 private Finalizer mFinalizer; |
45 |
45 |
46 private boolean iWaitFlag = true; |
46 private boolean iWaitFlag = true; |
47 |
47 |
48 private boolean iStartWaitFlag = true; |
48 private boolean iStartWaitFlag = true; |
49 |
49 |
50 /** |
50 /** |
51 * Constructor |
51 * Constructor |
52 * @param aPlayerHandle handle to player (CMMAPlayer) |
52 * @param aPlayerHandle handle to player (CMMAPlayer) |
181 public int getState() |
181 public int getState() |
182 { |
182 { |
183 int state = CLOSED; |
183 int state = CLOSED; |
184 if (iState != CLOSED) |
184 if (iState != CLOSED) |
185 { |
185 { |
|
186 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : before _getState() "); |
186 state = _getState(ManagerImpl.getEventSource(), iPlayerHandle); |
187 state = _getState(ManagerImpl.getEventSource(), iPlayerHandle); |
187 } |
188 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : after _getState() "); |
|
189 } |
|
190 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"+ PlayerIMPl.getState() "); |
188 return state; |
191 return state; |
189 } |
192 } |
190 |
193 |
191 |
194 |
192 /** |
195 /** |
208 * From PlayerBase |
211 * From PlayerBase |
209 * @see PlayerBase |
212 * @see PlayerBase |
210 */ |
213 */ |
211 public void doPrefetch() throws MediaException |
214 public void doPrefetch() throws MediaException |
212 { |
215 { |
213 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch"); |
216 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch"); |
214 synchronized(iPrefetchLockObject) |
217 synchronized (iPrefetchLockObject) |
215 { |
218 { |
216 if (PREFETCHED == getState()) |
219 if (PREFETCHED == getState()) |
217 return; |
220 return; |
218 synchronized (iLockObject) |
221 synchronized (iLockObject) |
219 { |
|
220 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch inside try"+Thread.currentThread().getName()); |
|
221 //int retval[] = new int[1]; |
|
222 int err = _prefetch(ManagerImpl.getEventSource(), iPlayerHandle); |
|
223 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch err = " + err); |
|
224 if (err < NativeError.KErrNone) |
|
225 { |
|
226 throw new MediaException( |
|
227 "Prefetch failed, Symbian OS error: " + err); |
|
228 } |
|
229 if(iWaitFlag) |
|
230 { |
|
231 try |
|
232 { |
222 { |
233 // wait until actionCompleted( int aError ) is called |
223 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch inside try"+Thread.currentThread().getName()); |
234 iLockObject.wait(); |
224 //int retval[] = new int[1]; |
235 } |
225 int err = _prefetch(ManagerImpl.getEventSource(), iPlayerHandle); |
236 catch (InterruptedException ie) |
226 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch err = " + err); |
237 { |
227 if (err < NativeError.KErrNone) |
238 // cannot occur |
228 { |
239 } |
229 throw new MediaException( |
240 } |
230 "Prefetch failed, Symbian OS error: " + err); |
241 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch Sync end"); |
231 } |
242 } // end synchronized (iLockObject) |
232 if (iWaitFlag) |
243 } |
233 { |
|
234 try |
|
235 { |
|
236 // wait until actionCompleted( int aError ) is called |
|
237 iLockObject.wait(); |
|
238 } |
|
239 catch (InterruptedException ie) |
|
240 { |
|
241 // cannot occur |
|
242 } |
|
243 } |
|
244 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch Sync end"); |
|
245 } // end synchronized (iLockObject) |
|
246 } |
|
247 |
244 if (iError < NativeError.KErrNone) |
248 if (iError < NativeError.KErrNone) |
245 { |
249 { |
246 throw new MediaException( |
250 throw new MediaException( |
247 "Prefetch failed, Symbian OS error: " + iError); |
251 "Prefetch failed, Symbian OS error: " + iError); |
248 } |
252 } |
252 * Notify that action is completed. Called from native side. |
256 * Notify that action is completed. Called from native side. |
253 * @param aError error code |
257 * @param aError error code |
254 */ |
258 */ |
255 private void actionCompleted(int aError) |
259 private void actionCompleted(int aError) |
256 { |
260 { |
257 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"actionCompleted callback11 aError ="+ aError + " "+Thread.currentThread().getName()); |
261 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"actionCompleted callback11 aError ="+ aError + " "+Thread.currentThread().getName()); |
258 iError = aError; |
262 iError = aError; |
259 |
263 |
260 synchronized (iLockObject) |
264 synchronized (iLockObject) |
261 { |
265 { |
262 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"actionCompleted callback inside synchronized (iLockObject)"); |
266 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"actionCompleted callback inside synchronized (iLockObject)"); |
263 iLockObject.notify(); |
267 iLockObject.notify(); |
264 } |
268 } |
265 } |
269 } |
266 |
270 |
267 private void actionCompletedFile() |
271 private void actionCompletedFile() |
268 { |
272 { |
269 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : actionCompletedFile"); |
273 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : actionCompletedFile"); |
270 iWaitFlag = false; |
274 iWaitFlag = false; |
271 |
275 |
272 } |
276 } |
273 |
277 |
274 private void actionCompletedStart() |
278 private void actionCompletedStart() |
275 { |
279 { |
276 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : actionCompletedStart"); |
280 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : actionCompletedStart"); |
277 iStartWaitFlag = false; |
281 iStartWaitFlag = false; |
278 |
282 |
279 } |
283 } |
280 |
284 |
281 /** |
285 /** |
282 * From PlayerBase |
286 * From PlayerBase |
283 * @see PlayerBase |
287 * @see PlayerBase |
296 * From Player. |
300 * From Player. |
297 * @see Player |
301 * @see Player |
298 */ |
302 */ |
299 public void start() throws MediaException |
303 public void start() throws MediaException |
300 { |
304 { |
301 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : start()"); |
305 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : start()"); |
302 prefetch(); |
306 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : start() outside if(iSPrefetchOngoing)"); |
303 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, start, state = "+getState()); |
307 prefetch(); |
304 // Only preteched player may be started. If player is already started |
308 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, start, state = "+getState()); |
305 // this method returns silently. |
309 // Only preteched player may be started. If player is already started |
306 if (getState() == PREFETCHED) |
310 // this method returns silently. |
307 { |
311 if (getState() == PREFETCHED) |
308 synchronized (iLockObject) |
312 { |
309 { |
313 synchronized (iLockObject) |
310 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start() thread is =" +Thread.currentThread().getName()); |
314 { |
311 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start()"); |
315 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start() thread is =" +Thread.currentThread().getName()); |
312 int err = _start(ManagerImpl.getEventSource(), iPlayerHandle); |
316 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start()"); |
313 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start( ) returned : err = "+err); |
317 int err = _start(ManagerImpl.getEventSource(), iPlayerHandle); |
314 if (err < NativeError.KErrNone) |
318 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl, before calling native _start( ) returned : err = "+err); |
315 { |
319 if (err < NativeError.KErrNone) |
316 throw new MediaException( |
320 { |
317 "Start failed, Symbian OS error: " + err); |
|
318 } |
|
319 if (iError < NativeError.KErrNone) |
|
320 { |
|
321 throw new MediaException( |
321 throw new MediaException( |
322 "Start failed, Symbian OS error: " + iError); |
322 "Start failed, Symbian OS error: " + err); |
323 } |
323 } |
324 if(iStartWaitFlag) |
324 if (iError < NativeError.KErrNone) |
325 { |
|
326 try |
|
327 { |
325 { |
328 // wait until actionCompleted( int aError ) is called |
326 throw new MediaException( |
329 iLockObject.wait(); // only for tck run |
327 "Start failed, Symbian OS error: " + iError); |
330 } |
328 } |
331 catch (InterruptedException ie) |
329 if (iStartWaitFlag) |
332 { |
330 { |
333 // cannot occur |
331 try |
334 } |
332 { |
335 |
333 // wait until actionCompleted( int aError ) is called |
336 } |
334 iLockObject.wait(); // only for tck run |
337 } |
335 } |
338 } |
336 catch (InterruptedException ie) |
|
337 { |
|
338 // cannot occur |
|
339 } |
|
340 |
|
341 } |
|
342 } |
|
343 } |
339 } |
344 } |
340 |
345 |
341 /** |
346 /** |
342 * From PlayerBase |
347 * From PlayerBase |
343 * @see PlayerBase |
348 * @see PlayerBase |
364 * From PlayerBase |
369 * From PlayerBase |
365 * @see PlayerBase |
370 * @see PlayerBase |
366 */ |
371 */ |
367 public void doClose() |
372 public void doClose() |
368 { |
373 { |
369 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doclose() 1"); |
374 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doclose() 1"); |
370 _close(ManagerImpl.getEventSource(), iPlayerHandle); |
375 _close(ManagerImpl.getEventSource(), iPlayerHandle); |
371 |
376 |
372 if (iPlayerHandle > NativeError.KErrNone) // construction has succeed |
377 if (iPlayerHandle > NativeError.KErrNone) // construction has succeed |
373 { |
378 { |
374 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doclose() 2"); |
379 Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doclose() 2"); |