GEMediaPlayer(MediaElement owner, Uri uri) { _stream = Noesis.GUI.LoadXamlResource(uri.OriginalString); if (_stream != null) { _state = CreateState(); _streamHandle = GCHandle.Alloc(_stream); StreamReadDelegate readFn = new StreamReadDelegate(StreamRead); _readFnHandle = GCHandle.Alloc(readFn); StreamSeekDelegate seekFn = new StreamSeekDelegate(StreamSeek); _seekFnHandle = GCHandle.Alloc(seekFn); MediaOpenedDelegate mediaOpenedFn = new MediaOpenedDelegate(this.OnMediaOpened); _mediaOpenedFnHandle = GCHandle.Alloc(mediaOpenedFn); MediaEndedDelegate mediaEndedFn = new MediaEndedDelegate(this.OnMediaEnded); _mediaEndedFnHandle = GCHandle.Alloc(mediaEndedFn); MediaFailedDelegate mediaFailedFn = new MediaFailedDelegate(this.OnMediaFailed); _mediaFailedFnHandle = GCHandle.Alloc(mediaFailedFn); long streamSize = _stream.Length; OpenMedia(_state, GCHandle.ToIntPtr(_streamHandle), uri.GetPath(), streamSize, readFn, seekFn, mediaOpenedFn, mediaEndedFn, mediaFailedFn); } owner.View.Rendering += OnRendering; }
private static extern void OpenMedia(IntPtr state, IntPtr streamPtr, string streamName, long streamSize, StreamReadDelegate readFn, StreamSeekDelegate seekFn, MediaOpenedDelegate mediaOpenedFn, MediaEndedDelegate mediaEndedFn, MediaFailedDelegate mediaFailedFn);