~ubuntu-dev/mplayer/ubuntu-feisty

2 by Reinhard Tartler
upgrade to pre8
1
/// \file
2
/// \ingroup Playtree
3
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
4
#ifndef __PLAYTREE_H
5
#define __PLAYTREE_H
6
7
struct stream_st;
8
struct m_config;
9
10
/// \defgroup PlaytreeIterReturn Playtree iterator return code
2 by Reinhard Tartler
upgrade to pre8
11
/// \ingroup PlaytreeIter
12
///@{
13
#define PLAY_TREE_ITER_ERROR 0
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
14
#define PLAY_TREE_ITER_ENTRY 1
15
#define PLAY_TREE_ITER_NODE  2
16
#define PLAY_TREE_ITER_END 3
17
///@}
2 by Reinhard Tartler
upgrade to pre8
18
19
/// \defgroup PlaytreeEntryTypes Playtree entry types
20
/// \ingroup Playtree
21
///@{
22
#define PLAY_TREE_ENTRY_NODE -1
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
23
#define PLAY_TREE_ENTRY_DVD 0
24
#define PLAY_TREE_ENTRY_VCD 1
25
#define PLAY_TREE_ENTRY_TV    2
26
#define PLAY_TREE_ENTRY_FILE  3
27
///@}
2 by Reinhard Tartler
upgrade to pre8
28
29
30
/// \defgroup PlaytreeEntryFlags Playtree flags
31
/// \ingroup Playtree
32
///@{
33
/// Play the item childs in random order.
34
#define PLAY_TREE_RND  (1<<0)
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
35
/// Playtree flags used by the iterator to mark items already "randomly" played.
2 by Reinhard Tartler
upgrade to pre8
36
#define PLAY_TREE_RND_PLAYED  (1<<8)
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
37
///@}
2 by Reinhard Tartler
upgrade to pre8
38
39
/// \defgroup PlaytreeIterMode Playtree iterator mode
40
/// \ingroup PlaytreeIter
41
///@{
42
#define PLAY_TREE_ITER_NORMAL 0
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
43
#define PLAY_TREE_ITER_RND 1
44
///@}
2 by Reinhard Tartler
upgrade to pre8
45
46
/// \defgroup Playtree
47
///@{
48
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
49
typedef struct play_tree play_tree_t;
50
/// \ingroup PlaytreeIter
2 by Reinhard Tartler
upgrade to pre8
51
typedef struct play_tree_iter play_tree_iter_t;
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
52
typedef struct play_tree_param play_tree_param_t;
53
54
55
#if 0
56
typedef struct play_tree_info play_tree_info_t;
57
// TODO : a attrib,val pair system and not something hardcoded
58
struct play_tree_info {
59
  char* title;
60
  char* author;
61
  char* copyright;
62
  char* abstract;
63
  // Some more ??
64
}
65
#endif
66
67
struct play_tree_param {
68
  char* name;
69
  char* value;
70
};
71
72
73
/// Playtree item
2 by Reinhard Tartler
upgrade to pre8
74
struct play_tree {
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
75
  play_tree_t* parent;
76
  play_tree_t* child;
77
  play_tree_t* next;
78
  play_tree_t* prev;
79
80
  //play_tree_info_t info;
81
  play_tree_param_t* params;
82
  int loop;
83
  char** files;
84
  int entry_type;
85
  int flags;
86
};
87
2 by Reinhard Tartler
upgrade to pre8
88
89
/// \defgroup PlaytreeIter Playtree iterator
90
/// \ingroup Playtree
91
///@{
92
93
/// Playtree iterator
94
struct play_tree_iter {
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
95
  /// Root of the iterated tree.
2 by Reinhard Tartler
upgrade to pre8
96
  play_tree_t* root;
97
  /// Current position in the tree.
98
  play_tree_t* tree;
99
  /// \ref Config used.
100
  struct m_config* config;
101
  /// Looping status
102
  int loop;
103
  /// Selected file in the current item.
104
  int file;
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
105
  /// Number of files in the current item.
2 by Reinhard Tartler
upgrade to pre8
106
  int num_files;
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
107
  int entry_pushed;
108
  int mode;
109
 
110
  ///  loop/valid stack to save/revert status when we go up/down.
2 by Reinhard Tartler
upgrade to pre8
111
  int* status_stack;
112
  /// status stack size
113
  int stack_size;
114
};
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
115
///@}
2 by Reinhard Tartler
upgrade to pre8
116
117
/// Create a new empty playtree item.
118
play_tree_t* 
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
119
play_tree_new(void);
120
121
/// Free a playtree item.
2 by Reinhard Tartler
upgrade to pre8
122
/** \param pt Item to free.
123
 *  \param childs If non-zero the item's childs are recursively freed.
124
 */
