vlm.c 7.51 KB
Newer Older
zorglub's avatar
zorglub committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*****************************************************************************
 * vlm.c: libvlc new API VLM handling functions
 *****************************************************************************
 * Copyright (C) 2005 the VideoLAN team
 * $Id: playlist.c 14265 2006-02-12 17:31:39Z zorglub $
 *
 * Authors: Clément Stenac <zorglub@videolan.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

#include <libvlc_internal.h>
#include <vlc/libvlc.h>

#include <vlc/vlc.h>
28
#include <vlc_es.h>
zorglub's avatar
zorglub committed
29
30
31
32
33
#include <vlc_input.h>
#include <vlc_vlm.h>

void InitVLM( libvlc_instance_t *p_instance )
{
zorglub's avatar
zorglub committed
34
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
35
36
    if( p_instance->p_vlm ) return;
    p_instance->p_vlm = vlm_New( p_instance->p_vlc );
zorglub's avatar
zorglub committed
37
38
39
#else
    p_instance->p_vlm = NULL;
#endif
zorglub's avatar
zorglub committed
40
41
42
43
}

#define CHECK_VLM { if( !p_instance->p_vlm ) InitVLM( p_instance ); \
                    if( !p_instance->p_vlm ) {\
zorglub's avatar
zorglub committed
44
45
                  libvlc_exception_raise( p_exception, \
                  "Unable to create VLM. It might be disabled." ); return; } }
zorglub's avatar
zorglub committed
46

zorglub's avatar
zorglub committed
47
48
49
50
51
52
53
#define GET_MEDIA { p_media = vlm_MediaSearch( p_instance->p_vlm, psz_name );\
                   if( !p_media ) \
                   { \
                        libvlc_exception_raise( p_exception, \
                                                "Media %s does not exist", \
                                                psz_name ); return; } }

zorglub's avatar
zorglub committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
void libvlc_vlm_add_broadcast( libvlc_instance_t *p_instance, char *psz_name,
                               char *psz_input, char *psz_output,
                               int i_options, char **ppsz_options,
                               int b_enabled, int b_loop,
                               libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    CHECK_VLM;

    p_media = vlm_MediaNew( p_instance->p_vlm, psz_name, BROADCAST_TYPE );
    if( !p_media )
    {
        libvlc_exception_raise( p_exception, "Media %s creation failed",
                                psz_name );
        return;
    }
    libvlc_vlm_change_media( p_instance, psz_name, psz_input, psz_output,
                             i_options, ppsz_options, b_enabled, b_loop,
                             p_exception );

}

void libvlc_vlm_del_media( libvlc_instance_t *p_instance, char *psz_name,
                           libvlc_exception_t *p_exception )
{
    char *psz_message;
    vlm_message_t *answer;
    CHECK_VLM;
zorglub's avatar
zorglub committed
82
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
83
84
85
86
87
88
89
90
    asprintf( &psz_message, "del %s", psz_name );
    vlm_ExecuteCommand( p_instance->p_vlm, psz_message, &answer );
    if( answer->psz_value )
    {
        libvlc_exception_raise( p_exception, "Unable to delete %s",
                                psz_name );
    }
    free( psz_message);
zorglub's avatar
zorglub committed
91
#endif
zorglub's avatar
zorglub committed
92
93
94
95
96
97
98
}

void libvlc_vlm_set_enabled( libvlc_instance_t *p_instance, char *psz_name,
                             int b_enabled, libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    CHECK_VLM;
zorglub's avatar
zorglub committed
99
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
100
    GET_MEDIA;
zorglub's avatar
zorglub committed
101
102
    if( b_enabled != 0 ) b_enabled = 1;
    p_media->b_enabled = b_enabled;
zorglub's avatar
zorglub committed
103
#endif
zorglub's avatar
zorglub committed
104
105
}

zorglub's avatar
zorglub committed
106
107
108
109
110
void libvlc_vlm_set_loop( libvlc_instance_t *p_instance, char *psz_name,
                          int b_loop, libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    CHECK_VLM;
zorglub's avatar
zorglub committed
111
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
112
113
114
    GET_MEDIA;
    if( b_loop != 0 ) b_loop = 1;
    p_media->b_loop = b_loop;
zorglub's avatar
zorglub committed
115
#endif
zorglub's avatar
zorglub committed
116
117
118
119
120
121
122
123
}

void libvlc_vlm_set_output( libvlc_instance_t *p_instance, char *psz_name,
                            char *psz_output,  libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    int i_ret;
    CHECK_VLM;
zorglub's avatar
zorglub committed
124
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
125
126
127
128
129
    GET_MEDIA;

    vlc_mutex_lock( &p_instance->p_vlm->lock );
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
    if( i_ret )
zorglub's avatar
zorglub committed
130
131
132
133
    {
         libvlc_exception_raise( p_exception, "Unable to set output" );
         vlc_mutex_unlock( &p_instance->p_vlm->lock );return;
    }
zorglub's avatar
zorglub committed
134
    vlc_mutex_unlock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
135
#endif
zorglub's avatar
zorglub committed
136
137
138
139
140
141
142
143
}

