void UpdateMovie()
    {
        //	queue not initialised (we haven't started)
        if (mFilenameQueue == null)
        {
            return;
        }

        //	see if movie is finished to move onto next
        if (mMovie != null)
        {
            //	check duration
            var Duration    = mMovie.GetDurationMs();
            var CurrentTime = mMovie.GetTimeMs();
            if (Duration > 0 && CurrentTime >= Duration)
            {
                mMovie = null;
                System.GC.Collect();
            }
            else
            {
                //Debug.Log("Current duration: " + CurrentTime + "/" + Duration );
            }
        }

        //	need to alloc next
        if (mMovie == null)
        {
            if (mFilenameQueue.Count == 0)
            {
                Debug.Log("queue finished.... ");
                OnFinished();
                return;
            }

            var Filename = mFilenameQueue [0];
            mFilenameQueue.RemoveAt(0);

            var Params = new PopMovieParams();
            //Params.mSkipPushFrames = true;
            try {
                mMovie = new PopMovie(Filename, Params, true);

                if (mEnableDebugLog)
                {
                    mMovie.AddDebugCallback(Debug.Log);
                }
            } catch (System.Exception e) {
                Debug.LogError("Error creating movie; " + e.Message);
                if (mErrorText != null)
                {
                    mErrorText.text = e.Message;
                }
            }
        }

        if (mMovie != null)
        {
            mMovie.Update();
        }
    }