annotate playtree.c @ 13593:e2dca00374f2

add new control message, that is send after end of stream, to flush all remaining frames in the video system required by xvid4 encoder.
author iive
date Sat, 09 Oct 2004 13:07:18 +0000
parents 9a495bdc3a1e
children c29255ab4712
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
1
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
2 #include "config.h"
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
3 #include <stdlib.h>
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
4 #include <string.h>
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
5 #include <stdio.h>
4050
da61596bcd87 FreeBSD fix
nexus
parents: 4043
diff changeset
6 #include <unistd.h>
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
7 #include <errno.h>
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
8 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
9 #include <assert.h>
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
10 #endif
9748
f74f8b809697 Use new config headers
albeu
parents: 9290
diff changeset
11 #include "m_config.h"
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
12 #include "playtree.h"
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
13 #include "mp_msg.h"
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
14
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
15 static int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
16 play_tree_is_valid(play_tree_t* pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
17
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
18 play_tree_t*
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
19 play_tree_new(void) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
20 play_tree_t* r = (play_tree_t*)calloc(1,sizeof(play_tree_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
21 if(r == NULL)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
22 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",sizeof(play_tree_t));
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
23 r->entry_type = PLAY_TREE_ENTRY_NODE;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
24 return r;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
25 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
26
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
27 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
28 play_tree_free(play_tree_t* pt, int childs) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
29 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
30
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
31 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
32 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
33 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
34
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
35 if(childs) {
8062
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
36 for(iter = pt->child; iter != NULL; ) {
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
37 play_tree_t* nxt=iter->next;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
38 play_tree_free(iter,1);
8062
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
39 iter = nxt;
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
40 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
41 pt->child = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
42 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
43
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
44 play_tree_remove(pt,0,0);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
45
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
46 for(iter = pt->child ; iter != NULL ; iter = iter->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
47 iter->parent = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
48
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
49 //if(pt->params) free(pt->params);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
50 if(pt->files) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
51 int i;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
52 for(i = 0 ; pt->files[i] != NULL ; i++)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
53 free(pt->files[i]);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
54 free(pt->files);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
55 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
56
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
57 free(pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
58 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
59
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
60 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
61 play_tree_free_list(play_tree_t* pt, int childs) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
62 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
63
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
64 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
65 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
66 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
67
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
68 for(iter = pt ; iter->prev != NULL ; iter = iter->prev)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
69 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
70
8062
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
71 while(iter) {
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
72 play_tree_t* nxt = iter->next;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
73 play_tree_free(iter,childs);
8062
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
74 iter = nxt;
ed2d3e7e7e36 10L found by jeroen dobbelaere <jeroen dot dobbelaere at acunia dot com>
albeu
parents: 5802
diff changeset
75 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
76
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
77
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
78 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
79
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
80 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
81 play_tree_append_entry(play_tree_t* pt, play_tree_t* entry) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
82 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
83
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
84 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
85 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
86 assert(entry != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
87 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
88
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
89 if(pt == entry)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
90 return;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
91
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
92 for(iter = pt ; iter->next != NULL ; iter = iter->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
93 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
94
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
95 entry->parent = iter->parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
96 entry->prev = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
97 entry->next = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
98 iter->next = entry;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
99 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
100
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
101 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
102 play_tree_prepend_entry(play_tree_t* pt, play_tree_t* entry) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
103 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
104
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
105 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
106 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
107 assert(entry != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
108 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
109
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
110 for(iter = pt ; iter->prev != NULL; iter = iter->prev)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
111 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
112
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
113 entry->prev = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
114 entry->next = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
115 entry->parent = iter->parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
116
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
117 iter->prev = entry;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
118 if(entry->parent) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
119 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
120 assert(entry->parent->child == iter);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
121 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
122 entry->parent->child = entry;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
123 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
124 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
125
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
126 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
127 play_tree_insert_entry(play_tree_t* pt, play_tree_t* entry) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
128
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
129 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
130 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
131 assert(entry != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
132 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
133
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
134 entry->parent = pt->parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
135 entry->prev = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
136 if(pt->next) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
137 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
138 assert(pt->next->prev == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
139 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
140 entry->next = pt->next;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
141 entry->next->prev = entry;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
142 } else
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
143 entry->next = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
144 pt->next = entry;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
145
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
146 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
147
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
148 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
149 play_tree_remove(play_tree_t* pt, int free_it,int with_childs) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
150
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
151 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
152 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
153 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
154
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
155 // Middle of list
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
156 if(pt->prev && pt->next) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
157 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
158 assert(pt->prev->next == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
159 assert(pt->next->prev == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
160 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
161 pt->prev->next = pt->next;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
162 pt->next->prev = pt->prev;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
163 } // End of list
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
164 else if(pt->prev) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
165 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
166 assert(pt->prev->next == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
167 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
168 pt->prev->next = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
169 } // Begining of list
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
170 else if(pt->next) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
171 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
172 assert(pt->next->prev == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
173 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
174 pt->next->prev = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
175 if(pt->parent) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
176 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
177 assert(pt->parent->child == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
178 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
179 pt->parent->child = pt->next;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
180 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
181 } // The only one
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
182 else if(pt->parent) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
183 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
184 assert(pt->parent->child == pt);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
185 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
186 pt->parent->child = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
187 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
188
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
189 pt->prev = pt->next = pt->parent = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
190 if(free_it)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
191 play_tree_free(pt,with_childs);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
192
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
193 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
194
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
195 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
196 play_tree_set_child(play_tree_t* pt, play_tree_t* child) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
197 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
198
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
199 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
200 assert(pt != NULL);
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
201 assert(pt->entry_type == PLAY_TREE_ENTRY_NODE);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
202 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
203
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
204 //DEBUG_FF: Where are the childs freed ?
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
205 // Attention in using this function!
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
206 for(iter = pt->child ; iter != NULL ; iter = iter->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
207 iter->parent = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
208
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
209 // Go back to first one
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
210 for(iter = child ; iter->prev != NULL ; iter = iter->prev)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
211 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
212
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
213 pt->child = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
214
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
215 for( ; iter != NULL ; iter= iter->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
216 iter->parent = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
217
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
218 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
219
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
220 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
221 play_tree_set_parent(play_tree_t* pt, play_tree_t* parent) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
222 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
223
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
224 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
225 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
226 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
227
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
228 if(pt->parent)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
229 pt->parent->child = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
230
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
231 for(iter = pt ; iter != NULL ; iter = iter->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
232 iter->parent = parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
233
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
234 if(pt->prev) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
235 for(iter = pt->prev ; iter->prev != NULL ; iter = iter->prev)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
236 iter->parent = parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
237 iter->parent = parent;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
238 parent->child = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
239 } else
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
240 parent->child = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
241
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
242 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
243
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
244
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
245 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
246 play_tree_add_file(play_tree_t* pt,char* file) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
247 int n = 0;
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
248 char* e;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
249
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
250 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
251 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
252 assert(pt->child == NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
253 assert(file != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
254 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
255
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
256 if(pt->entry_type != PLAY_TREE_ENTRY_NODE &&
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
257 pt->entry_type != PLAY_TREE_ENTRY_FILE)
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
258 return;
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
259
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
260 if(pt->files) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
261 for(n = 0 ; pt->files[n] != NULL ; n++)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
262 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
263 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
264 pt->files = (char**)realloc(pt->files,(n+2)*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
265 if(pt->files ==NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
266 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",(n+2)*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
267 return;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
268 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
269
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
270 e = pt->files[n] = strdup(file);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
271 pt->files[n+1] = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
272
9748
f74f8b809697 Use new config headers
albeu
parents: 9290
diff changeset
273 pt->entry_type = PLAY_TREE_ENTRY_FILE;
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
274
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
275 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
276
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
277 int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
278 play_tree_remove_file(play_tree_t* pt,char* file) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
279 int n,f = -1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
280
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
281 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
282 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
283 assert(file != NULL);
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
284 assert(pt->entry_type != PLAY_TREE_ENTRY_NODE);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
285 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
286
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
287 for(n=0 ; pt->files[n] != NULL ; n++) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
288 if(strcmp(file,pt->files[n]) == 0)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
289 f = n;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
290 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
291
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
292 if(f < 0) // Not found
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
293 return 0;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
294
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
295 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
296 assert(n > f);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
297 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
298
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
299 free(pt->files[f]);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
300
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
301 if(n > 1) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
302 memmove(&pt->files[f],&pt->files[f+1],(n-f)*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
303 pt->files = (char**)realloc(pt->files,n*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
304 if(pt->files == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
305 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",(n+2)*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
306 return -1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
307 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
308 } else {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
309 free(pt->files);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
310 pt->files = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
311 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
312
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
313 return 1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
314 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
315
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
316 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
317 play_tree_set_param(play_tree_t* pt, char* name, char* val) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
318 int n = 0,ni = -1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
319
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
320 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
321 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
322 assert(name != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
323 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
324
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
325 if(pt->params) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
326 for( ; pt->params[n].name != NULL ; n++) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
327 if(strcasecmp(pt->params[n].name,name) == 0)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
328 ni = n;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
329 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
330 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
331
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
332 if(ni > 0) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
333 if(pt->params[n].value != NULL) free(pt->params[n].value);
4254
f04c49aa2408 Few bug fix and improvment in config/playtree system
albeu
parents: 4220
diff changeset
334 pt->params[n].value = val != NULL ? strdup(val) : NULL;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
335 return;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
336 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
337
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
338 pt->params = (play_tree_param_t*)realloc(pt->params,(n+2)*sizeof(play_tree_param_t));
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
339 if(pt->params == NULL) {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
340 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't realloc params (%d bytes of memory)\n",(n+2)*sizeof(play_tree_param_t));
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
341 return;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
342 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
343 pt->params[n].name = strdup(name);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
344 pt->params[n].value = val != NULL ? strdup(val) : NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
345 memset(&pt->params[n+1],0,sizeof(play_tree_param_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
346
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
347 return;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
348 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
349
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
350 int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
351 play_tree_unset_param(play_tree_t* pt, char* name) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
352 int n,ni = -1;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
353
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
354 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
355 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
356 assert(name != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
357 assert(pt->params != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
358 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
359
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
360 for(n = 0 ; pt->params[n].name != NULL ; n++) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
361 if(strcasecmp(pt->params[n].name,name) == 0)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
362 ni = n;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
363 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
364
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
365 if(ni < 0)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
366 return 0;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
367
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
368 if(pt->params[ni].name) free(pt->params[ni].name);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
369 if(pt->params[ni].value) free(pt->params[ni].value);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
370
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
371 if(n > 1) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
372 memmove(&pt->params[ni],&pt->params[ni+1],(n-ni)*sizeof(play_tree_param_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
373 pt->params = (play_tree_param_t*)realloc(pt->params,n*sizeof(play_tree_param_t));
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
374 if(pt->params == NULL) {
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
375 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",n*sizeof(play_tree_param_t));
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
376 return -1;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
377 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
378 } else {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
379 free(pt->params);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
380 pt->params = NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
381 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
382
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
383 return 1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
384 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
385
5217
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
386 void
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
387 play_tree_set_params_from(play_tree_t* dest,play_tree_t* src) {
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
388 int i;
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
389
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
390 #ifdef MP_DEBUG
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
391 assert(dest != NULL);
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
392 assert(src != NULL);
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
393 #endif
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
394
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
395 if(!src->params)
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
396 return;
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
397
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
398 for(i = 0; src->params[i].name != NULL ; i++)
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
399 play_tree_set_param(dest,src->params[i].name,src->params[i].value);
10394
59982e3c403b Fix -shuffle with remote playlist
albeu
parents: 9748
diff changeset
400 if(src->flags & PLAY_TREE_RND) // pass the random flag too
59982e3c403b Fix -shuffle with remote playlist
albeu
parents: 9748
diff changeset
401 dest->flags |= PLAY_TREE_RND;
5217
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
402
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
403 }
3e7152b383ca Set the params given to a playlist url to the playlist
albeu
parents: 4974
diff changeset
404
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
405 // all childs if deep < 0
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
406 void
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
407 play_tree_set_flag(play_tree_t* pt, int flags , int deep) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
408 play_tree_t* i;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
409
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
410 pt->flags |= flags;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
411
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
412 if(deep && pt->child) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
413 if(deep > 0) deep--;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
414 for(i = pt->child ; i ; i = i->next)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
415 play_tree_set_flag(i,flags,deep);
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
416 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
417 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
418
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
419 void
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
420 play_tree_unset_flag(play_tree_t* pt, int flags , int deep) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
421 play_tree_t* i;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
422
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
423 pt->flags &= ~flags;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
424
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
425 if(deep && pt->child) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
426 if(deep > 0) deep--;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
427 for(i = pt->child ; i ; i = i->next)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
428 play_tree_unset_flag(i,flags,deep);
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
429 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
430 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
431
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
432
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
433 //////////////////////////////////// ITERATOR //////////////////////////////////////
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
434
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
435 static void
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
436 play_tree_iter_push_params(play_tree_iter_t* iter) {
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
437 int n;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
438 play_tree_t* pt;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
439 #ifdef MP_DEBUG
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
440 assert(iter != NULL);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
441 assert(iter->config != NULL);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
442 assert(iter->tree != NULL);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
443 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
444
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
445 pt = iter->tree;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
446
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
447 // We always push a config because we can set some option
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
448 // while playing
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
449 m_config_push(iter->config);
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
450
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
451 if(pt->params == NULL)
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
452 return;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
453
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
454
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
455 for(n = 0; pt->params[n].name != NULL ; n++) {
4292
1cee88ee8db5 Bug fix for subconfig option. A -tv option containing the on parameter
albeu
parents: 4268
diff changeset
456 int e;
1cee88ee8db5 Bug fix for subconfig option. A -tv option containing the on parameter
albeu
parents: 4268
diff changeset
457 if((e = m_config_set_option(iter->config,pt->params[n].name,pt->params[n].value)) < 0) {
1cee88ee8db5 Bug fix for subconfig option. A -tv option containing the on parameter
albeu
parents: 4268
diff changeset
458 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Error %d while setting option '%s' with value '%s'\n",e,
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
459 pt->params[n].name,pt->params[n].value);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
460 }
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
461 }
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
462
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
463 if(!pt->child)
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
464 iter->entry_pushed = 1;
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
465 return;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
466 }
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
467
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
468 play_tree_iter_t*
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
469 play_tree_iter_new(play_tree_t* pt,m_config_t* config) {
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
470 play_tree_iter_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
471
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
472 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
473 assert(pt != NULL);
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
474 assert(config != NULL);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
475 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
476
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
477 if( ! play_tree_is_valid(pt))
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
478 return NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
479
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
480 iter = (play_tree_iter_t*)calloc(1,sizeof(play_tree_iter_t));
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
481 if(! iter) {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
482 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate new iterator (%d bytes of memory)\n",sizeof(play_tree_iter_t));
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
483 return NULL;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
484 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
485 iter->root = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
486 iter->tree = NULL;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
487 iter->config = config;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
488
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
489 if(pt->parent)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
490 iter->loop = pt->parent->loop;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
491
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
492 return iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
493 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
494
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
495 void
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
496 play_tree_iter_free(play_tree_iter_t* iter) {
4960
d3d05270c09d workaround for gui a short time.
pontscho
parents: 4781
diff changeset
497
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
498 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
499 assert(iter != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
500 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
501
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
502 if(iter->status_stack) {
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
503 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
504 assert(iter->stack_size > 0);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
505 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
506 free(iter->status_stack);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
507 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
508
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
509 free(iter);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
510 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
511
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
512 static play_tree_t*
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
513 play_tree_rnd_step(play_tree_t* pt) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
514 int count = 0;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
515 int r;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
516 play_tree_t *i,*head;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
517
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
518 // Count how many free choice we have
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
519 for(i = pt ; i->prev ; i = i->prev)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
520 if(!(i->flags & PLAY_TREE_RND_PLAYED)) count++;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
521 head = i;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
522 if(!(i->flags & PLAY_TREE_RND_PLAYED)) count++;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
523 for(i = pt->next ; i ; i = i->next)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
524 if(!(i->flags & PLAY_TREE_RND_PLAYED)) count++;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
525
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
526 if(!count) return NULL;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
527
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
528 r = (int)((count-1.0) * rand() / RAND_MAX);
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
529
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
530 for(i = head ; i ; i=i->next) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
531 if(!(i->flags & PLAY_TREE_RND_PLAYED)) r--;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
532 if(r < 0) return i;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
533 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
534
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
535 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Random stepping error\n");
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
536 return NULL;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
537 }
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
538
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
539
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
540 int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
541 play_tree_iter_step(play_tree_iter_t* iter, int d,int with_nodes) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
542 play_tree_t* pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
543
5651
b8d8d72776f2 fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents: 5217
diff changeset
544 if ( !iter ) return PLAY_TREE_ITER_ENTRY;
b8d8d72776f2 fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents: 5217
diff changeset
545 if ( !iter->root ) return PLAY_TREE_ITER_ENTRY;
b8d8d72776f2 fix playlist bug with gui and rewrite mousecursor show/hide code
pontscho
parents: 5217
diff changeset
546
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
547 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
548 assert(iter != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
549 assert(iter->root != NULL);
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
550 //printf("PT : Stepping = %d\n",d);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
551 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
552
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
553 if(iter->tree == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
554 iter->tree = iter->root;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
555 return play_tree_iter_step(iter,0,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
556 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
557
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
558 if(iter->config && iter->entry_pushed > 0) {
4781
e370779ac77f In the good way this time, (1 and 0 was swaped 10*10^10l for me ;))
albeu
parents: 4768
diff changeset
559 iter->entry_pushed = 0;
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
560 m_config_pop(iter->config);
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
561 }
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
562
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
563 if(iter->tree->parent && (iter->tree->parent->flags & PLAY_TREE_RND))
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
564 iter->mode = PLAY_TREE_ITER_RND;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
565 else
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
566 iter->mode = PLAY_TREE_ITER_NORMAL;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
567
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
568 iter->file = -1;
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
569 if(iter->mode == PLAY_TREE_ITER_RND)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
570 pt = play_tree_rnd_step(iter->tree);
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
571 else if( d > 0 ) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
572 int i;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
573 pt = iter->tree;
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
574 for(i = d ; i > 0 && pt ; i--)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
575 pt = pt->next;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
576 d = i ? i : 1;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
577 } else if(d < 0) {
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
578 int i;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
579 pt = iter->tree;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
580 for(i = d ; i < 0 && pt ; i++)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
581 pt = pt->prev;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
582 d = i ? i : -1;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
583 } else
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
584 pt = iter->tree;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
585
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
586 if(pt == NULL) { // No next
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
587 // Must we loop?
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
588 if(iter->tree->parent && iter->tree->parent->loop != 0 && ((d > 0 && iter->loop != 0) || ( d < 0 && (iter->loop < 0 || iter->loop < iter->tree->parent->loop) ) ) ) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
589 if(d > 0) { // Go back to the first one
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
590 for(pt = iter->tree ; pt->prev != NULL; pt = pt->prev)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
591 /* NOTHNG */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
592 if(iter->loop > 0) iter->loop--;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
593 } else if( d < 0 ) { // Or the last one
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
594 for(pt = iter->tree ; pt->next != NULL; pt = pt->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
595 /* NOTHNG */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
596 if(iter->loop >= 0 && iter->loop < iter->tree->parent->loop) iter->loop++;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
597 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
598 iter->tree = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
599 return play_tree_iter_step(iter,0,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
600 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
601 // Go up one level
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
602 return play_tree_iter_up_step(iter,d,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
603
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
604 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
605
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
606 // Is there any valid childs ?
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
607 if(pt->child && play_tree_is_valid(pt->child)) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
608 iter->tree = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
609 if(with_nodes) { // Stop on the node
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
610 return PLAY_TREE_ITER_NODE;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
611 } else // Or follow it
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
612 return play_tree_iter_down_step(iter,d,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
613 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
614
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
615 // Is it a valid enty ?
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
616 if(! play_tree_is_valid(pt)) {
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
617 if(d == 0) { // Can this happen ? FF: Yes!
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
618 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"What to do now ???? Infinite loop if we continue\n");
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
619 return PLAY_TREE_ITER_ERROR;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
620 } // Not a valid entry : go to next one
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
621 return play_tree_iter_step(iter,d,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
622 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
623
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
624 #ifdef MP_DEBUG
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
625 assert(pt->files != NULL);
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
626 #endif
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
627
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
628 iter->tree = pt;
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
629
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
630 for(d = 0 ; iter->tree->files[d] != NULL ; d++)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
631 /* NOTHING */;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
632 iter->num_files = d;
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
633
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
634 if(iter->config) {
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
635 play_tree_iter_push_params(iter);
4781
e370779ac77f In the good way this time, (1 and 0 was swaped 10*10^10l for me ;))
albeu
parents: 4768
diff changeset
636 iter->entry_pushed = 1;
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
637 if(iter->mode == PLAY_TREE_ITER_RND)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
638 pt->flags |= PLAY_TREE_RND_PLAYED;
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
639 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
640
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
641 return PLAY_TREE_ITER_ENTRY;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
642
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
643 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
644
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
645 static int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
646 play_tree_is_valid(play_tree_t* pt) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
647 play_tree_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
648
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
649 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
650 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
651 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
652
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
653 if(pt->entry_type != PLAY_TREE_ENTRY_NODE) {
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
654 #ifdef MP_DEBUG
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
655 assert(pt->child == NULL);
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
656 #endif
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
657 return 1;
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
658 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
659 else if (pt->child != NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
660 for(iter = pt->child ; iter != NULL ; iter = iter->next) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
661 if(play_tree_is_valid(iter))
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
662 return 1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
663 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
664 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
665 return 0;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
666 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
667
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
668 int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
669 play_tree_iter_up_step(play_tree_iter_t* iter, int d,int with_nodes) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
670
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
671 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
672 assert(iter != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
673 assert(iter->tree != NULL);
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
674 //printf("PT : Go UP\n");
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
675 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
676
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
677 iter->file = -1;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
678 if(iter->tree->parent == iter->root->parent)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
679 return PLAY_TREE_ITER_END;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
680
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
681 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
682 assert(iter->tree->parent != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
683 assert(iter->stack_size > 0);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
684 assert(iter->status_stack != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
685 #endif
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
686
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
687 iter->stack_size--;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
688 iter->loop = iter->status_stack[iter->stack_size];
5802
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
689 if(iter->stack_size > 0)
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
690 iter->status_stack = (int*)realloc(iter->status_stack,iter->stack_size*sizeof(int));
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
691 else {
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
692 free(iter->status_stack);
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
693 iter->status_stack = NULL;
35f19046f809 Portability fix with realloc
albeu
parents: 5651
diff changeset
694 }
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
695 if(iter->stack_size > 0 && iter->status_stack == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
696 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",iter->stack_size*sizeof(char*));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
697 return PLAY_TREE_ITER_ERROR;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
698 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
699 iter->tree = iter->tree->parent;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
700
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
701 // Pop subtree params
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
702 if(iter->config) {
4268
83aedfde69f8 Some improvment and make -vcd -dvd options considered as playlist entry
albeu
parents: 4254
diff changeset
703 m_config_pop(iter->config);
8174
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
704 if(iter->mode == PLAY_TREE_ITER_RND)
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
705 iter->tree->flags |= PLAY_TREE_RND_PLAYED;
014e0ea85bdb Add random stepping support
albeu
parents: 8164
diff changeset
706 }
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
707
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
708 return play_tree_iter_step(iter,d,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
709 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
710
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
711 int
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
712 play_tree_iter_down_step(play_tree_iter_t* iter, int d,int with_nodes) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
713
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
714 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
715 assert(iter->tree->files == NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
716 assert(iter->tree->child != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
717 assert(iter->tree->child->parent == iter->tree);
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
718 //printf("PT : Go DOWN\n");
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
719 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
720
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
721 iter->file = -1;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
722
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
723 // Push subtree params
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
724 if(iter->config)
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
725 play_tree_iter_push_params(iter);
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
726
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
727 iter->stack_size++;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
728 iter->status_stack = (int*)realloc(iter->status_stack,iter->stack_size*sizeof(int));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
729 if(iter->status_stack == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
730 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",iter->stack_size*sizeof(int));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
731 return PLAY_TREE_ITER_ERROR;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
732 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
733 iter->status_stack[iter->stack_size-1] = iter->loop;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
734 // Set new status
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
735 iter->loop = iter->tree->loop-1;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
736 if(d >= 0)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
737 iter->tree = iter->tree->child;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
738 else {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
739 play_tree_t* pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
740 for(pt = iter->tree->child ; pt->next != NULL ; pt = pt->next)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
741 /*NOTING*/;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
742 iter->tree = pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
743 }
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
744
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
745 return play_tree_iter_step(iter,0,with_nodes);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
746 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
747
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
748 char*
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
749 play_tree_iter_get_file(play_tree_iter_t* iter, int d) {
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
750 char* entry;
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
751 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
752 assert(iter != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
753 assert(iter->tree->child == NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
754 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
755
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
756 if(iter->tree->files == NULL)
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
757 return NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
758
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
759 #ifdef MP_DEBUG
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
760 assert(iter->num_files > 0);
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
761 #endif
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
762
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
763 if(iter->file >= iter->num_files-1 || iter->file < -1)
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
764 return NULL;
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
765
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
766 if(d > 0) {
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
767 if(iter->file >= iter->num_files - 1)
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
768 iter->file = 0;
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
769 else
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
770 iter->file++;
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
771 } else if(d < 0) {
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
772 if(iter->file <= 0)
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
773 iter->file = iter->num_files - 1;
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
774 else
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
775 iter->file--;
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
776 }
9748
f74f8b809697 Use new config headers
albeu
parents: 9290
diff changeset
777 return iter->tree->files[iter->file];
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
778 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
779
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
780 play_tree_t*
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
781 play_tree_cleanup(play_tree_t* pt) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
782 play_tree_t* iter, *tmp, *first;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
783
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
784 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
785 assert(pt != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
786 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
787
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
788 if( ! play_tree_is_valid(pt)) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
789 play_tree_remove(pt,1,1);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
790 return NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
791 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
792
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
793 first = pt->child;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
794
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
795 for(iter = pt->child ; iter != NULL ; ) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
796 tmp = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
797 iter = iter->next;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
798 if(! play_tree_is_valid(tmp)) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
799 play_tree_remove(tmp,1,1);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
800 if(tmp == first) first = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
801 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
802 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
803
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
804 for(iter = first ; iter != NULL ; ) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
805 tmp = iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
806 iter = iter->next;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
807 play_tree_cleanup(tmp);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
808 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
809
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
810 return pt;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
811
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
812 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
813
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
814 play_tree_iter_t*
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
815 play_tree_iter_new_copy(play_tree_iter_t* old) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
816 play_tree_iter_t* iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
817
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
818 #ifdef MP_DEBUG
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
819 assert(old != NULL);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
820 #endif
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
821
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
822 iter = (play_tree_iter_t*)malloc(sizeof(play_tree_iter_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
823 if(iter == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
824 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",sizeof(play_tree_iter_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
825 return NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
826 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
827 ;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
828 memcpy(iter,old,sizeof(play_tree_iter_t));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
829 if(old->status_stack) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
830 iter->status_stack = (int*)malloc(old->stack_size * sizeof(int));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
831 if(iter->status_stack == NULL) {
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
832 mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",old->stack_size * sizeof(int));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
833 free(iter);
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
834 return NULL;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
835 }
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
836 memcpy(iter->status_stack,old->status_stack,iter->stack_size*sizeof(int));
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
837 }
4156
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
838 iter->config = NULL;
22fadd4022b5 playtree-based config patch by Alban Bedel <albeu@free.fr>
arpi
parents: 4050
diff changeset
839
4043
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
840 return iter;
25590564842f tree-based playlist parser code by Alban Bedel <albeu@free.fr>
arpi
parents:
diff changeset
841 }
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
842
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
843 // HIGH Level API, by Fabian Franz (mplayer@fabian-franz.de)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
844 //
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
845 play_tree_iter_t* pt_iter_create(play_tree_t** ppt, m_config_t* config)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
846 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
847 play_tree_iter_t* r=NULL;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
848 #ifdef MP_DEBUG
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
849 assert(*ppt!=NULL);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
850 #endif
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
851
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
852 *ppt=play_tree_cleanup(*ppt);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
853
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
854 if(*ppt) {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
855 r = play_tree_iter_new(*ppt,config);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
856 if (r && play_tree_iter_step(r,0,0) != PLAY_TREE_ITER_ENTRY)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
857 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
858 play_tree_iter_free(r);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
859 r = NULL;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
860 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
861 }
4220
fe2c20d52a25 Fixed a few bugs and added support for VCD/DVD/TV in playlist using virtual url
albeu
parents: 4156
diff changeset
862
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
863 return r;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
864 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
865
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
866 void pt_iter_destroy(play_tree_iter_t** iter)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
867 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
868 if (iter && *iter)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
869 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
870 free(*iter);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
871 iter=NULL;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
872 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
873 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
874
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
875 char* pt_iter_get_file(play_tree_iter_t* iter, int d)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
876 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
877 int i=0;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
878 char* r;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
879
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
880 if (iter==NULL)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
881 return NULL;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
882
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
883 r = play_tree_iter_get_file(iter,d);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
884
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
885 while (!r && d!=0)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
886 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
887 if (play_tree_iter_step(iter,d,0) != PLAY_TREE_ITER_ENTRY)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
888 break;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
889 r=play_tree_iter_get_file(iter,d);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
890 i++;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
891 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
892
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
893 return r;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
894 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
895
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
896 void pt_iter_insert_entry(play_tree_iter_t* iter, play_tree_t* entry)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
897 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
898 play_tree_t *pt = iter->tree;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
899 #ifdef MP_DEBUG
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
900 assert(pt!=NULL);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
901 assert(entry!=NULL);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
902 assert(entry!=pt);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
903 #endif
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
904
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
905 play_tree_insert_entry(pt, entry);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
906 play_tree_set_params_from(entry,pt);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
907 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
908
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
909 void pt_iter_replace_entry(play_tree_iter_t* iter, play_tree_t* entry)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
910 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
911 play_tree_t *pt = iter->tree;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
912
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
913 pt_iter_insert_entry(iter, entry);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
914 play_tree_remove(pt, 1, 1);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
915 iter->tree=entry;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
916 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
917
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
918 //Add a new file as a new entry
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
919 void pt_add_file(play_tree_t** ppt, char* filename)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
920 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
921 play_tree_t *pt = *ppt, *entry = play_tree_new();
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
922 #ifdef MP_DEBUG
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
923 assert(entry!=NULL);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
924 #endif
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
925
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
926 play_tree_add_file(entry, filename);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
927 if (pt)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
928 play_tree_append_entry(pt, entry);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
929 else
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
930 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
931 pt=entry;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
932 *ppt=pt;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
933 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
934 play_tree_set_params_from(entry,pt);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
935 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
936
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
937 void pt_add_gui_file(play_tree_t** ppt, char* path, char* file)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
938 {
12646
9a495bdc3a1e string handling security fixes
diego
parents: 10394
diff changeset
939 char* wholename = malloc(strlen(path)+strlen(file)+2);
9290
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
940
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
941 if (wholename)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
942 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
943 strcpy(wholename, path);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
944 strcat(wholename, "/");
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
945 strcat(wholename, file);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
946 pt_add_file(ppt, wholename);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
947 free(wholename); // As pt_add_file strdups it anyway!
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
948 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
949 }
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
950
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
951 void pt_iter_goto_head(play_tree_iter_t* iter)
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
952 {
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
953 iter->tree=iter->root;
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
954 play_tree_iter_step(iter, 0, 0);
0e043196d176 this patch adds a high-level-api to playtree, allowing to use it more easily
arpi
parents: 8174
diff changeset
955 }