void libvlc_vlm_set_input( libvlc_instance_t *p_instance, char *psz_name,
                           char *psz_input,  libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    int i_ret;
    CHECK_VLM;
zorglub's avatar
zorglub committed
144
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
145
    vlc_mutex_lock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
146
    GET_MEDIA;
zorglub's avatar
zorglub committed
147

zorglub's avatar
zorglub committed
148
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
zorglub's avatar
zorglub committed
149
    if( i_ret )
zorglub's avatar
zorglub committed
150
151
152
153
    {
         libvlc_exception_raise( p_exception, "Unable to change input" );
         vlc_mutex_unlock( &p_instance->p_vlm->lock );return;
    }
zorglub's avatar
zorglub committed
154
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
zorglub's avatar
zorglub committed
155
    if( i_ret )
zorglub's avatar
zorglub committed
156
157
158
159
    {
        libvlc_exception_raise( p_exception, "Unable to change input" );
        vlc_mutex_unlock( &p_instance->p_vlm->lock );return;
    }
zorglub's avatar
zorglub committed
160
    vlc_mutex_unlock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
161
#endif
zorglub's avatar
zorglub committed
162
163
164
165
166
167
168
169
}

void libvlc_vlm_add_input( libvlc_instance_t *p_instance, char *psz_name,
                           char *psz_input,  libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
    int i_ret;
    CHECK_VLM;
zorglub's avatar
zorglub committed
170
#ifdef ENABLE_VLM
zorglub's avatar
zorglub committed
171
    vlc_mutex_lock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
172
    GET_MEDIA;
zorglub's avatar
zorglub committed
173

zorglub's avatar
zorglub committed
174
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
zorglub's avatar
zorglub committed
175
    if( i_ret )
zorglub's avatar
zorglub committed
176
177
178
179
    {
         libvlc_exception_raise( p_exception, "Unable to change input" );
         vlc_mutex_unlock( &p_instance->p_vlm->lock ); return;
    }
zorglub's avatar
zorglub committed
180
181

    vlc_mutex_unlock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
182
#endif
zorglub's avatar
zorglub committed
183
184
185
}


zorglub's avatar
zorglub committed
186
187
188
189
190
191
void libvlc_vlm_change_media( libvlc_instance_t *p_instance, char *psz_name,
                              char *psz_input, char *psz_output, int i_options,
                              char **ppsz_options, int b_enabled, int b_loop,
                              libvlc_exception_t *p_exception )
{
    vlm_media_t *p_media;
zorglub's avatar
zorglub committed
192
    int i_ret;
zorglub's avatar
zorglub committed
193
    CHECK_VLM;
zorglub's avatar
zorglub committed
194
195
#ifdef ENABLE_VLM
    vlc_mutex_lock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
196
    GET_MEDIA;
zorglub's avatar
zorglub committed
197
198
199
    if( b_enabled != 0 ) b_enabled = 1;
    if( b_loop != 0 ) b_loop = 1;

zorglub's avatar
zorglub committed
200
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
zorglub's avatar
zorglub committed
201
202
203
204
205
206
    if( i_ret )
    {
        libvlc_exception_raise( p_exception, "Unable to set output" );
        vlc_mutex_unlock( &p_instance->p_vlm->lock );
        return;
    }
zorglub's avatar
zorglub committed
207
208
    p_media->b_enabled = b_enabled;
    p_media->b_loop = b_loop;
zorglub's avatar
zorglub committed
209
210
211

    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "output", psz_output );
    if( i_ret )
zorglub's avatar
zorglub committed
212
213
214
215
    {
        libvlc_exception_raise( p_exception, "Unable to set output" );
        vlc_mutex_unlock( &p_instance->p_vlm->lock ); return;
    }
zorglub's avatar
zorglub committed
216
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "inputdel", "all" );
zorglub's avatar
zorglub committed
217
    if( i_ret )
zorglub's avatar
zorglub committed
218
219
220
221
    {
        libvlc_exception_raise( p_exception, "Unable to change input" );
        vlc_mutex_unlock( &p_instance->p_vlm->lock ); return;
    }
zorglub's avatar
zorglub committed
222
    i_ret = vlm_MediaSetup( p_instance->p_vlm, p_media, "input", psz_input );
zorglub's avatar
zorglub committed
223
    if( i_ret )
zorglub's avatar
zorglub committed
224
225
226
227
    {
        libvlc_exception_raise( p_exception, "Unable to change input" );
        vlc_mutex_unlock( &p_instance->p_vlm->lock );return;
    }
zorglub's avatar
zorglub committed
228
229

    vlc_mutex_unlock( &p_instance->p_vlm->lock );
zorglub's avatar
zorglub committed
230
#endif
zorglub's avatar
zorglub committed
231
}