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; }
static internal extern Status GdipRecordMetafileFromDelegateI_linux (StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, IntPtr hdc, EmfType type, ref Rectangle frameRect, MetafileFrameUnit frameUnit, [MarshalAs (UnmanagedType.LPWStr)] string description, out IntPtr metafile);
static internal extern Status GdipGetMetafileHeaderFromDelegate_linux (StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, IntPtr header);
static internal extern Status GdipCreateMetafileFromDelegate_linux (StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr metafile);
static internal extern Status GdipSaveImageToDelegate_linux (IntPtr image, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, ref Guid encoderClsID, IntPtr encoderParameters);
static internal extern Status GdipLoadImageFromDelegate_linux (StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, out IntPtr image);
private static extern void OpenMedia(IntPtr state, IntPtr streamPtr, string streamName, long streamSize, StreamReadDelegate readFn, StreamSeekDelegate seekFn, MediaOpenedDelegate mediaOpenedFn, MediaEndedDelegate mediaEndedFn, MediaFailedDelegate mediaFailedFn);