SurfaceCallback.cs 1.38 KB
Newer Older
1
using System;
2
using LibVLCSharp.Shared;
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
using Org.Videolan.Libvlc;

namespace LibVLCSharp.Platforms.Android
{
    public class SurfaceCallback : Java.Lang.Object, AWindow.ISurfaceCallback
    {
        static readonly object _locker = new object();
        readonly MediaPlayer _mp;

        public SurfaceCallback() { }

        public SurfaceCallback(MediaPlayer mp)
        {
            _mp = mp;
        }

        public void OnSurfacesCreated(AWindow vout)
        {
            var play = false;
            var enableVideo = false;

            lock (_locker)
            {
                if (!_mp.IsPlaying /* && mp.PlayRequested*/)
                {
                    play = true;
                }
                else if (_mp.VoutCount == 0)
                    enableVideo = true;
            }
            if (play)
                _mp.Play();
            else if (enableVideo)
            {
                lock (_locker)
                {
                    _mp.SetVideoTrack(0);
                }
            }
        }

        public void OnSurfacesDestroyed(AWindow vout)
        {
            var disableVideo = false;
            lock (_locker)
            {
                if (_mp.VoutCount > 0)
                    disableVideo = true;
            }
            if (disableVideo)
            {
                //_mp.VideoTrackEnabled = false;
            }
        }
    }
}