From 2e597b189a7f0214b4dae87aeee250537e5574ad Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 29 Jul 2023 08:00:38 +0300 Subject: [PATCH 1/7] Add flags for Seek command --- Nickvision.MPVSharp/Client.cs | 8 +++- Nickvision.MPVSharp/SeekFlags.cs | 64 ++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 Nickvision.MPVSharp/SeekFlags.cs diff --git a/Nickvision.MPVSharp/Client.cs b/Nickvision.MPVSharp/Client.cs index fafe7ea..ef2caf0 100644 --- a/Nickvision.MPVSharp/Client.cs +++ b/Nickvision.MPVSharp/Client.cs @@ -556,11 +556,15 @@ public void RequestLogMessages(MPVLogLevel logLevel) /// /// Time in seconds /// Seek flags - public void Seek(double target, string flags = "relative") + public void Seek(double target, SeekFlags flags = SeekFlags.Relative | SeekFlags.Keyframes) { + if ((flags.HasFlag(SeekFlags.Relative) && flags.HasFlag(SeekFlags.Absolute)) || (flags.HasFlag(SeekFlags.Keyframes) && flags.HasFlag(SeekFlags.Exact))) + { + throw new ClientException(MPVError.InvalidParameter); + } try { - Command(new []{"seek", target.ToString(CultureInfo.InvariantCulture), flags}); + Command(new []{"seek", target.ToString(CultureInfo.InvariantCulture), flags.FlagsToString()}); } catch (ClientException) { } // Seek fails if nothing is playing, we don't want a crash } diff --git a/Nickvision.MPVSharp/SeekFlags.cs b/Nickvision.MPVSharp/SeekFlags.cs new file mode 100644 index 0000000..4e8d6f7 --- /dev/null +++ b/Nickvision.MPVSharp/SeekFlags.cs @@ -0,0 +1,64 @@ +using System; +using System.Text; + +namespace Nickvision.MPVSharp; + +/// +/// Flags for Client.Seek method +/// +[Flags] +public enum SeekFlags +{ + /// + /// Seek relative to current position + /// + /// Incompatible with Absolute + Relative = 1, + /// + /// Seek to a given position + /// + /// Incompatible with Relative + Absolute = 2, + /// + /// Treat seek value as percent, not seconds + /// + Percent = 4, + /// + /// Fast seek, restart at keyframe boundaries + /// + /// Incompatible with Exact + Keyframes = 8, + /// + /// Slow seek, do precise seek + /// + /// Incompatible with Keyframes + Exact = 16 +} + +/// +/// Extensions for SeekFlags +/// +public static class SeekFlagsExtensions +{ + /// + /// Convert SeekFlags to a string acceptable by MPV + /// + public static string FlagsToString(this SeekFlags flags) + { + var result = new StringBuilder(); + result.Append(flags.HasFlag(SeekFlags.Absolute) ? "absolute" : "relative"); + if (flags.HasFlag(SeekFlags.Percent)) + { + result.Append("-percent"); + } + if (flags.HasFlag(SeekFlags.Keyframes)) + { + result.Append("+keyframes"); + } + else if (flags.HasFlag(SeekFlags.Exact)) + { + result.Append("+exact"); + } + return result.ToString(); + } +} \ No newline at end of file From 061bb3c80c703f08a5598dc541826e30c6b2b42a Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 29 Jul 2023 08:17:04 +0300 Subject: [PATCH 2/7] Add LoadFlags for LoadFile/LoadList --- Nickvision.MPVSharp/LoadFlags.cs | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Nickvision.MPVSharp/LoadFlags.cs diff --git a/Nickvision.MPVSharp/LoadFlags.cs b/Nickvision.MPVSharp/LoadFlags.cs new file mode 100644 index 0000000..c4c7b74 --- /dev/null +++ b/Nickvision.MPVSharp/LoadFlags.cs @@ -0,0 +1,45 @@ +using System; + +namespace Nickvision.MPVSharp; + +/// +/// Flags for Client.LoadFile and Client.LoadList methods +/// +/// +/// This is called flags to match terminology from MPV docs, +/// you can't use multiple values at once like with SeekFlags +/// +public enum LoadFlags +{ + /// + /// Stop playback and play new file immediately + /// + Replace = 0, + /// + /// Append the file to the playlist + /// + Append, + /// + /// Append the file, and if nothing is currently playing, start playback + /// + AppendPlay +} + +/// +/// Extensions for LoadFlags +/// +public static class LoadFlagsExtensions +{ + /// + /// Convert LoadFlags to a string acceptable by MPV + /// + public static string FlagsToString(this LoadFlags flags) + { + return flags switch + { + LoadFlags.Replace => "replace", + LoadFlags.Append => "append", + _ => "append-play" + }; + } +} \ No newline at end of file From 61593a35ee459c383f91421d985cdcb51bb58b54 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 29 Jul 2023 08:17:15 +0300 Subject: [PATCH 3/7] Add Client.LoadList --- Nickvision.MPVSharp/Client.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Nickvision.MPVSharp/Client.cs b/Nickvision.MPVSharp/Client.cs index ef2caf0..729742d 100644 --- a/Nickvision.MPVSharp/Client.cs +++ b/Nickvision.MPVSharp/Client.cs @@ -573,8 +573,15 @@ public void Seek(double target, SeekFlags flags = SeekFlags.Relative | SeekFlags /// Load a file from path or URL /// /// File path or URL - /// Loadfile flags - public void LoadFile(string url, string flags = "replace") => Command(new []{"loadfile", url, flags}); + /// Load flags + public void LoadFile(string url, LoadFlags flags = LoadFlags.Replace) => Command(new []{"loadfile", url, flags.FlagsToString()}); + + /// + /// Load a playlist from path or URL + /// + /// Playlist path or URL + /// Load flags + public void LoadList(string url, LoadFlags flags = LoadFlags.Replace) => Command(new []{"loadlist", url, flags.FlagsToString()}); /// /// Play next file in playlist From e24a347188bde3a7fac095959ab4ff733fb695de Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 29 Jul 2023 23:32:00 +0300 Subject: [PATCH 4/7] Make client handle public, add support for weak clients --- Nickvision.MPVSharp/Client.cs | 2 +- Nickvision.MPVSharp/Internal/MPVClient.cs | 107 ++++++++++++---------- 2 files changed, 58 insertions(+), 51 deletions(-) diff --git a/Nickvision.MPVSharp/Client.cs b/Nickvision.MPVSharp/Client.cs index 729742d..ab4c0f8 100644 --- a/Nickvision.MPVSharp/Client.cs +++ b/Nickvision.MPVSharp/Client.cs @@ -544,7 +544,7 @@ public void RequestLogMessages(MPVLogLevel logLevel) /// Create OpenGLRenderContext /// /// New render context - public RenderContext CreateRenderContext() => new RenderContext(_handle); + public RenderContext CreateRenderContext() => new RenderContext(Handle); /// /// Toggle paused state diff --git a/Nickvision.MPVSharp/Internal/MPVClient.cs b/Nickvision.MPVSharp/Internal/MPVClient.cs index 782245b..11a450a 100644 --- a/Nickvision.MPVSharp/Internal/MPVClient.cs +++ b/Nickvision.MPVSharp/Internal/MPVClient.cs @@ -18,6 +18,8 @@ public partial class MPVClient : ICloneable // Create client [LibraryImport("libmpv.so.2", StringMarshalling = StringMarshalling.Utf8)] private static partial nint mpv_create_client(nint handle, string? name); + [LibraryImport("libmpv.so.2", StringMarshalling = StringMarshalling.Utf8)] + private static partial nint mpv_create_weak_client(nint handle, string? name); // Init client [LibraryImport("libmpv.so.2")] private static partial MPVError mpv_initialize(nint handle); @@ -115,33 +117,38 @@ public partial class MPVClient : ICloneable private const int LC_NUMERIC = 1; - protected readonly nint _handle; - + /// + /// MPV client handle + /// + public nint Handle { get; } /// /// The name of this client handle. /// Every client has its own unique name. /// - public string Name => mpv_client_name(_handle); + public string Name => mpv_client_name(Handle); /// /// The ID of this client handle. /// Every client has its own unique ID. /// - public long Id => mpv_client_id(_handle); + public long Id => mpv_client_id(Handle); /// /// Construct MPVClient /// /// Optional handle to create client for the same player core /// Optional unique client name + /// Whether the new client should be weak or not. + /// If true, the created handle is treated as a weak reference. If all handles + /// referencing a core are weak references, the core is automatically destroyed. /// Thrown if failed to create mpvHandle - public MPVClient(nint? handle = null, string? name = null) + public MPVClient(nint? handle = null, string? name = null, bool weak = false) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { setlocale(LC_NUMERIC, "C"); } - _handle = mpv_create_client(handle ?? IntPtr.Zero, name); - if (_handle == IntPtr.Zero) + Handle = weak ? mpv_create_weak_client(handle!.Value, name) : mpv_create_client(handle ?? IntPtr.Zero, name); + if (Handle == IntPtr.Zero) { throw new Exception("Failed to create MPV client"); } @@ -151,20 +158,20 @@ public MPVClient(nint? handle = null, string? name = null) /// Clone object, creating new MPVClient for the same player core /// /// MPVClient as object - public object Clone() => new MPVClient(_handle); + public object Clone() => new MPVClient(Handle); /// /// Load a config file /// /// Absolute path to config /// Error code - public MPVError LoadConfigFile(string path) => mpv_load_config_file(_handle, path); + public MPVError LoadConfigFile(string path) => mpv_load_config_file(Handle, path); /// /// Get internal time /// /// Time in microseconds - public long GetTimeUs() => mpv_get_time_us(_handle); + public long GetTimeUs() => mpv_get_time_us(Handle); /// /// Initialize an uninitialized mpv instance. @@ -176,7 +183,7 @@ public MPVClient(nint? handle = null, string? name = null) /// config, config-dir, input-conf, load-scripts, script, /// player-operation-mode, input-app-events (OSX), all encoding mode options /// - public MPVError Initialize() => mpv_initialize(_handle); + public MPVError Initialize() => mpv_initialize(Handle); /// /// Send a command to the player. @@ -188,7 +195,7 @@ public MPVError Command(string[] command) var nullTermArray = new string?[command.Length + 1]; Array.Copy(command, nullTermArray, command.Length); nullTermArray[^1] = null; - return mpv_command(_handle, nullTermArray); + return mpv_command(Handle, nullTermArray); } /// @@ -197,7 +204,7 @@ public MPVError Command(string[] command) /// MPVNode with NodeList containing positional or named arguments. /// MPVNode containing result on command success. Should be freed with MPVNode.FreeNodeContents(). /// Error code - public MPVError CommandNode(MPVNode command, out MPVNode result) => mpv_command_node(_handle, ref command, out result); + public MPVError CommandNode(MPVNode command, out MPVNode result) => mpv_command_node(Handle, ref command, out result); /// /// Send a command to the player and return the result. @@ -210,7 +217,7 @@ public MPVError CommandRet(string[] command, out MPVNode node) var nullTermArray = new string?[command.Length + 1]; Array.Copy(command, nullTermArray, command.Length); nullTermArray[^1] = null; - return mpv_command_ret(_handle, nullTermArray, out node); + return mpv_command_ret(Handle, nullTermArray, out node); } /// @@ -218,7 +225,7 @@ public MPVError CommandRet(string[] command, out MPVNode node) /// /// A command string /// Error code - public MPVError CommandString(string command) => mpv_command_string(_handle, command); + public MPVError CommandString(string command) => mpv_command_string(Handle, command); /// /// Same as Command(), but run the command asynchronously. @@ -231,7 +238,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) var nullTermArray = new string?[command.Length + 1]; Array.Copy(command, nullTermArray, command.Length); nullTermArray[^1] = null; - return mpv_command_async(_handle, replyUserdata, nullTermArray); + return mpv_command_async(Handle, replyUserdata, nullTermArray); } /// @@ -240,32 +247,32 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Reply Id /// MPVNode with NodeList containing positional or named arguments /// Error code - public MPVError CommandNodeAsync(ulong replyUserdata, MPVNode command) => mpv_command_node_async(_handle, replyUserdata, ref command); + public MPVError CommandNodeAsync(ulong replyUserdata, MPVNode command) => mpv_command_node_async(Handle, replyUserdata, ref command); /// /// Signal to all async requests with the matching Id to abort. /// /// Reply Id - public void AbortAsyncCommand(ulong replyUserdata) => mpv_abort_async_command(_handle, replyUserdata); + public void AbortAsyncCommand(ulong replyUserdata) => mpv_abort_async_command(Handle, replyUserdata); /// /// Wait for an event or until timeout /// /// Timeout in seconds /// Error code - public MPVEvent WaitEvent(double eventTimeout) => Marshal.PtrToStructure(mpv_wait_event(_handle, eventTimeout)); + public MPVEvent WaitEvent(double eventTimeout) => Marshal.PtrToStructure(mpv_wait_event(Handle, eventTimeout)); /// /// Interrupt the current WaitEvent() call /// - public void WakeUp() => mpv_wakeup(_handle); + public void WakeUp() => mpv_wakeup(Handle); /// /// Set a custom function that should be called when there are new events /// /// Callback function /// Pointer to arbitrary data to pass to callback - public void SetWakeUpCallback(WakeUpCallback callback, nint data) => mpv_set_wakeup_callback(_handle, callback, data); + public void SetWakeUpCallback(WakeUpCallback callback, nint data) => mpv_set_wakeup_callback(Handle, callback, data); /// /// Add property to watch using events @@ -274,14 +281,14 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property MPVFormat /// Optional reply Id /// Error code - public MPVError ObserveProperty(string name, MPVFormat format, ulong replyUserdata) => mpv_observe_property(_handle, replyUserdata, name, format); + public MPVError ObserveProperty(string name, MPVFormat format, ulong replyUserdata) => mpv_observe_property(Handle, replyUserdata, name, format); /// /// Undo all ObserveProperty() for given reply Id /// /// Reply Id /// Number of properties to unobserve or error code - public int UnobserveProperty(ulong replyUserdata) => mpv_unobserve_property(_handle, replyUserdata); + public int UnobserveProperty(ulong replyUserdata) => mpv_unobserve_property(Handle, replyUserdata); /// /// Set property using String format @@ -289,7 +296,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// String data /// Error code - public MPVError SetProperty(string name, string data) => mpv_set_property(_handle, name, MPVFormat.String, ref data); + public MPVError SetProperty(string name, string data) => mpv_set_property(Handle, name, MPVFormat.String, ref data); /// /// Set property using Flag format @@ -297,7 +304,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Flag data (0 or 1) /// Error code - public MPVError SetProperty(string name, int data) => mpv_set_property(_handle, name, MPVFormat.Flag, ref data); + public MPVError SetProperty(string name, int data) => mpv_set_property(Handle, name, MPVFormat.Flag, ref data); /// /// Set property using Int64 format @@ -305,7 +312,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Long int data /// Error code - public MPVError SetProperty(string name, long data) => mpv_set_property(_handle, name, MPVFormat.Int64, ref data); + public MPVError SetProperty(string name, long data) => mpv_set_property(Handle, name, MPVFormat.Int64, ref data); /// /// Set property using Double format @@ -313,7 +320,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Double data /// Error code - public MPVError SetProperty(string name, double data) => mpv_set_property(_handle, name, MPVFormat.Double, ref data); + public MPVError SetProperty(string name, double data) => mpv_set_property(Handle, name, MPVFormat.Double, ref data); /// /// Set property using Node format @@ -321,7 +328,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// MPVNode with data /// Error code - public MPVError SetProperty(string name, MPVNode data) => mpv_set_property(_handle, name, MPVFormat.Node, ref data); + public MPVError SetProperty(string name, MPVNode data) => mpv_set_property(Handle, name, MPVFormat.Node, ref data); /// /// Set property using String format @@ -338,7 +345,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Flag data (0 or 1) /// Error code - public MPVError SetPropertyAsync(ulong replyUserdata, string name, int data) => mpv_set_property_async(_handle, replyUserdata, name, MPVFormat.Flag, ref data); + public MPVError SetPropertyAsync(ulong replyUserdata, string name, int data) => mpv_set_property_async(Handle, replyUserdata, name, MPVFormat.Flag, ref data); /// /// Set property using Int64 format asynchronously @@ -347,7 +354,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Long Int data /// Error code - public MPVError SetPropertyAsync(ulong replyUserdata, string name, long data) => mpv_set_property_async(_handle, replyUserdata, name, MPVFormat.Int64, ref data); + public MPVError SetPropertyAsync(ulong replyUserdata, string name, long data) => mpv_set_property_async(Handle, replyUserdata, name, MPVFormat.Int64, ref data); /// /// Set property using Double format asynchronously @@ -356,7 +363,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Double data /// Error code - public MPVError SetPropertyAsync(ulong replyUserdata, string name, double data) => mpv_set_property_async(_handle, replyUserdata, name, MPVFormat.Double, ref data); + public MPVError SetPropertyAsync(ulong replyUserdata, string name, double data) => mpv_set_property_async(Handle, replyUserdata, name, MPVFormat.Double, ref data); /// /// Set property using String format asynchronously @@ -365,7 +372,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// String data /// Error code - public MPVError SetPropertyAsync(ulong replyUserdata, string name, string data) => mpv_set_property_async(_handle, replyUserdata, name, MPVFormat.String, ref data); + public MPVError SetPropertyAsync(ulong replyUserdata, string name, string data) => mpv_set_property_async(Handle, replyUserdata, name, MPVFormat.String, ref data); /// /// Set property using MPVNode format asynchronously @@ -374,7 +381,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// MPVNode containing data /// Error code - public MPVError SetPropertyAsync(ulong replyUserdata, string name, MPVNode data) => mpv_set_property_async(_handle, replyUserdata, name, MPVFormat.Node, ref data); + public MPVError SetPropertyAsync(ulong replyUserdata, string name, MPVNode data) => mpv_set_property_async(Handle, replyUserdata, name, MPVFormat.Node, ref data); /// /// Get property using Flag format @@ -382,7 +389,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetProperty(string name, out int data) => mpv_get_property(_handle, name, MPVFormat.Flag, out data); + public MPVError GetProperty(string name, out int data) => mpv_get_property(Handle, name, MPVFormat.Flag, out data); /// /// Get property using Int64 format @@ -390,7 +397,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetProperty(string name, out long data) => mpv_get_property(_handle, name, MPVFormat.Int64, out data); + public MPVError GetProperty(string name, out long data) => mpv_get_property(Handle, name, MPVFormat.Int64, out data); /// /// Get property using Double format @@ -398,7 +405,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetProperty(string name, out double data) => mpv_get_property(_handle, name, MPVFormat.Double, out data); + public MPVError GetProperty(string name, out double data) => mpv_get_property(Handle, name, MPVFormat.Double, out data); /// /// Get property using String format @@ -406,7 +413,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetProperty(string name, out string data) => mpv_get_property(_handle, name, MPVFormat.String, out data); + public MPVError GetProperty(string name, out string data) => mpv_get_property(Handle, name, MPVFormat.String, out data); /// /// Get property using Node format @@ -414,7 +421,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetProperty(string name, out MPVNode data) => mpv_get_property(_handle, name, MPVFormat.Node, out data); + public MPVError GetProperty(string name, out MPVNode data) => mpv_get_property(Handle, name, MPVFormat.Node, out data); /// /// Get property using String format @@ -422,7 +429,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetPropertyString(string name, out string data) => mpv_get_property(_handle, name, MPVFormat.String, out data); + public MPVError GetPropertyString(string name, out string data) => mpv_get_property(Handle, name, MPVFormat.String, out data); /// /// Get property using OSDString format @@ -430,7 +437,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// Object to write data to /// Error code - public MPVError GetPropertyOSDString(string name, out string data) => mpv_get_property(_handle, name, MPVFormat.OSDString, out data); + public MPVError GetPropertyOSDString(string name, out string data) => mpv_get_property(Handle, name, MPVFormat.OSDString, out data); /// /// Get property asynchroniously @@ -439,7 +446,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Property name /// MPVFormat for returning data /// Error code - public MPVError GetPropertyAsync(ulong replyUserdata, string name, MPVFormat format) => mpv_get_property_async(_handle, replyUserdata, name, format); + public MPVError GetPropertyAsync(ulong replyUserdata, string name, MPVFormat format) => mpv_get_property_async(Handle, replyUserdata, name, format); /// /// Set option using MPVNode format @@ -450,7 +457,7 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// /// You can't normally set options during runtime. /// - public MPVError SetOption(string name, MPVNode data) => mpv_set_option(_handle, name, MPVFormat.Node, ref data); + public MPVError SetOption(string name, MPVNode data) => mpv_set_option(Handle, name, MPVFormat.Node, ref data); /// /// Set option using String format @@ -461,14 +468,14 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// /// You can't normally set options during runtime. /// - public MPVError SetOptionString(string name, string data) => mpv_set_option_string(_handle, name, data); + public MPVError SetOptionString(string name, string data) => mpv_set_option_string(Handle, name, data); /// /// Request log messages with specified minimum log level /// /// Log level as string /// Error code - public MPVError RequestLogMessages(string logLevel) => mpv_request_log_messages(_handle, logLevel); + public MPVError RequestLogMessages(string logLevel) => mpv_request_log_messages(Handle, logLevel); /// /// Enable or disable the given event @@ -479,12 +486,12 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Event Id /// Whether the event should be enabled (1) or not (0) /// Error code - public MPVError RequestEvent(MPVEventId eid, int enabled) => mpv_request_event(_handle, eid, enabled); + public MPVError RequestEvent(MPVEventId eid, int enabled) => mpv_request_event(Handle, eid, enabled); /// /// Block until all asynchronous requests are done /// - public void WaitAsyncRequests() => mpv_wait_async_requests(_handle); + public void WaitAsyncRequests() => mpv_wait_async_requests(Handle); /// /// Register a hook handler. @@ -494,22 +501,22 @@ public MPVError CommandAsync(ulong replyUserdata, string?[] command) /// Hook name. This should be one of the documented names (see mpv manual). /// Hook priority /// Error code - public MPVError HookAdd(ulong replyUserdata, string name, int priority) => mpv_hook_add(_handle, replyUserdata, name, priority); + public MPVError HookAdd(ulong replyUserdata, string name, int priority) => mpv_hook_add(Handle, replyUserdata, name, priority); /// /// Respond to a MPVEventHook event. You must call this after you have handled the event. /// /// This must be the value of the MPVEventHook.Id field /// Error code - public MPVError HookContinue(ulong id) => mpv_hook_continue(_handle, id); + public MPVError HookContinue(ulong id) => mpv_hook_continue(Handle, id); /// /// Disconnect and destroy the client /// - public void Destroy() => mpv_destroy(_handle); + public void Destroy() => mpv_destroy(Handle); /// /// Bring down the player and all its clients /// - public void TerminateDestroy() => mpv_terminate_destroy(_handle); + public void TerminateDestroy() => mpv_terminate_destroy(Handle); } \ No newline at end of file From 8468ff4f9aa9a403583acc83f669d83b02c6ee94 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 29 Jul 2023 23:43:43 +0300 Subject: [PATCH 5/7] Update docs --- .../_site/api/Nickvision.MPVSharp.Client.html | 168 +++++++++------ .../Nickvision.MPVSharp.ClientException.html | 8 +- ...VSharp.ClientMessageReceivedEventArgs.html | 8 +- ...PVSharp.CommandReplyReceivedEventArgs.html | 12 +- ...ickvision.MPVSharp.FileEndedEventArgs.html | 16 +- ...kvision.MPVSharp.FileStartedEventArgs.html | 8 +- ...arp.GetPropertyReplyReceivedEventArgs.html | 12 +- ...ision.MPVSharp.HookTriggeredEventArgs.html | 10 +- .../api/Nickvision.MPVSharp.Internal.MPV.html | 8 +- ...vision.MPVSharp.Internal.MPVByteArray.html | 8 +- ...arp.Internal.MPVClient.WakeUpCallback.html | 4 +- ...ickvision.MPVSharp.Internal.MPVClient.html | 131 +++++------ ...on.MPVSharp.Internal.MPVEndFileReason.html | 4 +- ...Nickvision.MPVSharp.Internal.MPVError.html | 4 +- ....MPVSharp.Internal.MPVErrorExtensions.html | 6 +- ...Nickvision.MPVSharp.Internal.MPVEvent.html | 28 +-- ...VSharp.Internal.MPVEventClientMessage.html | 8 +- ...ion.MPVSharp.Internal.MPVEventCommand.html | 6 +- ...ion.MPVSharp.Internal.MPVEventEndFile.html | 14 +- ...vision.MPVSharp.Internal.MPVEventHook.html | 8 +- ...ckvision.MPVSharp.Internal.MPVEventId.html | 4 +- ....MPVSharp.Internal.MPVEventLogMessage.html | 12 +- ...on.MPVSharp.Internal.MPVEventProperty.html | 10 +- ...n.MPVSharp.Internal.MPVEventStartFile.html | 6 +- ...ickvision.MPVSharp.Internal.MPVFormat.html | 4 +- ...kvision.MPVSharp.Internal.MPVLogLevel.html | 4 +- .../Nickvision.MPVSharp.Internal.MPVNode.html | 38 ++-- ...kvision.MPVSharp.Internal.MPVNodeList.html | 14 +- ....Internal.MPVOpenGLDRMDrawSurfaceSize.html | 8 +- ...PVSharp.Internal.MPVOpenGLDRMParamsV2.html | 14 +- ...vision.MPVSharp.Internal.MPVOpenGLFBO.html | 12 +- ...ernal.MPVOpenGLInitParams.GetProcAddr.html | 4 +- ...MPVSharp.Internal.MPVOpenGLInitParams.html | 8 +- ...al.MPVRenderContext.MPVRenderUpdateFn.html | 4 +- ...on.MPVSharp.Internal.MPVRenderContext.html | 22 +- ...sion.MPVSharp.Internal.MPVRenderParam.html | 8 +- ....MPVSharp.Internal.MPVRenderParamType.html | 4 +- ...PVSharp.Internal.MPVRenderUpdateFlags.html | 4 +- ...ision.MPVSharp.Internal.OpenGLHelpers.html | 8 +- .../api/Nickvision.MPVSharp.LoadFlags.html | 154 +++++++++++++ ...ckvision.MPVSharp.LoadFlagsExtensions.html | 204 ++++++++++++++++++ ....MPVSharp.LogMessageReceivedEventArgs.html | 12 +- ...ion.MPVSharp.PropertyChangedEventArgs.html | 10 +- .../Nickvision.MPVSharp.RenderContext.html | 16 +- .../api/Nickvision.MPVSharp.SeekFlags.html | 157 ++++++++++++++ ...ckvision.MPVSharp.SeekFlagsExtensions.html | 204 ++++++++++++++++++ ...arp.SetPropertyReplyReceivedEventArgs.html | 10 +- Docfx/_site/api/Nickvision.MPVSharp.html | 23 ++ Docfx/_site/api/index.html | 2 +- Docfx/_site/api/toc.html | 12 ++ Docfx/_site/api/toc.json | 2 +- Docfx/_site/index.html | 2 +- Docfx/_site/manifest.json | 40 ++++ Docfx/_site/xrefmap.yml | 187 +++++++++++++--- 54 files changed, 1324 insertions(+), 370 deletions(-) create mode 100644 Docfx/_site/api/Nickvision.MPVSharp.LoadFlags.html create mode 100644 Docfx/_site/api/Nickvision.MPVSharp.LoadFlagsExtensions.html create mode 100644 Docfx/_site/api/Nickvision.MPVSharp.SeekFlags.html create mode 100644 Docfx/_site/api/Nickvision.MPVSharp.SeekFlagsExtensions.html diff --git a/Docfx/_site/api/Nickvision.MPVSharp.Client.html b/Docfx/_site/api/Nickvision.MPVSharp.Client.html index d9953f6..0b2df7b 100644 --- a/Docfx/_site/api/Nickvision.MPVSharp.Client.html +++ b/Docfx/_site/api/Nickvision.MPVSharp.Client.html @@ -17,7 +17,7 @@ - + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+ Enum LoadFlags + +

