From fcd589b12393614d684c890917f9aac794aa325a Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 24 Jun 2015 14:18:51 +0200 Subject: demux: get rid of some bstr things Change the demuxer_add_attachment() and demuxer_add_chapter() signatures to take char* instead of bstr, and everything which depends on it. --- demux/cue.c | 14 +++++++------- demux/cue.h | 4 ++-- demux/demux.c | 22 ++++++++++------------ demux/demux.h | 6 +++--- demux/demux_cue.c | 12 ++++++------ demux/demux_disc.c | 4 ++-- demux/demux_lavf.c | 7 +++---- demux/demux_mkv.c | 5 +++-- 8 files changed, 36 insertions(+), 38 deletions(-) (limited to 'demux') diff --git a/demux/cue.c b/demux/cue.c index 832d78b215..7f2ded28c8 100644 --- a/demux/cue.c +++ b/demux/cue.c @@ -90,17 +90,17 @@ static bool eat_char(struct bstr *data, char ch) } } -static struct bstr read_quoted(struct bstr *data) +static char *read_quoted(void *talloc_ctx, struct bstr *data) { *data = bstr_lstrip(*data); if (!eat_char(data, '"')) - return (struct bstr) {0}; + return NULL; int end = bstrchr(*data, '"'); if (end < 0) - return (struct bstr) {0}; + return NULL; struct bstr res = bstr_splice(*data, 0, end); *data = bstr_cut(*data, end + 1); - return res; + return bstrto0(talloc_ctx, res); } // Read a 2 digit unsigned decimal integer. @@ -163,7 +163,7 @@ struct cue_file *mp_parse_cue(struct bstr data) data = skip_utf8_bom(data); - struct bstr filename = {0}; + char *filename = NULL; // Global metadata, and copied into new tracks. struct cue_track proto_track = {0}; struct cue_track *cur_track = &proto_track; @@ -182,7 +182,7 @@ struct cue_file *mp_parse_cue(struct bstr data) break; } case CUE_TITLE: - cur_track->title = read_quoted(¶m); + cur_track->title = read_quoted(f, ¶m); break; case CUE_INDEX: { int type = read_int_2(¶m); @@ -197,7 +197,7 @@ struct cue_file *mp_parse_cue(struct bstr data) } case CUE_FILE: // NOTE: FILE comes before TRACK, so don't use cur_track->filename - filename = read_quoted(¶m); + filename = read_quoted(f, ¶m); break; } } diff --git a/demux/cue.h b/demux/cue.h index f58ca79fe5..5645dd01ab 100644 --- a/demux/cue.h +++ b/demux/cue.h @@ -30,9 +30,9 @@ struct cue_file { struct cue_track { double pregap_start; // corresponds to INDEX 00 double start; // corresponds to INDEX 01 - struct bstr filename; + char *filename; int source; - struct bstr title; + char *title; }; bool mp_probe_cue(struct bstr data); diff --git a/demux/demux.c b/demux/demux.c index 29a4fec93e..aa3308b87f 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -1217,21 +1217,19 @@ bool demux_stream_is_selected(struct sh_stream *stream) return r; } -int demuxer_add_attachment(demuxer_t *demuxer, struct bstr name, - struct bstr type, struct bstr data) +int demuxer_add_attachment(demuxer_t *demuxer, char *name, char *type, + void *data, size_t data_size) { if (!(demuxer->num_attachments % 32)) demuxer->attachments = talloc_realloc(demuxer, demuxer->attachments, struct demux_attachment, demuxer->num_attachments + 32); - struct demux_attachment *att = - demuxer->attachments + demuxer->num_attachments; - att->name = talloc_strndup(demuxer->attachments, name.start, name.len); - att->type = talloc_strndup(demuxer->attachments, type.start, type.len); - att->data = talloc_size(demuxer->attachments, data.len); - memcpy(att->data, data.start, data.len); - att->data_size = data.len; + struct demux_attachment *att = &demuxer->attachments[demuxer->num_attachments]; + att->name = talloc_strdup(demuxer->attachments, name); + att->type = talloc_strdup(demuxer->attachments, type); + att->data = talloc_memdup(demuxer->attachments, data, data_size); + att->data_size = data_size; return demuxer->num_attachments++; } @@ -1254,17 +1252,17 @@ static void demuxer_sort_chapters(demuxer_t *demuxer) sizeof(struct demux_chapter), chapter_compare); } -int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name, +int demuxer_add_chapter(demuxer_t *demuxer, char *name, double pts, uint64_t demuxer_id) { struct demux_chapter new = { .original_index = demuxer->num_chapters, .pts = pts, - .name = name.len ? bstrdup0(demuxer, name) : NULL, + .name = talloc_strdup(demuxer, name), .metadata = talloc_zero(demuxer, struct mp_tags), .demuxer_id = demuxer_id, }; - mp_tags_set_bstr(new.metadata, bstr0("TITLE"), name); + mp_tags_set_str(new.metadata, "TITLE", name); MP_TARRAY_APPEND(demuxer, demuxer->chapters, demuxer->num_chapters, new); return demuxer->num_chapters - 1; } diff --git a/demux/demux.h b/demux/demux.h index f3ed97c386..32c5d274f6 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -284,9 +284,9 @@ void demux_set_stream_autoselect(struct demuxer *demuxer, bool autoselect); void demuxer_help(struct mp_log *log); -int demuxer_add_attachment(struct demuxer *demuxer, struct bstr name, - struct bstr type, struct bstr data); -int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name, +int demuxer_add_attachment(struct demuxer *demuxer, char *name, + char *type, void *data, size_t data_size); +int demuxer_add_chapter(demuxer_t *demuxer, char *name, double pts, uint64_t demuxer_id); double demuxer_get_time_length(struct demuxer *demuxer); diff --git a/demux/demux_cue.c b/demux/demux_cue.c index 0caf66541e..2b73e36a9d 100644 --- a/demux/demux_cue.c +++ b/demux/demux_cue.c @@ -80,14 +80,14 @@ static bool try_open(struct timeline *tl, char *filename) return false; } -static bool open_source(struct timeline *tl, struct bstr filename) +static bool open_source(struct timeline *tl, char *filename) { void *ctx = talloc_new(NULL); bool res = false; struct bstr dirname = mp_dirname(tl->demuxer->filename); - struct bstr base_filename = bstr0(mp_basename(bstrdup0(ctx, filename))); + struct bstr base_filename = bstr0(mp_basename(filename)); if (!base_filename.len) { MP_WARN(tl, "CUE: Invalid audio filename in .cue file!\n"); } else { @@ -173,21 +173,21 @@ static void build_timeline(struct timeline *tl) // CUE files usually use either separate files for every single track, or // only one file for all tracks. - struct bstr *files = 0; + char **files = 0; size_t file_count = 0; for (size_t n = 0; n < track_count; n++) { struct cue_track *track = &tracks[n]; track->source = -1; for (size_t file = 0; file < file_count; file++) { - if (bstrcmp(files[file], track->filename) == 0) { + if (strcmp(files[file], track->filename) == 0) { track->source = file; break; } } if (track->source == -1) { file_count++; - files = talloc_realloc(ctx, files, struct bstr, file_count); + files = talloc_realloc(ctx, files, char *, file_count); files[file_count - 1] = track->filename; track->source = file_count - 1; } @@ -229,7 +229,7 @@ static void build_timeline(struct timeline *tl) chapters[i] = (struct demux_chapter) { .pts = timeline[i].start, // might want to include other metadata here - .name = bstrdup0(chapters, tracks[i].title), + .name = talloc_strdup(chapters, tracks[i].title), }; starttime += duration; } diff --git a/demux/demux_disc.c b/demux/demux_disc.c index 68ad3817fa..11cbea9361 100644 --- a/demux/demux_disc.c +++ b/demux/demux_disc.c @@ -282,7 +282,7 @@ static void add_stream_chapters(struct demuxer *demuxer) double p = n; if (stream_control(demuxer->stream, STREAM_CTRL_GET_CHAPTER_TIME, &p) < 1) continue; - demuxer_add_chapter(demuxer, bstr0(""), p, 0); + demuxer_add_chapter(demuxer, "", p, 0); } } @@ -301,7 +301,7 @@ static int d_open(demuxer_t *demuxer, enum demux_check check) char *t = NULL; stream_control(demuxer->stream, STREAM_CTRL_GET_DISC_NAME, &t); if (t) { - mp_tags_set_bstr(demuxer->metadata, bstr0("TITLE"), bstr0(t)); + mp_tags_set_str(demuxer->metadata, "TITLE", t); talloc_free(t); } diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 5689246114..0e868668c6 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -618,9 +618,8 @@ static void handle_stream(demuxer_t *demuxer, int i) AVDictionaryEntry *mt = av_dict_get(st->metadata, "mimetype", NULL, 0); char *mimetype = mt ? mt->value : NULL; if (mimetype) { - demuxer_add_attachment(demuxer, bstr0(filename), bstr0(mimetype), - (struct bstr){codec->extradata, - codec->extradata_size}); + demuxer_add_attachment(demuxer, filename, mimetype, + codec->extradata, codec->extradata_size); } break; } @@ -808,7 +807,7 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) for (i = 0; i < avfc->nb_chapters; i++) { AVChapter *c = avfc->chapters[i]; t = av_dict_get(c->metadata, "title", NULL, 0); - int index = demuxer_add_chapter(demuxer, t ? bstr0(t->value) : bstr0(""), + int index = demuxer_add_chapter(demuxer, t ? t : "", c->start * av_q2d(c->time_base), i); mp_tags_copy_from_av_dictionary(demuxer->chapters[index].metadata, c->metadata); } diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 9331563e30..d40a65e858 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -894,7 +894,7 @@ static int demux_mkv_read_chapters(struct demuxer *demuxer) name); if (idx == selected_edition) { - demuxer_add_chapter(demuxer, bstr0(name), chapter.start / 1e9, + demuxer_add_chapter(demuxer, name, chapter.start / 1e9, ca->chapter_uid); } if (m_chapters) { @@ -996,7 +996,8 @@ static int demux_mkv_read_attachments(demuxer_t *demuxer) } char *name = attachment->file_name; char *mime = attachment->file_mime_type; - demuxer_add_attachment(demuxer, bstr0(name), bstr0(mime), attachment->file_data); + demuxer_add_attachment(demuxer, name, mime, attachment->file_data.start, + attachment->file_data.len); MP_VERBOSE(demuxer, "Attachment: %s, %s, %zu bytes\n", name, mime, attachment->file_data.len); } -- cgit v1.2.3