private bool StartMovie(bool loop, bool allowYUV)
    {
        Loop = loop;

        if (_movieHandle < 0)
        {
            _movieHandle = AVProQuickTimePlugin.GetInstanceHandle();
        }

#if AVPRO_UNITY_4_X
        AVProQuickTimePlugin.SetActive(_movieHandle, IsActive);
#endif

        bool sourceValid = false;
        bool loadedOK    = false;
        switch (_movieSource)
        {
        case AVProQuickTimePlugin.MovieSource.LocalFile:
            if (!string.IsNullOrEmpty(Filename))
            {
                sourceValid = true;

                byte[] utf8 = Encoding.UTF8.GetBytes(Filename);

                int    size = Marshal.SizeOf(typeof(byte)) * (utf8.Length + 1);
                IntPtr ptr  = Marshal.AllocHGlobal(size);
                Marshal.Copy(utf8, 0, ptr, utf8.Length);
                Marshal.WriteByte(ptr, utf8.Length, 0);

                loadedOK = AVProQuickTimePlugin.LoadMovieFromFile(_movieHandle, ptr, Loop, allowYUV);

                Marshal.FreeHGlobal(ptr);
            }
            break;

        case AVProQuickTimePlugin.MovieSource.URL:
            if (!string.IsNullOrEmpty(Filename))
            {
                sourceValid = true;
                loadedOK    = AVProQuickTimePlugin.LoadMovieFromURL(_movieHandle, Filename, Loop, allowYUV);
            }
            break;

        case AVProQuickTimePlugin.MovieSource.Memory:
            sourceValid = true;
            loadedOK    = AVProQuickTimePlugin.LoadMovieFromMemory(_movieHandle, _movieMemoryPtr, _movieMemoryLength, Loop, allowYUV);
            break;
        }

        if (sourceValid)
        {
            if (loadedOK)
            {
                PlayState = PlaybackState.Loading;
            }
            else
            {
                Debug.LogWarning("[AVProQuickTime] Movie failed to load");
                Close();
            }
        }
        else
        {
            Debug.LogWarning("[AVProQuickTime] Invalid movie file specified");
            Close();
        }
        return(_movieHandle >= 0);
    }