+ +
+
Namespace
Nickvision.MPVSharp
+ +
+ +

Flags for Client.LoadFile and Client.LoadList methods

+
+
+ +
+
public enum LoadFlags
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ +

Fields +

+
+
Append = 1
+

Append the file to the playlist

+
+
AppendPlay = 2
+

Append the file, and if nothing is currently playing, start playback

+
+
Replace = 0
+

Stop playback and play new file immediately

+
+
+ + +

Remarks

+

This is called flags to match terminology from MPV docs, +you can't use multiple values at once like with SeekFlags

+
+ +
+ + + +
+ +
+ +
+
+ + +
+
+
+ Made with docfx +
+
+
+ + \ No newline at end of file diff --git a/Docfx/_site/api/Nickvision.MPVSharp.LoadFlagsExtensions.html b/Docfx/_site/api/Nickvision.MPVSharp.LoadFlagsExtensions.html new file mode 100644 index 0000000..730b302 --- /dev/null +++ b/Docfx/_site/api/Nickvision.MPVSharp.LoadFlagsExtensions.html @@ -0,0 +1,204 @@ + + + + + Class LoadFlagsExtensions + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+ Class LoadFlagsExtensions + +

+ +
+
Namespace
Nickvision.MPVSharp
+ +
+ +

Extensions for LoadFlags

