1 /*****************************************************************************
2  * vlm_internal.h: Internal vlm structures
3  *****************************************************************************
4  * Copyright (C) 1998-2006 VLC authors and VideoLAN
5  * $Id: 8c2a25b0b06255d7e746cd1ade47ae819921ca2c $
6  *
7  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at 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. See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23 
24 #ifndef LIBVLC_VLM_INTERNAL_H
25 #define LIBVLC_VLM_INTERNAL_H 1
26 
27 #include <vlc_vlm.h>
28 #include "input_interface.h"
29 
30 /* Private */
31 typedef struct
32 {
33     /* instance name */
34     char *psz_name;
35 
36     /* "playlist" index */
37     int i_index;
38 
39     bool      b_sout_keep;
40 
41     vlc_object_t *p_parent;
42     input_item_t      *p_item;
43     input_thread_t    *p_input;
44     input_resource_t *p_input_resource;
45 
46 } vlm_media_instance_sys_t;
47 
48 
49 typedef struct
50 {
51     vlm_media_t cfg;
52 
53     struct
54     {
55         input_item_t *p_item;
56         vod_media_t *p_media;
57     } vod;
58 
59     /* actual input instances */
60     int                      i_instance;
61     vlm_media_instance_sys_t **instance;
62 } vlm_media_sys_t;
63 
64 typedef struct
65 {
66     /* names "schedule" is reserved */
67     char    *psz_name;
68     bool b_enabled;
69     /* list of commands to execute on date */
70     int i_command;
71     char **command;
72 
73     /* the date of 1st execution */
74     time_t date;
75 
76     /* if != 0, repeat period in seconds */
77     unsigned period;
78     /* number of times you have to repeat
79        i_repeat < 0 : endless repeat     */
80     int i_repeat;
81 } vlm_schedule_sys_t;
82 
83 
84 struct vlm_t
85 {
86     VLC_COMMON_MEMBERS
87 
88     vlc_mutex_t  lock;
89 
90     /* a separate mutex is needed: "lock" must remain locked while waiting */
91     vlc_mutex_t  lock_delete;
92     vlc_cond_t   wait_delete;
93 
94     vlc_thread_t thread;
95     vlc_mutex_t  lock_manage;
96     vlc_cond_t   wait_manage;
97     unsigned     users;
98 
99     /* tell vlm thread there is work to do */
100     bool         input_state_changed;
101     /* */
102     int64_t        i_id;
103 
104     /* Vod server (used by media) */
105     vod_t          *p_vod;
106 
107     /* Media list */
108     int                i_media;
109     vlm_media_sys_t    **media;
110 
111     /* Schedule list */
112     int            i_schedule;
113     vlm_schedule_sys_t **schedule;
114 
115     unsigned i_consecutive_errors;
116 };
117 
118 int vlm_ControlInternal( vlm_t *p_vlm, int i_query, ... );
119 int ExecuteCommand( vlm_t *, const char *, vlm_message_t ** );
120 void vlm_ScheduleDelete( vlm_t *vlm, vlm_schedule_sys_t *sched );
121 
122 #endif
123