Start rewriting the CIL bindings
[vlc.git] / bindings / cil / src / media.cs
1 /**
2  * @file media.cs
3  * @brief Media descriptor class
4  * @ingroup API
5  */
6
7 /**********************************************************************
8  *  Copyright (C) 2007-2009 RĂ©mi Denis-Courmont.                      *
9  *  This program is free software; you can redistribute and/or modify *
10  *  it under the terms of the GNU General Public License as published *
11  *  by the Free Software Foundation; version 2 of the license, or (at *
12  *  your option) any later version.                                   *
13  *                                                                    *
14  *  This program is distributed in the hope that it will be useful,   *
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of    *
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.              *
17  *  See the GNU General Public License for more details.              *
18  *                                                                    *
19  *  You should have received a copy of the GNU General Public License *
20  *  along with this program; if not, you can get it from:             *
21  *  http://www.gnu.org/copyleft/gpl.html                              *
22  **********************************************************************/
23
24 using System;
25 //using System.Collections.Generic;
26 using System.Runtime.InteropServices;
27
28 namespace VideoLAN.LibVLC
29 {
30     /**
31      * @brief MediaHandle: unmanaged LibVLC media pointer
32      * @ingroup Internals
33      */
34     internal sealed class MediaHandle : NonNullHandle
35     {
36         [DllImport ("libvlc.dll",
37                     EntryPoint="libvlc_media_new")]
38         public static extern
39         MediaHandle Create (InstanceHandle inst, U8String mrl,
40                             NativeException ex);
41
42         [DllImport ("libvlc.dll",
43                     EntryPoint="libvlc_media_release")]
44         private static extern void Release (IntPtr ptr);
45
46         [DllImport ("libvlc.dll",
47                     EntryPoint="libvlc_media_add_option")]
48         public static extern void AddOption (MediaHandle ptr, U8String options,
49                                              NativeException ex);
50
51         [DllImport ("libvlc.dll",
52                     EntryPoint="libvlc_media_add_option_untrusted")]
53         public static extern void AddUntrustedOption (MediaHandle ptr,
54                                                       U8String options,
55                                                       NativeException ex);
56
57         protected override void Destroy ()
58         {
59             Release (handle);
60         }
61     };
62
63     /**
64      * @brief Media: a source media
65      * Use this class to extract meta-informations from a media.
66      */
67     public class Media : BaseObject
68     {
69         internal MediaHandle Handle
70         {
71             get
72             {
73                 return handle as MediaHandle;
74             }
75         }
76
77         /**
78          * Creates a Media object.
79          *
80          * @param instance VLC instance
81          * @param mrl Media Resource Locator (file path or URL)
82          */
83         public Media (VLC instance, string mrl)
84         {
85             U8String umrl = new U8String (mrl);
86
87             handle = MediaHandle.Create (instance.Handle, umrl, ex);
88             Raise ();
89         }
90
91         public void AddOptions (string options, bool trusted)
92         {
93             U8String uopts = new U8String (options);
94
95             if (trusted)
96                 MediaHandle.AddOption (Handle, uopts, ex);
97             else
98                 MediaHandle.AddUntrustedOption (Handle, uopts, ex);
99             Raise ();
100         }
101     };
102 };