+
+
+ +
+
public static class LoadFlagsExtensions
+
+ + + + +
+
Inheritance
+
+ +
LoadFlagsExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ FlagsToString(LoadFlags) + +

+ +

Convert LoadFlags to a string acceptable by MPV

+
+
+ +
+
public static string FlagsToString(this LoadFlags flags)
+
+ +

Parameters

+
+
flags LoadFlags
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + +
+ +
+ +
+
+ + +
+
+
+ Made with docfx +
+
+
+ + \ No newline at end of file diff --git a/Docfx/_site/api/Nickvision.MPVSharp.LogMessageReceivedEventArgs.html b/Docfx/_site/api/Nickvision.MPVSharp.LogMessageReceivedEventArgs.html index 22a2db4..370934a 100644 --- a/Docfx/_site/api/Nickvision.MPVSharp.LogMessageReceivedEventArgs.html +++ b/Docfx/_site/api/Nickvision.MPVSharp.LogMessageReceivedEventArgs.html @@ -17,7 +17,7 @@ - + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+ Enum SeekFlags + +

+ +
+
Namespace
Nickvision.MPVSharp
+ +
+ +

Flags for Client.Seek method

+
+
+ +
+
[Flags]
+public enum SeekFlags
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ +

Fields +

+
+
Absolute = 2
+

