/// <summary>
        ///     通用的评估函数
        /// </summary>
        /// <param name="locate"></param>
        /// <param name="estimation"></param>
        /// <param name="autoDispose"></param>
        /// <returns>包含额外信息的位置</returns>
        internal LocateResult Estimation(LocateResult locate, Action <ExtraFaceInput> estimation, bool autoDispose = true)
        {
            if (!locate.HasFace)
            {
                return(locate);
            }

            var faceInput = new ExtraFaceInput
            {
                lFaceNumber      = locate.FaceCount,
                pFaceRectArray   = IntPtrExtensions.StructArrayToPtr(locate.Faces),
                pFaceOrientArray =
                    IntPtrExtensions.StructArrayToPtr(locate.FacesOrient.Select(code => (int)code).ToArray())
            };

            try
            {
                estimation(faceInput);

                return(locate);
            }
            finally
            {
                if (autoDispose)
                {
                    locate.Dispose();
                }

                Marshal.FreeHGlobal(faceInput.pFaceRectArray);
                Marshal.FreeHGlobal(faceInput.pFaceOrientArray);
            }
        }
 public string GetErrorMessage()
 {
     if (VlcContext.InteropManager != null &&
         VlcContext.InteropManager.ErrorHandlingInterops != null &&
         VlcContext.InteropManager.ErrorHandlingInterops.ClearError.IsAvailable)
     {
         return(IntPtrExtensions.ToStringAnsi(VlcContext.InteropManager.ErrorHandlingInterops.GetErrorMessage.Invoke()));
     }
     return(null);
 }
Пример #3
0
        /// <summary>
        /// Gets output device name
        /// </summary>
        /// <param name="outputName"></param>
        /// <param name="deviceIndex"></param>
        /// <returns></returns>
        public string GetOutputDeviceIdName(string outputName, int deviceIndex)
        {
            if (VlcContext.InteropManager != null &&
                VlcContext.InteropManager.MediaPlayerInterops != null &&
                VlcContext.InteropManager.MediaPlayerInterops.AudioInterops != null &&
                VlcContext.InteropManager.MediaPlayerInterops.AudioInterops.GetOutputDeviceIdName.IsAvailable &&
                VlcContext.HandleManager != null &&
                VlcContext.HandleManager.MediaPlayerHandles != null &&
                VlcContext.HandleManager.MediaPlayerHandles.ContainsKey(myHostVlcControl))
            {
                return(IntPtrExtensions.ToStringAnsi(VlcContext.InteropManager.MediaPlayerInterops.AudioInterops.GetOutputDeviceIdName.Invoke(VlcContext.HandleManager.MediaPlayerHandles[myHostVlcControl], outputName, deviceIndex)));
            }

            return(null);
        }
Пример #4
0
 /// <summary>
 /// Gets media metadata
 /// </summary>
 /// <param name="metadata">Media property</param>
 /// <returns>Metadata value</returns>
 private string GetMetadata(Metadatas metadata)
 {
     if (!VlcContext.HandleManager.MediasHandles.ContainsKey(myHostMediaBase))
     {
         return(null);
     }
     if (VlcContext.InteropManager.MediaInterops.IsParsed.Invoke(VlcContext.HandleManager.MediasHandles[myHostMediaBase]) == 0)
     {
         VlcContext.InteropManager.MediaInterops.Parse.Invoke(VlcContext.HandleManager.MediasHandles[myHostMediaBase]);
     }
     try
     {
         return(IntPtrExtensions.ToStringAnsi(VlcContext.InteropManager.MediaInterops.GetMetadata.Invoke(
                                                  VlcContext.HandleManager.MediasHandles[myHostMediaBase],
                                                  metadata)));
     }
     catch
     {
         return(null);
     }
 }