125
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
126
play_tree_free(play_tree_t* pt, int childs);
127
128
129
/// Free an item and its siblings.
2 by Reinhard Tartler
upgrade to pre8
130
/** \param pt Item to free.
131
 *  \param childs If non-zero the items' childs are recursively freed.
132
 */
133
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
134
play_tree_free_list(play_tree_t* pt, int childs);
135
136
137
/// Set the childs of a playtree item.
2 by Reinhard Tartler
upgrade to pre8
138
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
139
play_tree_set_child(play_tree_t* pt, play_tree_t* child);
140
2 by Reinhard Tartler
upgrade to pre8
141
/// Set the parent of a playtree item.
142
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
143
play_tree_set_parent(play_tree_t* pt, play_tree_t* parent);
144
145
146
/// Append an item after its siblings.
2 by Reinhard Tartler
upgrade to pre8
147
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
148
play_tree_append_entry(play_tree_t* pt, play_tree_t* entry);
149
150
/// Prepend an item before its siblings.
2 by Reinhard Tartler
upgrade to pre8
151
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
152
play_tree_prepend_entry(play_tree_t* pt, play_tree_t* entry);
153
154
/// Insert an item right after a siblings.
2 by Reinhard Tartler
upgrade to pre8
155
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
156
play_tree_insert_entry(play_tree_t* pt, play_tree_t* entry);
157
158
/// Detach an item from the tree.
2 by Reinhard Tartler
upgrade to pre8
159
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
160
play_tree_remove(play_tree_t* pt, int free_it,int with_childs);
161
162
/// Add a file to an item.
2 by Reinhard Tartler
upgrade to pre8
163
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
164
play_tree_add_file(play_tree_t* pt,char* file);
165
166
/// Remove a file from an item.
2 by Reinhard Tartler
upgrade to pre8
167
int
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
168
play_tree_remove_file(play_tree_t* pt,char* file);
169
170
171
/// Add a config paramter to an item.
2 by Reinhard Tartler
upgrade to pre8
172
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
173
play_tree_set_param(play_tree_t* pt, char* name, char* val);
174
175
/// Remove a config parameter from an item.
2 by Reinhard Tartler
upgrade to pre8
176
int
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
177
play_tree_unset_param(play_tree_t* pt, char* name);
178
179
/// Copy the config parameters from one item to another.
2 by Reinhard Tartler
upgrade to pre8
180
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
181
play_tree_set_params_from(play_tree_t* dest,play_tree_t* src);
182
183
/// \addtogroup PlaytreeIter
2 by Reinhard Tartler
upgrade to pre8
184
///@{
185
186
/// Create a new iterator.
187
play_tree_iter_t*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
188
play_tree_iter_new(play_tree_t* pt, struct m_config* config);
189
190
/// Duplicate an iterator.
2 by Reinhard Tartler
upgrade to pre8
191
play_tree_iter_t*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
192
play_tree_iter_new_copy(play_tree_iter_t* old);
193
194
/// Free an iterator.
2 by Reinhard Tartler
upgrade to pre8
195
void
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
196
play_tree_iter_free(play_tree_iter_t* iter);
197
198
/// Step an iterator.
2 by Reinhard Tartler
upgrade to pre8
199
/** \param iter The iterator.
200
 *  \param d The direction: d > 0 == next , d < 0 == prev
201
 *  \param with_node TRUE == stop on nodes with childs, FALSE == go directly to the next child
202
 *  \return See \ref PlaytreeIterReturn.
203
 */
204
int 
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
205
play_tree_iter_step(play_tree_iter_t* iter, int d,int with_nodes);
206
207
/// Step up, usefull to break a loop, etc.
2 by Reinhard Tartler
upgrade to pre8
208
/** \param iter The iterator.
209
 *  \param d The direction: d > 0 == next , d < 0 == prev
210
 *  \param with_node TRUE == stop on nodes with childs, FALSE == go directly to the next child
211
 *  \return See \ref PlaytreeIterReturn.
212
 */