Seek to a given position

+
+
Exact = 16
+

Slow seek, do precise seek

+
+
Keyframes = 8
+

Fast seek, restart at keyframe boundaries

+
+
Percent = 4
+

Treat seek value as percent, not seconds

+
+
Relative = 1
+

Seek relative to current position

+
+
+ + + +
+ + + +
+ +
+ +
+
+ + +
+
+
+ Made with docfx +
+
+
+ + \ No newline at end of file diff --git a/Docfx/_site/api/Nickvision.MPVSharp.SeekFlagsExtensions.html b/Docfx/_site/api/Nickvision.MPVSharp.SeekFlagsExtensions.html new file mode 100644 index 0000000..a75ea20 --- /dev/null +++ b/Docfx/_site/api/Nickvision.MPVSharp.SeekFlagsExtensions.html @@ -0,0 +1,204 @@ + + + + + Class SeekFlagsExtensions + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+ Class SeekFlagsExtensions + +

+ +
+
Namespace
Nickvision.MPVSharp
+ +
+ +

Extensions for SeekFlags

+
+
+ +
+
public static class SeekFlagsExtensions
+
+ + + + +
+
Inheritance
+
+ +
SeekFlagsExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ FlagsToString(SeekFlags) + +

+ +

Convert SeekFlags to a string acceptable by MPV

+
+
+ +
+
public static string FlagsToString(this SeekFlags flags)
+
+ +

Parameters

+
+
flags SeekFlags
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + +
+ +
+ +
+
+ + +
+
+
+ Made with docfx +
+
+
+ + \ No newline at end of file diff --git a/Docfx/_site/api/Nickvision.MPVSharp.SetPropertyReplyReceivedEventArgs.html b/Docfx/_site/api/Nickvision.MPVSharp.SetPropertyReplyReceivedEventArgs.html index 94b0755..91eefa1 100644 --- a/Docfx/_site/api/Nickvision.MPVSharp.SetPropertyReplyReceivedEventArgs.html +++ b/Docfx/_site/api/Nickvision.MPVSharp.SetPropertyReplyReceivedEventArgs.html @@ -17,7 +17,7 @@ - +