Mercurial > mplayer.hg
annotate parser-mpcmd.c @ 36682:68794f2fbf1e
Add support for default of multiple video tracks.
Some container formats like matroska support multiple video tracks, one
of which may be flagged the 'default' one which thus should be played by
default.
Works with the lavf demuxer.
author | ib |
---|---|
date | Sun, 02 Feb 2014 19:18:31 +0000 |
parents | 389d43c448b3 |
children |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
17 */ |
18265 | 18 |
19 /// \file | |
20 /// \ingroup ConfigParsers Playtree | |
21 | |
8164 | 22 #include "config.h" |
23 | |
24 #include <stdio.h> | |
25 #include <stdlib.h> | |
26 #include <string.h> | |
35903 | 27 #include <strings.h> |
8164 | 28 #include <errno.h> |
29 | |
30 #ifdef MP_DEBUG | |
31 #include <assert.h> | |
32 #endif | |
33 | |
34 #include "mp_msg.h" | |
21312 | 35 #include "help_mp.h" |
8164 | 36 #include "m_option.h" |
37 #include "m_config.h" | |
38 #include "playtree.h" | |
26263 | 39 #include "parser-mpcmd.h" |
30675
059153d06619
Add header for macosx_finder_args() instead of forward declaring it.
diego
parents:
30429
diff
changeset
|
40 #include "osdep/macosx_finder_args.h" |
8164 | 41 |
42 static int mode = 0; | |
43 | |
44 #define GLOBAL 0 | |
45 #define LOCAL 1 | |
46 #define DROP_LOCAL 2 | |
47 | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
48 #define dvd_range(a) (a>0 && a<256) |
8164 | 49 #define UNSET_GLOBAL (mode = LOCAL) |
50 // Use this 1 if you want to have only global option (no per file option) | |
51 // #define UNSET_GLOBAL (mode = GLOBAL) | |
52 | |
53 | |
54 static int is_entry_option(char *opt, char *param, play_tree_t** ret) { | |
55 play_tree_t* entry = NULL; | |
56 | |
57 *ret = NULL; | |
58 | |
59 if(strcasecmp(opt,"playlist") == 0) { // We handle playlist here | |
60 if(!param) | |
61 return M_OPT_MISSING_PARAM; | |
12267 | 62 |
8164 | 63 entry = parse_playlist_file(param); |
64 if(!entry) | |
12267 | 65 return -1; |
66 else { | |
67 *ret=entry; | |
68 return 1; | |
69 } | |
8164 | 70 } |
71 return 0; | |
72 } | |
73 | |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
74 static inline void add_entry(play_tree_t **last_parentp, |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
75 play_tree_t **last_entryp, play_tree_t *entry) { |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
76 if(*last_entryp == NULL) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
77 play_tree_set_child(*last_parentp,entry); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
78 else |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
79 play_tree_append_entry(*last_entryp,entry); |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
80 *last_entryp = entry; |
10513 | 81 } |
82 | |
18265 | 83 /// Setup the \ref Config from command line arguments and build a playtree. |
84 /** \ingroup ConfigParsers | |
85 */ | |
8164 | 86 play_tree_t* |
87 m_config_parse_mp_command_line(m_config_t *config, int argc, char **argv) | |
88 { | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
89 int i,j,start_title=-1,end_title=-1; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
90 char *opt,*splitpos=NULL; |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
91 char entbuf[15]; |
8164 | 92 int no_more_opts = 0; |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
93 int opt_exit = 0; // flag indicating whether mplayer should exit without playing anything |
8164 | 94 play_tree_t *last_parent, *last_entry = NULL, *root; |
95 | |
96 #ifdef MP_DEBUG | |
97 assert(config != NULL); | |
98 assert(argv != NULL); | |
99 assert(argc >= 1); | |
100 #endif | |
101 | |
102 config->mode = M_COMMAND_LINE; | |
103 mode = GLOBAL; | |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27394
diff
changeset
|
104 #ifdef CONFIG_MACOSX_FINDER |
13909
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
105 root=macosx_finder_args(config, argc, argv); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
106 if(root) |
13909
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
107 return root; |
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
108 #endif |
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
109 |
8164 | 110 last_parent = root = play_tree_new(); |
111 | |
112 for (i = 1; i < argc; i++) { | |
113 //next: | |
114 opt = argv[i]; | |
115 /* check for -- (no more options id.) except --help! */ | |
15245
4fdfe0860cc5
Make "mplayer -- --a" play the file --a instead of bailing out with a useless
reimar
parents:
14541
diff
changeset
|
116 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) == 0)) |
8164 | 117 { |
118 no_more_opts = 1; | |
119 if (i+1 >= argc) | |
120 { | |
21312 | 121 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NoFileGivenOnCommandLine); |
8164 | 122 goto err_out; |
123 } | |
124 continue; | |
125 } | |
126 if((opt[0] == '{') && (opt[1] == '\0')) | |
127 { | |
128 play_tree_t* entry = play_tree_new(); | |
129 UNSET_GLOBAL; | |
8175 | 130 if(last_parent->flags & PLAY_TREE_RND) |
131 entry->flags |= PLAY_TREE_RND; | |
8164 | 132 if(last_entry == NULL) { |
133 play_tree_set_child(last_parent,entry); | |
134 } else { | |
135 play_tree_append_entry(last_entry,entry); | |
136 last_entry = NULL; | |
137 } | |
138 last_parent = entry; | |
139 continue; | |
140 } | |
141 | |
142 if((opt[0] == '}') && (opt[1] == '\0')) | |
143 { | |
144 if( ! last_parent || ! last_parent->parent) { | |
145 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "too much }-\n"); | |
146 goto err_out; | |
147 } | |
148 last_entry = last_parent; | |
149 last_parent = last_entry->parent; | |
150 continue; | |
151 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
152 |
8164 | 153 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */ |
154 { | |
13932
f845791e2823
fix: when doing -loop 0 -shuffle, the arg after shuffle was skipped
reimar
parents:
13909
diff
changeset
|
155 int tmp = 0; |
8164 | 156 /* remove trailing '-' */ |
157 opt++; | |
158 | |
159 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt); | |
160 // We handle here some specific option | |
17472
526abfe30498
Make -list-options work in both MPlayer and MEncoder.
albeu
parents:
16345
diff
changeset
|
161 // Loop option when it apply to a group |
526abfe30498
Make -list-options work in both MPlayer and MEncoder.
albeu
parents:
16345
diff
changeset
|
162 if(strcasecmp(opt,"loop") == 0 && |
8164 | 163 (! last_entry || last_entry->child) ) { |
164 int l; | |
18097
df9633d451dc
avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents:
17472
diff
changeset
|
165 char* end = NULL; |
8400 | 166 l = (i+1<argc) ? strtol(argv[i+1],&end,0) : 0; |
18097
df9633d451dc
avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents:
17472
diff
changeset
|
167 if(!end || *end != '\0') { |
21312 | 168 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_TheLoopOptionMustBeAnInteger, argv[i+1]); |
8164 | 169 tmp = ERR_OUT_OF_RANGE; |
9106 | 170 } else { |
8164 | 171 play_tree_t* pt = last_entry ? last_entry : last_parent; |
172 l = l <= 0 ? -1 : l; | |
173 pt->loop = l; | |
174 tmp = 1; | |
175 } | |
8452 | 176 } else if(strcasecmp(opt,"shuffle") == 0) { |
8175 | 177 if(last_entry && last_entry->child) |
178 last_entry->flags |= PLAY_TREE_RND; | |
179 else | |
180 last_parent->flags |= PLAY_TREE_RND; | |
8452 | 181 } else if(strcasecmp(opt,"noshuffle") == 0) { |
8175 | 182 if(last_entry && last_entry->child) |
183 last_entry->flags &= ~PLAY_TREE_RND; | |
184 else | |
185 last_parent->flags &= ~PLAY_TREE_RND; | |
8164 | 186 } else { |
25227 | 187 const m_option_t* mp_opt = NULL; |
8164 | 188 play_tree_t* entry = NULL; |
189 | |
8458 | 190 tmp = is_entry_option(opt,(i+1<argc) ? argv[i + 1] : NULL,&entry); |
8164 | 191 if(tmp > 0) { // It's an entry |
192 if(entry) { | |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
193 add_entry(&last_parent,&last_entry,entry); |
8175 | 194 if((last_parent->flags & PLAY_TREE_RND) && entry->child) |
195 entry->flags |= PLAY_TREE_RND; | |
8164 | 196 UNSET_GLOBAL; |
197 } else if(mode == LOCAL) // Entry is empty we have to drop his params | |
198 mode = DROP_LOCAL; | |
199 } else if(tmp == 0) { // 'normal' options | |
200 mp_opt = m_config_get_option(config,opt); | |
201 if (mp_opt != NULL) { // Option exist | |
202 if(mode == GLOBAL || (mp_opt->flags & M_OPT_GLOBAL)) | |
8426 | 203 tmp = (i+1<argc) ? m_config_set_option(config, opt, argv[i + 1]) |
204 : m_config_set_option(config, opt, NULL); | |
8164 | 205 else { |
8458 | 206 tmp = m_config_check_option(config, opt, (i+1<argc) ? argv[i + 1] : NULL); |
8164 | 207 if(tmp >= 0 && mode != DROP_LOCAL) { |
208 play_tree_t* pt = last_entry ? last_entry : last_parent; | |
209 play_tree_set_param(pt,opt, argv[i + 1]); | |
210 } | |
211 } | |
212 } else { | |
10595
522afd56703c
100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents:
10594
diff
changeset
|
213 tmp = M_OPT_UNKNOWN; |
21312 | 214 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownOptionOnCommandLine, opt); |
8164 | 215 } |
216 } | |
217 } | |
218 | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
219 if (tmp <= M_OPT_EXIT) { |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
220 opt_exit = 1; |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
221 tmp = M_OPT_EXIT - tmp; |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
222 } else |
9792 | 223 if (tmp < 0) { |
21312 | 224 mp_msg(MSGT_CFGPARSER, MSGL_FATAL, MSGTR_ErrorParsingOptionOnCommandLine, opt); |
8164 | 225 goto err_out; |
9792 | 226 } |
8164 | 227 i += tmp; |
228 } | |
229 else /* filename */ | |
230 { | |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
231 int is_dvdnav = strstr(argv[i],"dvdnav://") != NULL; |
8164 | 232 play_tree_t* entry = play_tree_new(); |
233 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]); | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
234 // if required expand DVD filename entries like dvd://1-3 into component titles |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
235 if ( strstr(argv[i],"dvd://") != NULL || is_dvdnav) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
236 { |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
237 int offset = is_dvdnav ? 9 : 6; |
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
238 splitpos=strstr(argv[i]+offset,"-"); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
239 if(splitpos != NULL) |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
240 { |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
241 start_title=strtol(argv[i]+offset,NULL,10); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
242 if (start_title<0) { //entries like dvd://-2 start title implied 1 |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
243 end_title=abs(start_title); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
244 start_title=1; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
245 } else { |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
246 end_title=strtol(splitpos+1,NULL,10); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
247 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
248 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
249 if (dvd_range(start_title) && dvd_range(end_title) && (start_title<end_title)) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
250 { |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
251 for (j=start_title;j<=end_title;j++) |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
252 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
253 if (j!=start_title) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
254 entry=play_tree_new(); |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
255 snprintf(entbuf,sizeof(entbuf),is_dvdnav ? "dvdnav://%d" : "dvd://%d",j); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
256 play_tree_add_file(entry,entbuf); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
257 add_entry(&last_parent,&last_entry,entry); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
258 last_entry = entry; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
259 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
260 } else { |
21312 | 261 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_InvalidPlayEntry, argv[i]); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
262 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
263 |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
264 } else { // dvd:// or dvd://x entry |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
265 play_tree_add_file(entry,argv[i]); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
266 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
267 } else { |
8164 | 268 play_tree_add_file(entry,argv[i]); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
269 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
270 |
8164 | 271 // Lock stdin if it will be used as input |
272 if(strcasecmp(argv[i],"-") == 0) | |
12816 | 273 m_config_set_option(config,"noconsolecontrols",NULL); |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
274 add_entry(&last_parent,&last_entry,entry); |
8164 | 275 UNSET_GLOBAL; // We start entry specific options |
276 | |
277 } | |
278 } | |
279 | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
280 if (opt_exit) |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
281 goto err_out; |
8164 | 282 if(last_parent != root) |
283 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Missing }- ?\n"); | |
284 return root; | |
285 | |
286 err_out: | |
287 play_tree_free(root,1); | |
288 return NULL; | |
289 } |