Media meta data support
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Mon, 23 Feb 2009 19:12:22 +0000 (21:12 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Mon, 23 Feb 2009 19:13:29 +0000 (21:13 +0200)
This seems to trigger a pseudo-random native failure. Most likely a
critical bug in the VLC meta support.

bindings/cil/src/libvlc.cs
bindings/cil/src/media.cs
bindings/cil/tests/testvlc.cs

index 4cf488e..bacaf78 100644 (file)
@@ -118,10 +118,10 @@ namespace VideoLAN.LibVLC
         public static extern
         MediaHandle MediaDuplicate (MediaHandle media);
 
-        /*[DllImport (lib, EntryPoint="libvlc_media_read_meta")]
+        [DllImport (lib, EntryPoint="libvlc_media_get_meta")]
         public static extern
-        MediaHandle MediaDuplicate (MediaHandle media, int type,
-                                    NativeException ex);*/
+        StringHandle MediaGetMeta (MediaHandle media, MetaType type,
+                                   NativeException ex);
 
         [DllImport (lib, EntryPoint="libvlc_media_get_state")]
         public static extern
index 1edf093..a18a936 100644 (file)
@@ -225,6 +225,25 @@ namespace VideoLAN.LibVLC
             return Location;
         }
 
+        /**
+         * @param type meta data type
+         * @return the meta data value, or @a null if unknown
+         */
+        public string GetMeta (MetaType type)
+        {
+            StringHandle str = LibVLC.MediaGetMeta (Handle, type, ex);
+            Raise ();
+            return str.Transform ();
+        }
+
+        public delegate void MetaChange (Media media, MetaType type);
+        public event MetaChange MetaChanged;
+        private void MetaCallback (MediaMetaEvent ev, IntPtr data)
+        {
+            if (MetaChanged != null)
+                MetaChanged (this, ev.metaType);
+        }
+
         /**
          * Current state of the media.
          */
index 1d4786c..9ea8a31 100644 (file)
@@ -75,6 +75,13 @@ namespace VideoLAN.LibVLC.Test
                 DumpMedia ((Media)media.Clone ());
                 media.StateChanged += WriteMediaState;
 
+                /*foreach (MetaType type in Enum.GetValues (typeof (MetaType)))
+                {
+                    string meta = media.GetMeta (type);
+                    if (meta != null)
+                        Console.WriteLine (" {0}: {1}", type, meta);
+                }*/
+
                 player.Play ();
                 do
                 {