Пример #5
0
        private void OnVlcEvent(ref LibVlcEventArgs eventData, IntPtr userData)
        {
            switch (eventData.Type)
            {
            case EventTypes.MediaPlayerBackward:
                EventsHelper.RaiseEvent(Backward, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerBuffering:
                EventsHelper.RaiseEvent(Buffering, this, new VlcEventArgs <float>(eventData.MediaPlayerBuffering.NewCache));
                break;

            case EventTypes.MediaPlayerEncounteredError:
                EventsHelper.RaiseEvent(EncounteredError, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerEndReached:
                EventsHelper.RaiseEvent(EndReached, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerForward:
                EventsHelper.RaiseEvent(Forward, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerLengthChanged:
                EventsHelper.RaiseEvent(LengthChanged, this, new VlcEventArgs <long>(eventData.MediaPlayerLengthChanged.NewLength));
                break;

            case EventTypes.MediaPlayerMediaChanged:
                //TODO
                //EventsHelper.RaiseEvent(MediaChanged, this, new VlcEventArgs<MediaBase>(eventData.MediaPlayerMediaChanged.NewMediaHandle));
                break;

            case EventTypes.MediaPlayerNothingSpecial:
                break;

            case EventTypes.MediaPlayerOpening:
                break;

            case EventTypes.MediaPlayerPausableChanged:
                EventsHelper.RaiseEvent(PausableChanged, this, new VlcEventArgs <int>(eventData.MediaPlayerPausableChanged.NewPausable));
                break;

            case EventTypes.MediaPlayerPaused:
                EventsHelper.RaiseEvent(Paused, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerPlaying:
                EventsHelper.RaiseEvent(Playing, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerPositionChanged:
                EventsHelper.RaiseEvent(PositionChanged, this, new VlcEventArgs <float>(eventData.MediaPlayerPositionChanged.NewPosition));
                break;

            case EventTypes.MediaPlayerSeekableChanged:
                EventsHelper.RaiseEvent(SeekableChanged, this, new VlcEventArgs <int>(eventData.MediaPlayerSeekableChanged.NewSeekable));
                break;

            case EventTypes.MediaPlayerSnapshotTaken:
                EventsHelper.RaiseEvent(SnapshotTaken, this, new VlcEventArgs <string>(IntPtrExtensions.ToStringAnsi(eventData.MediaPlayerSnapshotTaken.pszFilename)));
                break;

            case EventTypes.MediaPlayerStopped:
                EventsHelper.RaiseEvent(Stopped, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case EventTypes.MediaPlayerTimeChanged:
                EventsHelper.RaiseEvent(TimeChanged, this, new VlcEventArgs <TimeSpan>(TimeSpan.FromMilliseconds(eventData.MediaPlayerTimeChanged.NewTime)));
                break;

            case EventTypes.MediaPlayerTitleChanged:
                EventsHelper.RaiseEvent(TitleChanged, this, new VlcEventArgs <long>(eventData.MediaPlayerTitleChanged.NewTitle));
                break;
            }
        }
Пример #6
0
        private void OnVlcEvent(ref libvlc_event_t eventData, IntPtr userData)
        {
            switch (eventData.type)
            {
            case libvlc_event_e.MediaPlayerBackward:
                EventsHelper.RaiseEvent(Backward, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerBuffering:
                EventsHelper.RaiseEvent(Buffering, this, new VlcEventArgs <float>(eventData.media_player_buffering.new_cache));
                break;

            case libvlc_event_e.MediaPlayerEncounteredError:
                EventsHelper.RaiseEvent(EncounteredError, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerEndReached:
                EventsHelper.RaiseEvent(EndReached, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerForward:
                EventsHelper.RaiseEvent(Forward, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerLengthChanged:
                EventsHelper.RaiseEvent(LengthChanged, this, new VlcEventArgs <long>(eventData.media_player_length_changed.new_length));
                break;

            case libvlc_event_e.MediaPlayerMediaChanged:
                //TODO
                //EventsHelper.RaiseEvent(MediaChanged, this, new VlcEventArgs<MediaBase>(eventData.media_player_media_changed.new_media));
                break;

            case libvlc_event_e.MediaPlayerNothingSpecial:

                break;

            case libvlc_event_e.MediaPlayerOpening:
                break;

            case libvlc_event_e.MediaPlayerPausableChanged:
                EventsHelper.RaiseEvent(PausableChanged, this, new VlcEventArgs <int>(eventData.media_player_pausable_changed.new_pausable));
                break;

            case libvlc_event_e.MediaPlayerPaused:
                EventsHelper.RaiseEvent(Paused, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerPositionChanged:
                EventsHelper.RaiseEvent(PositionChanged, this, new VlcEventArgs <float>(eventData.media_player_position_changed.new_position));
                break;

            case libvlc_event_e.MediaPlayerSeekableChanged:
                EventsHelper.RaiseEvent(SeekableChanged, this, new VlcEventArgs <int>(eventData.media_player_seekable_changed.new_seekable));
                break;

            case libvlc_event_e.MediaPlayerSnapshotTaken:
                EventsHelper.RaiseEvent(SnapshotTaken, this, new VlcEventArgs <string>(IntPtrExtensions.ToStringAnsi(eventData.media_player_snapshot_taken.psz_filename)));
                break;

            case libvlc_event_e.MediaPlayerStopped:
                EventsHelper.RaiseEvent(Stopped, this, new VlcEventArgs <EventArgs>(EventArgs.Empty));
                break;

            case libvlc_event_e.MediaPlayerTimeChanged:
                EventsHelper.RaiseEvent(TimeChanged, this, new VlcEventArgs <long>(eventData.media_player_time_changed.new_time));
                break;

            case libvlc_event_e.MediaPlayerTitleChanged:
                EventsHelper.RaiseEvent(TitleChanged, this, new VlcEventArgs <long>(eventData.media_player_title_changed.new_title));
                break;
            }
        }