LGPL
[vlc.git] / src / input / vlm_internal.h
1 /*****************************************************************************
2  * vlm_internal.h: Internal vlm structures
3  *****************************************************************************
4  * Copyright (C) 1998-2006 VLC authors and VideoLAN
5  * $Id$
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     mtime_t i_date;
75
76     /* if != 0 repeat schedule every (period) */
77     mtime_t i_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     vlc_thread_t thread;
90     vlc_mutex_t  lock_manage;
91     vlc_cond_t   wait_manage;
92     unsigned     users;
93
94     /* tell vlm thread there is work to do */
95     bool         input_state_changed;
96     /* */
97     int64_t        i_id;
98
99     /* Vod server (used by media) */
100     vod_t          *p_vod;
101
102     /* Media list */
103     int                i_media;
104     vlm_media_sys_t    **media;
105
106     /* Schedule list */
107     int            i_schedule;
108     vlm_schedule_sys_t **schedule;
109 };
110
111 int64_t vlm_Date(void);
112 int vlm_ControlInternal( vlm_t *p_vlm, int i_query, ... );
113 int ExecuteCommand( vlm_t *, const char *, vlm_message_t ** );
114 void vlm_ScheduleDelete( vlm_t *vlm, vlm_schedule_sys_t *sched );
115
116 #endif