[FFmpeg-soc] [soc]: r4648 - concat/libavformat/pls.c
gkovacs
subversion at mplayerhq.hu
Tue Jul 7 03:41:48 CEST 2009
Author: gkovacs
Date: Tue Jul 7 03:41:48 2009
New Revision: 4648
Log:
reimplemented pls without datanode
Modified:
concat/libavformat/pls.c
Modified: concat/libavformat/pls.c
==============================================================================
--- concat/libavformat/pls.c Tue Jul 7 03:05:04 2009 (r4647)
+++ concat/libavformat/pls.c Tue Jul 7 03:41:48 2009 (r4648)
@@ -20,7 +20,6 @@
*/
#include "concatgen.h"
-#include "datanode.h"
/* The ffmpeg codecs we support, and the IDs they have in the file */
static const AVCodecTag codec_pls_tags[] = {
@@ -41,18 +40,55 @@ static int pls_probe(AVProbeData *p)
return 0;
}
-static int pls_list_files(ByteIOContext *s, PlaylistContext *ctx)
+static int pls_list_files(ByteIOContext *b, PlaylistContext *ctx)
{
- int i;
+ int i, j, c;
+ unsigned int buflen;
+ char state;
char **flist;
- StringList *l;
- DataNode *d;
- l = ff_stringlist_alloc();
- d = ff_datanode_tree_from_ini(s);
- ff_datanode_visualize(d);
- ff_datanode_filter_values_by_name(d, l, "File");
- ff_stringlist_print(l);
- ff_stringlist_export(l, &flist, &(ctx->pelist_size));
+ char buf[1024];
+ char s[5];
+ char t[] = "\nFile";
+ state = flist = buflen = i = j = 0;
+ while ((c = url_fgetc(b))) {
+ if (c == EOF)
+ break;
+ if (state == 0) {
+ s[0] = s[1];
+ s[1] = s[2];
+ s[2] = s[3];
+ s[3] = s[4];
+ s[4] = c;
+ if (s[0] == t[0] && s[1] == t[1] && s[2] == t[2] && s[3] == t[3] && s[4] == t[4])
+ state = 1;
+ }
+ else if (state == 1){
+ if (c == '=')
+ state = 2;
+ else if (c == '#')
+ state = 0;
+ }
+ else {
+ if (c == '\n' || c == '#') {
+ termfn:
+ buf[i++] = 0;
+ flist = av_fast_realloc(flist, &buflen, sizeof(*flist) * (j+2));
+ flist[j] = av_malloc(i);
+ av_strlcpy(flist[j++], buf, i);
+ i = 0;
+ state = 0;
+ s[sizeof(s)-1] = c;
+ continue;
+ }
+ else {
+ buf[i++] = c;
+ if (i >= sizeof(buf)-1)
+ goto termfn;
+ }
+ }
+ }
+ flist[j] = 0;
+ ctx->pelist_size = j;
ff_playlist_relative_paths(flist, ctx->workingdir);
ctx->pelist = av_malloc(ctx->pelist_size * sizeof(*(ctx->pelist)));
memset(ctx->pelist, 0, ctx->pelist_size * sizeof(*(ctx->pelist)));
More information about the FFmpeg-soc
mailing list