213
int
214
play_tree_iter_up_step(play_tree_iter_t* iter, int d,int with_nodes);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
215
216
/// Enter a node child list, only usefull when stopping on nodes.
2 by Reinhard Tartler
upgrade to pre8
217
int
218
play_tree_iter_down_step(play_tree_iter_t* iter, int d,int with_nodes);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
219
220
/// Get a file from the current item.
2 by Reinhard Tartler
upgrade to pre8
221
char*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
222
play_tree_iter_get_file(play_tree_iter_t* iter, int d);
223
224
///@}
2 by Reinhard Tartler
upgrade to pre8
225
// PlaytreeIter group
226
227
/// Create a playtree from a playlist file.
228
/** \ingroup PlaytreeParser
229
 */
230
play_tree_t*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
231
parse_playtree(struct stream_st *stream, int forced);
232
233
/// Clean a tree by destroying all empty elements.
2 by Reinhard Tartler
upgrade to pre8
234
play_tree_t*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
235
play_tree_cleanup(play_tree_t* pt);
236
237
/// Create a playtree from a playlist file.
2 by Reinhard Tartler
upgrade to pre8
238
/** \ingroup PlaytreeParser
239
 */
240
play_tree_t*
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
241
parse_playlist_file(char* file);
242
243
/// \defgroup PtAPI Playtree highlevel API
2 by Reinhard Tartler
upgrade to pre8
244
/// \ingroup Playtree
245
/// Highlevel API with pt-suffix to different from low-level API
246
/// by Fabian Franz (mplayer@fabian-franz.de).
247
///@{
248
249
// Cleans up pt and creates a new iter.
250
play_tree_iter_t* pt_iter_create(play_tree_t** pt, struct m_config* config);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
251
252
/// Frees the iter.
2 by Reinhard Tartler
upgrade to pre8
253
void pt_iter_destroy(play_tree_iter_t** iter);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
254
255
/// Gets the next available file in the direction (d=-1 || d=+1).
2 by Reinhard Tartler
upgrade to pre8
256
char* pt_iter_get_file(play_tree_iter_t* iter, int d);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
257
258
// Two Macros that implement forward and backward direction.
2 by Reinhard Tartler
upgrade to pre8
259
#define pt_iter_get_next_file(iter) pt_iter_get_file(iter, 1)
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
260
#define pt_iter_get_prev_file(iter) pt_iter_get_file(iter, -1)
261
262
/// Inserts entry into the playtree.
2 by Reinhard Tartler
upgrade to pre8
263
void pt_iter_insert_entry(play_tree_iter_t* iter, play_tree_t* entry);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
264
265
/// Replaces current entry in playtree with entry by doing insert and remove.
2 by Reinhard Tartler
upgrade to pre8
266
void pt_iter_replace_entry(play_tree_iter_t* iter, play_tree_t* entry);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
267
268
/// Adds a new file to the playtree, if it is not valid it is created.
2 by Reinhard Tartler
upgrade to pre8
269
void pt_add_file(play_tree_t** ppt, char* filename);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
270
271
/// \brief Performs a convert to playtree-syntax, by concat path/file 
2 by Reinhard Tartler
upgrade to pre8
272
/// and performs pt_add_file
273
void pt_add_gui_file(play_tree_t** ppt, char* path, char* file);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
274
275
// Two macros to use only the iter and not the other things.
2 by Reinhard Tartler
upgrade to pre8
276
#define pt_iter_add_file(iter, filename) pt_add_file(&iter->tree, filename)
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
277
#define pt_iter_add_gui_file(iter, path, name) pt_add_gui_file(&iter->tree, path, name)
278
279
/// Resets the iter and goes back to head.
2 by Reinhard Tartler
upgrade to pre8
280
void pt_iter_goto_head(play_tree_iter_t* iter);
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
281
282
///@}
2 by Reinhard Tartler
upgrade to pre8
283
284
#endif
1 by Reinhard Tartler
imported mplayer_0.99+1.0pre7try2+cvs20060117
285
2 by Reinhard Tartler
upgrade to pre8
286
///@}
287