javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerImpl.java
changeset 26 dc7c549001d5
parent 23 98ccebc37403
child 72 1f0034e370aa
equal deleted inserted replaced
23:98ccebc37403 26:dc7c549001d5
    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");