Cleanup test cases
[vlc.git] / bindings / cil / src / media.cs
index 51582ba..39f0290 100644 (file)
@@ -33,38 +33,21 @@ namespace VideoLAN.LibVLC
      */
     internal sealed class MediaHandle : NonNullHandle
     {
-        [DllImport ("libvlc.dll",
-                    EntryPoint="libvlc_media_new")]
-        public static extern
-        MediaHandle Create (InstanceHandle inst, U8String mrl,
-                            NativeException ex);
-
-        [DllImport ("libvlc.dll",
-                    EntryPoint="libvlc_media_release")]
-        private static extern void Release (IntPtr ptr);
-
-        [DllImport ("libvlc.dll",
-                    EntryPoint="libvlc_media_add_option")]
-        public static extern void AddOption (MediaHandle ptr, U8String options,
-                                             NativeException ex);
-
-        [DllImport ("libvlc.dll",
-                    EntryPoint="libvlc_media_add_option_untrusted")]
-        public static extern void AddUntrustedOption (MediaHandle ptr,
-                                                      U8String options,
-                                                      NativeException ex);
-
+        /**
+         * NonNullHandle.Destroy
+         */
         protected override void Destroy ()
         {
-            Release (handle);
+            LibVLC.MediaRelease (handle);
         }
     };
 
     /**
      * @brief Media: a source media
-     * Use this class to extract meta-informations from a media.
+     * @ingroup API
+     * Each media object represents an input media, such as a file or an URL.
      */
-    public class Media : BaseObject
+    public class Media : BaseObject, ICloneable
     {
         internal MediaHandle Handle
         {
@@ -84,19 +67,88 @@ namespace VideoLAN.LibVLC
         {
             U8String umrl = new U8String (mrl);
 
-            handle = MediaHandle.Create (instance.Handle, umrl, ex);
+            handle = LibVLC.MediaCreate (instance.Handle, umrl, ex);
             Raise ();
         }
 
+        /**
+         * Add VLC input item options to the media.
+         * @param options VLC options in VLC input item format
+         *                (see example below)
+         * @param trusted whether the options are set by a trusted agent
+         *                (e.g. the local computer configuration) or not
+         *                (e.g. a downloaded file).
+         * @code
+         * Media m = new Media(vlc, "http://www.example.com/music.ogg");
+         * m.AddOptions(":http-user-agent=LibVLC.Net "
+         *            + ":http-proxy=proxy:8080", true);
+         * @endcode
+         */
         public void AddOptions (string options, bool trusted)
         {
             U8String uopts = new U8String (options);
 
             if (trusted)
-                MediaHandle.AddOption (Handle, uopts, ex);
+                LibVLC.MediaAddOption (Handle, uopts, ex);
             else
-                MediaHandle.AddUntrustedOption (Handle, uopts, ex);
+                LibVLC.MediaAddUntrustedOption (Handle, uopts, ex);
             Raise ();
         }
+
+        /**
+         * The media location (file path, URL, ...).
+         */
+        public string Location
+        {
+            get
+            {
+                MemoryHandle str = LibVLC.MediaGetMRL (Handle, ex);
+                Raise ();
+                return str.Transform ();
+            }
+        }
+
+        private Media (MediaHandle handle)
+        {
+            this.handle = handle;
+        }
+
+        /**
+         * Duplicates a media object.
+         */
+        public object Clone ()
+        {
+            return new Media (LibVLC.MediaDuplicate (Handle));
+        }
+
+        /**
+         * Duration of the media in microseconds. The precision of the result
+         * depends on the input stram protocol and file format. The value
+         * might be incorrect and unknown (VLC usually returns 0 or -1 then).
+         */
+        public long Duration
+        {
+            get
+            {
+                long duration = LibVLC.MediaGetDuration (Handle, ex);
+                Raise ();
+                return duration;
+            }
+        }
+
+        /**
+         * Whether the media was "preparsed". If true, the meta-infos were
+         * extracted, even before the media was played. This is normally only
+         * available if the input files is stored on a local filesystem.
+         */
+        public bool IsPreparsed
+        {
+            get
+            {
+                int preparsed = LibVLC.MediaIsPreparsed (Handle, ex);
+                Raise ();
+                return preparsed != 0;
+            }
+        }
     };
 };