]> git.sesse.net Git - vlc/blob - bindings/java/core/src/main/java/org/videolan/jvlc/MediaDescriptor.java
Add some locking.
[vlc] / bindings / java / core / src / main / java / org / videolan / jvlc / MediaDescriptor.java
1 /*****************************************************************************
2  * MediaDescriptor.java: VLC Java Bindings Media Descriptor
3  *****************************************************************************
4  * Copyright (C) 1998-2008 the VideoLAN team
5  *
6  * Authors: Filippo Carone <filippo@carone.org>
7  *
8  *
9  * $Id $
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
24  *****************************************************************************/
25
26 package org.videolan.jvlc;
27
28 import org.videolan.jvlc.internal.LibVlc;
29 import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager;
30 import org.videolan.jvlc.internal.LibVlc.LibVlcMedia;
31 import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
32
33
34 public class MediaDescriptor
35 {
36     private LibVlcMedia instance;
37     private LibVlc libvlc;
38     private LibVlcEventManager eventManager;
39     private volatile boolean released;
40     
41     private MediaPlayer mediaPlayer;
42     
43     /**
44      * @param jvlc The jvlc instance to create the media descriptor for.
45      * @param media The media string
46      */
47     public MediaDescriptor(JVLC jvlc, String media)
48     {
49         libvlc_exception_t exception = new libvlc_exception_t();
50         libvlc = jvlc.getLibvlc();
51         instance = libvlc.libvlc_media_new(jvlc.getInstance(), media, exception);
52         eventManager = libvlc.libvlc_media_event_manager(instance, exception);
53     }
54
55     MediaDescriptor(JVLC jvlc, LibVlcMedia instance)
56     {
57         libvlc_exception_t exception = new libvlc_exception_t();
58         libvlc = jvlc.getLibvlc();
59         this.instance = instance;
60         eventManager = libvlc.libvlc_media_event_manager(instance, exception);
61     }
62
63     public void addOption(String option)
64     {
65         libvlc_exception_t exception = new libvlc_exception_t();
66         libvlc.libvlc_media_add_option(instance, option, exception );
67     }
68     
69     public String getMrl()
70     {
71         libvlc_exception_t exception = new libvlc_exception_t();
72         return libvlc.libvlc_media_get_mrl(instance, exception);
73     }
74     
75     public MediaPlayer getMediaPlayer()
76     {
77         if (mediaPlayer == null)
78         {
79             this.mediaPlayer = new MediaPlayer(this);
80         }
81         return this.mediaPlayer;
82     }
83     
84     /**
85      * {@inheritDoc}
86      */
87     @Override
88     protected void finalize() throws Throwable
89     {
90         release();
91         super.finalize();
92     }
93
94     
95     
96     /**
97      * Returns the instance.
98      * @return the instance
99      */
100     LibVlcMedia getInstance()
101     {
102         return instance;
103     }
104     
105     /**
106      * Returns the libvlc.
107      * @return the libvlc
108      */
109     LibVlc getLibvlc()
110     {
111         return libvlc;
112     }
113
114     /**
115      * 
116      */
117     public void release()
118     {
119         if (released)
120         {
121             return;
122         }
123         released = true;
124         libvlc.libvlc_media_release(instance);
125     }
126     
127     
128 }