Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
m3u parser: add EXT-X-KEY tag parsing
  • Loading branch information
perexg committed Nov 20, 2015
1 parent c73e807 commit 0e5c899
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/misc/m3u.c
Expand Up @@ -41,6 +41,8 @@ static char *get_m3u_str(char *data, char **res, int *last)
*last = *data;
*data = '\0';
data++;
while (*last && *data == ',')
data++;
}
*res = data;
return p;
Expand Down Expand Up @@ -121,7 +123,7 @@ htsmsg_t *parse_m3u
const char *multi_name;
int delim;
htsmsg_t *m = htsmsg_create_map();
htsmsg_t *item = NULL, *l = NULL, *t;
htsmsg_t *item = NULL, *l = NULL, *t, *key = NULL;
char buf[512];

while (*data && *data <= ' ') data++;
Expand Down Expand Up @@ -209,15 +211,24 @@ htsmsg_t *parse_m3u
if (*data != ',') break;
}
}
if (item == NULL)
item = htsmsg_create_map();
htsmsg_add_msg(item, multi_name, t);
if (strcmp(multi_name, "x-key") == 0) {
htsmsg_destroy(key);
key = t;
} else {
if (item == NULL)
item = htsmsg_create_map();
htsmsg_add_msg(item, multi_name, t);
}
data = until_eol(data);
continue;
} else if (strncmp(data, "#EXT-X-MEDIA:", 13) == 0) {
data += 13;
multi_name = "x-media";
goto multi;
} else if (strncmp(data, "#EXT-X-KEY:", 11) == 0) {
data += 11;
multi_name = "x-key";
goto multi;
} else if (strncmp(data, "#EXT-X-ENDLIST", 14) == 0) {
htsmsg_add_bool(m, "x-endlist", 1);
data = until_eol(data + 14);
Expand Down Expand Up @@ -264,11 +275,14 @@ htsmsg_t *parse_m3u
if (item) {
if (l == NULL)
l = htsmsg_create_list();
if (key)
htsmsg_add_msg(item, "x-key", htsmsg_copy(key));
htsmsg_add_msg(l, NULL, item);
item = NULL;
}
}

htsmsg_destroy(key);
if (l == NULL)
l = htsmsg_create_list();
htsmsg_add_msg(m, "items", l);
Expand Down

0 comments on commit 0e5c899

Please sign in to comment.