diff options
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 96 | ||||
-rw-r--r-- | demux/demux.h | 7 | ||||
-rw-r--r-- | demux/demux_lavf.c | 59 | ||||
-rw-r--r-- | demux/demux_libass.c | 2 | ||||
-rw-r--r-- | demux/demux_mf.c | 10 | ||||
-rw-r--r-- | demux/demux_mkv.c | 297 | ||||
-rw-r--r-- | demux/demux_raw.c | 5 | ||||
-rw-r--r-- | demux/demux_subreader.c | 58 | ||||
-rw-r--r-- | demux/ebml.c | 72 | ||||
-rw-r--r-- | demux/ebml.h | 8 | ||||
-rw-r--r-- | demux/mf.c | 37 | ||||
-rw-r--r-- | demux/mf.h | 7 |
12 files changed, 316 insertions, 342 deletions
diff --git a/demux/demux.c b/demux/demux.c index 8d46f79391..7643b58a38 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -33,6 +33,7 @@ #include "common/av_common.h" #include "talloc.h" #include "common/msg.h" +#include "common/global.h" #include "stream/stream.h" #include "demux.h" @@ -225,7 +226,7 @@ struct demux_packet *demux_copy_packet(struct demux_packet *dp) struct sh_stream *new_sh_stream(demuxer_t *demuxer, enum stream_type type) { if (demuxer->num_streams > MAX_SH_STREAMS) { - mp_msg(MSGT_DEMUXER, MSGL_WARN, "Too many streams."); + MP_WARN(demuxer, "Too many streams."); return NULL; } @@ -353,8 +354,7 @@ int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream, if (stream->type != STREAM_VIDEO && dp->pts == MP_NOPTS_VALUE) dp->pts = dp->dts; - mp_msg(MSGT_DEMUXER, MSGL_DBG2, - "DEMUX: Append packet to %s, len=%d pts=%5.3f pos=%"PRIu64" " + MP_DBG(demuxer, "DEMUX: Append packet to %s, len=%d pts=%5.3f pos=%"PRIu64" " "[packs: A=%d V=%d S=%d]\n", stream_type_name(stream->type), dp->len, dp->pts, dp->pos, count_packs(demuxer, STREAM_AUDIO), count_packs(demuxer, STREAM_VIDEO), count_packs(demuxer, STREAM_SUB)); @@ -373,13 +373,13 @@ static bool demux_check_queue_full(demuxer_t *demux) overflow: if (!demux->warned_queue_overflow) { - mp_msg(MSGT_DEMUXER, MSGL_ERR, "\nToo many packets in the demuxer " - "packet queue (video: %d packets in %d bytes, audio: %d " - "packets in %d bytes, sub: %d packets in %d bytes).\n", - count_packs(demux, STREAM_VIDEO), count_bytes(demux, STREAM_VIDEO), - count_packs(demux, STREAM_AUDIO), count_bytes(demux, STREAM_AUDIO), - count_packs(demux, STREAM_SUB), count_bytes(demux, STREAM_SUB)); - mp_msg(MSGT_DEMUXER, MSGL_HINT, "Maybe you are playing a non-" + MP_ERR(demux, "\nToo many packets in the demuxer " + "packet queue (video: %d packets in %d bytes, audio: %d " + "packets in %d bytes, sub: %d packets in %d bytes).\n", + count_packs(demux, STREAM_VIDEO), count_bytes(demux, STREAM_VIDEO), + count_packs(demux, STREAM_AUDIO), count_bytes(demux, STREAM_AUDIO), + count_packs(demux, STREAM_SUB), count_bytes(demux, STREAM_SUB)); + MP_INFO(demux, "Maybe you are playing a non-" "interleaved stream/file or the codec failed?\n"); } demux->warned_queue_overflow = true; @@ -399,8 +399,8 @@ static void ds_get_packets(struct sh_stream *sh) { struct demux_stream *ds = sh->ds; demuxer_t *demux = sh->demuxer; - mp_msg(MSGT_DEMUXER, MSGL_DBG3, "ds_get_packets (%s) called\n", - stream_type_name(sh->type)); + MP_TRACE(demux, "ds_get_packets (%s) called\n", + stream_type_name(sh->type)); while (1) { if (ds->head) return; @@ -411,8 +411,8 @@ static void ds_get_packets(struct sh_stream *sh) if (!demux_fill_buffer(demux)) break; // EOF } - mp_msg(MSGT_DEMUXER, MSGL_V, "ds_get_packets: EOF reached (stream: %s)\n", - stream_type_name(sh->type)); + MP_VERBOSE(demux, "ds_get_packets: EOF reached (stream: %s)\n", + stream_type_name(sh->type)); ds->eof = 1; } @@ -476,16 +476,15 @@ bool demux_stream_eof(struct sh_stream *sh) // ==================================================================== -void demuxer_help(void) +void demuxer_help(struct mp_log *log) { int i; - mp_msg(MSGT_DEMUXER, MSGL_INFO, "Available demuxers:\n"); - mp_msg(MSGT_DEMUXER, MSGL_INFO, " demuxer: info:\n"); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DEMUXERS\n"); + mp_info(log, "Available demuxers:\n"); + mp_info(log, " demuxer: info:\n"); for (i = 0; demuxer_list[i]; i++) { - mp_msg(MSGT_DEMUXER, MSGL_INFO, "%10s %s\n", - demuxer_list[i]->name, demuxer_list[i]->desc); + mp_info(log, "%10s %s\n", + demuxer_list[i]->name, demuxer_list[i]->desc); } } @@ -500,7 +499,8 @@ static const char *d_level(enum demux_check level) abort(); } -static struct demuxer *open_given_type(struct MPOpts *opts, +static struct demuxer *open_given_type(struct mpv_global *global, + struct mp_log *log, const struct demuxer_desc *desc, struct stream *stream, struct demuxer_params *params, @@ -516,25 +516,26 @@ static struct demuxer *open_given_type(struct MPOpts *opts, stream->end_pos > 0, .accurate_seek = true, .filepos = -1, - .opts = opts, + .opts = global->opts, + .global = global, + .log = mp_log_new(demuxer, log, desc->name), .filename = talloc_strdup(demuxer, stream->url), .metadata = talloc_zero(demuxer, struct mp_tags), }; demuxer->params = params; // temporary during open() stream_seek(stream, stream->start_pos); - mp_msg(MSGT_DEMUXER, MSGL_V, "Trying demuxer: %s (force-level: %s)\n", - desc->name, d_level(check)); + mp_verbose(log, "Trying demuxer: %s (force-level: %s)\n", + desc->name, d_level(check)); int ret = demuxer->desc->open(demuxer, check); if (ret >= 0) { demuxer->params = NULL; if (demuxer->filetype) - mp_msg(MSGT_DEMUXER, MSGL_INFO, "Detected file format: %s (%s)\n", + mp_info(log, "Detected file format: %s (%s)\n", demuxer->filetype, desc->desc); else - mp_msg(MSGT_DEMUXER, MSGL_INFO, "Detected file format: %s\n", - desc->desc); + mp_info(log, "Detected file format: %s\n", desc->desc); if (stream_manages_timeline(demuxer->stream)) { // Incorrect, but fixes some behavior with DVD/BD demuxer->ts_resets_possible = false; @@ -548,8 +549,8 @@ static struct demuxer *open_given_type(struct MPOpts *opts, demux_info_update(demuxer); // Pretend we can seek if we can't seek, but there's a cache. if (!demuxer->seekable && stream->uncached_stream) { - mp_msg(MSGT_DEMUXER, MSGL_WARN, - "File is not seekable, but there's a cache: enabling seeking.\n"); + mp_warn(log, + "File is not seekable, but there's a cache: enabling seeking.\n"); demuxer->seekable = true; } return demuxer; @@ -564,10 +565,13 @@ static const int d_request[] = {DEMUX_CHECK_REQUEST, -1}; static const int d_force[] = {DEMUX_CHECK_FORCE, -1}; struct demuxer *demux_open(struct stream *stream, char *force_format, - struct demuxer_params *params, struct MPOpts *opts) + struct demuxer_params *params, + struct mpv_global *global) { const int *check_levels = d_normal; const struct demuxer_desc *check_desc = NULL; + struct mp_log *log = mp_log_new(NULL, global->log, "!demux"); + struct demuxer *demuxer = NULL; if (!force_format) force_format = stream->demuxer; @@ -583,9 +587,8 @@ struct demuxer *demux_open(struct stream *stream, char *force_format, check_desc = demuxer_list[n]; } if (!check_desc) { - mp_msg(MSGT_DEMUXER, MSGL_ERR, "Demuxer %s does not exist.\n", - force_format); - return NULL; + mp_err(log, "Demuxer %s does not exist.\n", force_format); + goto done; } } @@ -599,15 +602,16 @@ struct demuxer *demux_open(struct stream *stream, char *force_format, for (int n = 0; demuxer_list[n]; n++) { const struct demuxer_desc *desc = demuxer_list[n]; if (!check_desc || desc == check_desc) { - struct demuxer *demuxer = open_given_type(opts, desc, stream, - params, level); + demuxer = open_given_type(global, log, desc, stream, params, level); if (demuxer) - return demuxer; + goto done; } } } - return NULL; +done: + talloc_free(log); + return demuxer; } void demux_flush(demuxer_t *demuxer) @@ -620,7 +624,7 @@ void demux_flush(demuxer_t *demuxer) int demux_seek(demuxer_t *demuxer, float rel_seek_secs, int flags) { if (!demuxer->seekable) { - mp_msg(MSGT_DEMUXER, MSGL_WARN, "Cannot seek in this file.\n"); + MP_WARN(demuxer, "Cannot seek in this file.\n"); return 0; } @@ -716,7 +720,7 @@ int demux_info_add_bstr(demuxer_t *demuxer, struct bstr opt, struct bstr param) if (oldval) { if (bstrcmp0(param, oldval) == 0) return 0; - mp_msg(MSGT_DEMUX, MSGL_INFO, "Demuxer info %.*s changed to %.*s\n", + MP_INFO(demuxer, "Demuxer info %.*s changed to %.*s\n", BSTR_P(opt), BSTR_P(param)); } @@ -732,16 +736,16 @@ int demux_info_print(demuxer_t *demuxer) if (!info || !info->num_keys) return 0; - mp_msg(MSGT_DEMUX, MSGL_INFO, "Clip info:\n"); + MP_INFO(demuxer, "Clip info:\n"); for (n = 0; n < info->num_keys; n++) { - mp_msg(MSGT_DEMUX, MSGL_INFO, " %s: %s\n", info->keys[n], - info->values[n]); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CLIP_INFO_NAME%d=%s\n", n, - info->keys[n]); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CLIP_INFO_VALUE%d=%s\n", n, + MP_INFO(demuxer, " %s: %s\n", info->keys[n], info->values[n]); + MP_SMODE(demuxer, "ID_CLIP_INFO_NAME%d=%s\n", n, + info->keys[n]); + MP_SMODE(demuxer, "ID_CLIP_INFO_VALUE%d=%s\n", n, + info->values[n]); } - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CLIP_INFO_N=%d\n", n); + MP_SMODE(demuxer, "ID_CLIP_INFO_N=%d\n", n); return 0; } diff --git a/demux/demux.h b/demux/demux.h index 6d5253786f..7b25032011 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -194,6 +194,8 @@ typedef struct demuxer { void *priv; // demuxer-specific internal data struct MPOpts *opts; + struct mpv_global *global; + struct mp_log *log; struct demuxer_params *params; } demuxer_t; @@ -227,7 +229,8 @@ bool demux_stream_eof(struct sh_stream *sh); struct sh_stream *new_sh_stream(struct demuxer *demuxer, enum stream_type type); struct demuxer *demux_open(struct stream *stream, char *force_format, - struct demuxer_params *params, struct MPOpts *opts); + struct demuxer_params *params, + struct mpv_global *global); void demux_flush(struct demuxer *demuxer); int demux_seek(struct demuxer *demuxer, float rel_seek_secs, int flags); @@ -247,7 +250,7 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream, bool selected); void demuxer_enable_autoselect(struct demuxer *demuxer); -void demuxer_help(void); +void demuxer_help(struct mp_log *log); int demuxer_add_attachment(struct demuxer *demuxer, struct bstr name, struct bstr type, struct bstr data); diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 9057284c1e..ceef14f4d0 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -121,8 +121,7 @@ static int mp_read(void *opaque, uint8_t *buf, int size) ret = stream_read(stream, buf, size); - mp_msg(MSGT_HEADER, MSGL_DBG2, - "%d=mp_read(%p, %p, %d), pos: %"PRId64", eof:%d\n", + MP_DBG(demuxer, "%d=mp_read(%p, %p, %d), pos: %"PRId64", eof:%d\n", ret, stream, buf, size, stream_tell(stream), stream->eof); return ret; } @@ -132,7 +131,7 @@ static int64_t mp_seek(void *opaque, int64_t pos, int whence) struct demuxer *demuxer = opaque; struct stream *stream = demuxer->stream; int64_t current_pos; - mp_msg(MSGT_HEADER, MSGL_DBG2, "mp_seek(%p, %"PRId64", %d)\n", + MP_DBG(demuxer, "mp_seek(%p, %"PRId64", %d)\n", stream, pos, whence); if (whence == SEEK_CUR) pos += stream_tell(stream); @@ -171,12 +170,12 @@ static int64_t mp_read_seek(void *opaque, int stream_idx, int64_t ts, int flags) return ret; } -static void list_formats(void) +static void list_formats(struct demuxer *demuxer) { - mp_msg(MSGT_DEMUX, MSGL_INFO, "Available lavf input formats:\n"); + MP_INFO(demuxer, "Available lavf input formats:\n"); AVInputFormat *fmt = NULL; while ((fmt = av_iformat_next(fmt))) - mp_msg(MSGT_DEMUX, MSGL_INFO, "%15s : %s\n", fmt->name, fmt->long_name); + MP_INFO(demuxer, "%15s : %s\n", fmt->name, fmt->long_name); } static char *remove_prefix(char *s, const char **prefixes) @@ -206,7 +205,7 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) priv->filename = s->url; if (!priv->filename) { priv->filename = "mp:unknown"; - mp_msg(MSGT_DEMUX, MSGL_WARN, "Stream url is not set!\n"); + MP_WARN(demuxer, "Stream url is not set!\n"); } priv->filename = remove_prefix(priv->filename, prefixes); @@ -216,8 +215,7 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) // always require filename in the form "format:filename" char *sep = strchr(priv->filename, ':'); if (!sep) { - mp_msg(MSGT_DEMUX, MSGL_FATAL, - "Must specify filename in 'format:filename' form\n"); + MP_FATAL(demuxer, "Must specify filename in 'format:filename' form\n"); return -1; } avdevice_format = talloc_strndup(priv, priv->filename, @@ -244,15 +242,15 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) format = avdevice_format; if (format) { if (strcmp(format, "help") == 0) { - list_formats(); + list_formats(demuxer); return -1; } priv->avif = av_find_input_format(format); if (!priv->avif) { - mp_msg(MSGT_DEMUX, MSGL_FATAL, "Unknown lavf format %s\n", format); + MP_FATAL(demuxer, "Unknown lavf format %s\n", format); return -1; } - mp_msg(MSGT_DEMUX, MSGL_INFO, "Forced lavf %s demuxer\n", + MP_INFO(demuxer, "Forced lavf %s demuxer\n", priv->avif->long_name); goto success; } @@ -284,7 +282,7 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) priv->avif = av_probe_input_format2(&avpd, avpd.buf_size > 0, &score); if (priv->avif) { - mp_msg(MSGT_HEADER, MSGL_V, "Found '%s' at score=%d size=%d.\n", + MP_VERBOSE(demuxer, "Found '%s' at score=%d size=%d.\n", priv->avif->name, score, avpd.buf_size); if (score >= min_probe) @@ -305,7 +303,7 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) if (priv->avif && !format) { for (int n = 0; format_blacklist[n]; n++) { if (strcmp(format_blacklist[n], priv->avif->name) == 0) { - mp_msg(MSGT_HEADER, MSGL_V, "Format blacklisted.\n"); + MP_VERBOSE(demuxer, "Format blacklisted.\n"); priv->avif = NULL; break; } @@ -313,8 +311,7 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) } if (!priv->avif) { - mp_msg(MSGT_HEADER, MSGL_V, - "No format found, try lowering probescore or forcing the format.\n"); + MP_VERBOSE(demuxer, "No format found, try lowering probescore or forcing the format.\n"); return -1; } @@ -444,7 +441,7 @@ static void handle_stream(demuxer_t *demuxer, int i) // This also applies to vfw-muxed mkv, but we can't detect these easily. sh_video->avi_dts = matches_avinputformat_name(priv, "avi"); - mp_msg(MSGT_DEMUX, MSGL_DBG2, "aspect= %d*%d/(%d*%d)\n", + MP_DBG(demuxer, "aspect= %d*%d/(%d*%d)\n", codec->width, codec->sample_aspect_ratio.num, codec->height, codec->sample_aspect_ratio.den); break; @@ -542,8 +539,7 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) if (lavfdopts->probesize) { if (av_opt_set_int(avfc, "probesize", lavfdopts->probesize, 0) < 0) - mp_msg(MSGT_HEADER, MSGL_ERR, - "demux_lavf, couldn't set option probesize to %u\n", + MP_ERR(demuxer, "demux_lavf, couldn't set option probesize to %u\n", lavfdopts->probesize); } @@ -554,14 +550,13 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) if (analyze_duration > 0) { if (av_opt_set_int(avfc, "analyzeduration", analyze_duration * AV_TIME_BASE, 0) < 0) - mp_msg(MSGT_HEADER, MSGL_ERR, "demux_lavf, couldn't set option " + MP_ERR(demuxer, "demux_lavf, couldn't set option " "analyzeduration to %f\n", analyze_duration); } if (lavfdopts->avopt) { if (parse_avopts(avfc, lavfdopts->avopt) < 0) { - mp_msg(MSGT_HEADER, MSGL_ERR, - "Your options /%s/ look like gibberish to me pal\n", + MP_ERR(demuxer, "Your options /%s/ look like gibberish to me pal\n", lavfdopts->avopt); return -1; } @@ -601,27 +596,25 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) } if (avformat_open_input(&avfc, priv->filename, priv->avif, &dopts) < 0) { - mp_msg(MSGT_HEADER, MSGL_ERR, - "LAVF_header: avformat_open_input() failed\n"); + MP_ERR(demuxer, "LAVF_header: avformat_open_input() failed\n"); av_dict_free(&dopts); return -1; } t = NULL; while ((t = av_dict_get(dopts, "", t, AV_DICT_IGNORE_SUFFIX))) { - mp_msg(MSGT_OPEN, MSGL_V, "[lavf] Could not set demux option %s=%s\n", + MP_VERBOSE(demuxer, "[lavf] Could not set demux option %s=%s\n", t->key, t->value); } av_dict_free(&dopts); priv->avfc = avfc; if (avformat_find_stream_info(avfc, NULL) < 0) { - mp_msg(MSGT_HEADER, MSGL_ERR, - "LAVF_header: av_find_stream_info() failed\n"); + MP_ERR(demuxer, "LAVF_header: av_find_stream_info() failed\n"); return -1; } - mp_msg(MSGT_HEADER, MSGL_V, "demux_lavf: avformat_find_stream_info() " + MP_VERBOSE(demuxer, "demux_lavf: avformat_find_stream_info() " "finished after %"PRId64" bytes.\n", stream_tell(demuxer->stream)); for (i = 0; i < avfc->nb_chapters; i++) { @@ -658,13 +651,13 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) for (p = 0; p < avfc->nb_programs; p++) { AVProgram *program = avfc->programs[p]; t = av_dict_get(program->metadata, "title", NULL, 0); - mp_msg(MSGT_HEADER, MSGL_INFO, "LAVF: Program %d %s\n", + MP_INFO(demuxer, "LAVF: Program %d %s\n", program->id, t ? t->value : ""); - mp_msg(MSGT_IDENTIFY, MSGL_V, "PROGRAM_ID=%d\n", program->id); + MP_VERBOSE(demuxer, "PROGRAM_ID=%d\n", program->id); } } - mp_msg(MSGT_HEADER, MSGL_V, "LAVF: build %d\n", LIBAVFORMAT_BUILD); + MP_VERBOSE(demuxer, "LAVF: build %d\n", LIBAVFORMAT_BUILD); demuxer->ts_resets_possible = priv->avif->flags & AVFMT_TS_DISCONT; @@ -680,7 +673,7 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) { lavf_priv_t *priv = demux->priv; demux_packet_t *dp; - mp_msg(MSGT_DEMUX, MSGL_DBG2, "demux_lavf_fill_buffer()\n"); + MP_DBG(demux, "demux_lavf_fill_buffer()\n"); AVPacket *pkt = talloc(NULL, AVPacket); if (av_read_frame(priv->avfc, pkt) < 0) { @@ -737,7 +730,7 @@ static void demux_seek_lavf(demuxer_t *demuxer, float rel_seek_secs, int flags) { lavf_priv_t *priv = demuxer->priv; int avsflags = 0; - mp_msg(MSGT_DEMUX, MSGL_DBG2, "demux_seek_lavf(%p, %f, %d)\n", + MP_DBG(demuxer, "demux_seek_lavf(%p, %f, %d)\n", demuxer, rel_seek_secs, flags); if (flags & SEEK_ABSOLUTE) diff --git a/demux/demux_libass.c b/demux/demux_libass.c index f01b999d9e..15f5195cfc 100644 --- a/demux/demux_libass.c +++ b/demux/demux_libass.c @@ -73,7 +73,7 @@ static int d_check_file(struct demuxer *demuxer, enum demux_check check) bstr buf = stream_read_complete(s, NULL, 100000000); if (!buf.start) { - mp_msg(MSGT_ASS, MSGL_ERR, "Refusing to load subtitle file " + MP_ERR(demuxer, "Refusing to load subtitle file " "larger than 100 MB: %s\n", demuxer->filename); return -1; } diff --git a/demux/demux_mf.c b/demux/demux_mf.c index 876b17a025..1d80cfaa85 100644 --- a/demux/demux_mf.c +++ b/demux/demux_mf.c @@ -158,11 +158,9 @@ static const char *probe_format(mf_t *mf, enum demux_check check) } if (check == DEMUX_CHECK_REQUEST) { if (!mf_type) { - mp_msg(MSGT_DEMUX, MSGL_ERR, - "[demux_mf] file type was not set! (try --mf-type=ext)\n"); + MP_ERR(mf, "file type was not set! (try --mf-type=ext)\n"); } else { - mp_msg(MSGT_DEMUX, MSGL_ERR, - "[demux_mf] --mf-type set to an unknown codec!\n"); + MP_ERR(mf, "--mf-type set to an unknown codec!\n"); } } return NULL; @@ -175,9 +173,9 @@ static int demux_open_mf(demuxer_t *demuxer, enum demux_check check) if (strncmp(demuxer->stream->url, "mf://", 5) == 0 && demuxer->stream->type == STREAMTYPE_MF) - mf = open_mf_pattern(demuxer, demuxer->stream->url + 5); + mf = open_mf_pattern(demuxer, demuxer->log, demuxer->stream->url + 5); else { - mf = open_mf_single(demuxer, demuxer->stream->url); + mf = open_mf_single(demuxer, demuxer->log, demuxer->stream->url); int bog = 0; MP_TARRAY_APPEND(mf, mf->streams, bog, demuxer->stream); } diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 52ab592eb0..8c3189b539 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -249,7 +249,8 @@ static int aac_get_sample_rate_index(uint32_t sample_rate) return i; } -static bstr demux_mkv_decode(mkv_track_t *track, bstr data, uint32_t type) +static bstr demux_mkv_decode(struct mp_log *log, mkv_track_t *track, + bstr data, uint32_t type) { uint8_t *src = data.start; uint8_t *orig_src = src; @@ -278,8 +279,7 @@ static bstr demux_mkv_decode(mkv_track_t *track, bstr data, uint32_t type) zstream.zfree = (free_func) 0; zstream.opaque = (voidpf) 0; if (inflateInit(&zstream) != Z_OK) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] zlib initialization failed.\n"); + mp_warn(log, "zlib initialization failed.\n"); goto error; } zstream.next_in = (Bytef *) src; @@ -294,8 +294,7 @@ static bstr demux_mkv_decode(mkv_track_t *track, bstr data, uint32_t type) zstream.next_out = (Bytef *) (dest + zstream.total_out); result = inflate(&zstream, Z_NO_FLUSH); if (result != Z_OK && result != Z_STREAM_END) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] zlib decompression failed.\n"); + mp_warn(log, "zlib decompression failed.\n"); talloc_free(dest); dest = NULL; inflateEnd(&zstream); @@ -323,14 +322,12 @@ static bstr demux_mkv_decode(mkv_track_t *track, bstr data, uint32_t type) if (result == 0) break; if (!(result & AV_LZO_OUTPUT_FULL)) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] lzo decompression failed.\n"); + mp_warn(log, "lzo decompression failed.\n"); talloc_free(dest); dest = NULL; goto error; } - mp_msg(MSGT_DEMUX, MSGL_DBG2, - "[mkv] lzo decompression buffer too small.\n"); + mp_dbg(log, "lzo decompression buffer too small.\n"); dstlen *= 2; } size = dstlen - out_avail; @@ -359,17 +356,16 @@ static int demux_mkv_read_info(demuxer_t *demuxer) mkv_d->duration = 0; struct ebml_info info = {0}; - struct ebml_parse_ctx parse_ctx = {0}; + struct ebml_parse_ctx parse_ctx = {demuxer->log}; if (ebml_read_element(s, &parse_ctx, &info, &ebml_info_desc) < 0) return -1; if (info.n_timecode_scale) { mkv_d->tc_scale = info.timecode_scale; - mp_msg(MSGT_DEMUX, MSGL_V, - "[mkv] | + timecode scale: %" PRIu64 "\n", mkv_d->tc_scale); + MP_VERBOSE(demuxer, "| + timecode scale: %" PRIu64 "\n", mkv_d->tc_scale); } if (info.n_duration) { mkv_d->duration = info.duration * mkv_d->tc_scale / 1e9; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + duration: %.3fs\n", + MP_VERBOSE(demuxer, "| + duration: %.3fs\n", mkv_d->duration); } if (info.n_title) { @@ -378,16 +374,15 @@ static int demux_mkv_read_info(demuxer_t *demuxer) if (info.n_segment_uid) { int len = info.segment_uid.len; if (len != sizeof(demuxer->matroska_data.uid.segment)) { - mp_msg(MSGT_DEMUX, MSGL_INFO, - "[mkv] segment uid invalid length %d\n", len); + MP_INFO(demuxer, "segment uid invalid length %d\n", len); } else { memcpy(demuxer->matroska_data.uid.segment, info.segment_uid.start, len); - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + segment uid"); + MP_VERBOSE(demuxer, "| + segment uid"); for (int i = 0; i < len; i++) - mp_msg(MSGT_DEMUX, MSGL_V, " %02x", + MP_VERBOSE(demuxer, " %02x", demuxer->matroska_data.uid.segment[i]); - mp_msg(MSGT_DEMUX, MSGL_V, "\n"); + MP_VERBOSE(demuxer, "\n"); } } if (demuxer->params && demuxer->params->matroska_wanted_uids) { @@ -400,8 +395,7 @@ static int demux_mkv_read_info(demuxer_t *demuxer) } } } - mp_msg(MSGT_DEMUX, MSGL_INFO, - "[mkv] This is not one of the wanted files. " + MP_INFO(demuxer, "This is not one of the wanted files. " "Stopping attempt to open.\n"); res = -2; } @@ -439,29 +433,26 @@ static void parse_trackencodings(struct demuxer *demuxer, } if (e.type == 1) { - mp_msg(MSGT_DEMUX, MSGL_WARN, "[mkv] Track " + MP_WARN(demuxer, "Track " "number %u has been encrypted and " "decryption has not yet been\n" - "[mkv] implemented. Skipping track.\n", + "implemented. Skipping track.\n", track->tnum); } else if (e.type != 0) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] Unknown content encoding type for " + MP_WARN(demuxer, "Unknown content encoding type for " "track %u. Skipping track.\n", track->tnum); } else if (e.comp_algo != 0 && e.comp_algo != 2 && e.comp_algo != 3) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] Track %u has been compressed with " + MP_WARN(demuxer, "Track %u has been compressed with " "an unknown/unsupported compression\n" - "[mkv] algorithm (%" PRIu64 "). Skipping track.\n", + "algorithm (%" PRIu64 "). Skipping track.\n", track->tnum, e.comp_algo); } #if !HAVE_ZLIB else if (e.comp_algo == 0) { - mp_msg(MSGT_DEMUX, MSGL_WARN, - "[mkv] Track %u was compressed with zlib " + MP_WARN(demuxer, "Track %u was compressed with zlib " "but mpv has not been compiled\n" - "[mkv] with support for zlib compression. " + "with support for zlib compression. " "Skipping track.\n", track->tnum); } @@ -485,26 +476,24 @@ static void parse_trackaudio(struct demuxer *demuxer, struct mkv_track *track, { if (audio->n_sampling_frequency) { track->a_sfreq = audio->sampling_frequency; - mp_msg(MSGT_DEMUX, MSGL_V, - "[mkv] | + Sampling frequency: %f\n", track->a_sfreq); + MP_VERBOSE(demuxer, "| + Sampling frequency: %f\n", track->a_sfreq); } else { track->a_sfreq = 8000; } if (audio->n_output_sampling_frequency) { track->a_osfreq = audio->output_sampling_frequency; - mp_msg(MSGT_DEMUX, MSGL_V, - "[mkv] | + Output sampling frequency: %f\n", track->a_osfreq); + MP_VERBOSE(demuxer, "| + Output sampling frequency: %f\n", track->a_osfreq); } else { track->a_osfreq = track->a_sfreq; } if (audio->n_bit_depth) { track->a_bps = audio->bit_depth; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Bit depth: %u\n", + MP_VERBOSE(demuxer, "| + Bit depth: %u\n", track->a_bps); } if (audio->n_channels) { track->a_channels = audio->channels; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Channels: %u\n", + MP_VERBOSE(demuxer, "| + Channels: %u\n", track->a_channels); } else { track->a_channels = 1; @@ -516,7 +505,7 @@ static void parse_trackvideo(struct demuxer *demuxer, struct mkv_track *track, { if (video->n_frame_rate) { track->v_frate = video->frame_rate; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Frame rate: %f\n", + MP_VERBOSE(demuxer, "| + Frame rate: %f\n", track->v_frate); if (track->v_frate > 0) track->default_duration = 1 / track->v_frate; @@ -524,29 +513,29 @@ static void parse_trackvideo(struct demuxer *demuxer, struct mkv_track *track, if (video->n_display_width) { track->v_dwidth = video->display_width; track->v_dwidth_set = true; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Display width: %u\n", + MP_VERBOSE(demuxer, "| + Display width: %u\n", track->v_dwidth); } if (video->n_display_height) { track->v_dheight = video->display_height; track->v_dheight_set = true; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Display height: %u\n", + MP_VERBOSE(demuxer, "| + Display height: %u\n", track->v_dheight); } if (video->n_pixel_width) { track->v_width = video->pixel_width; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Pixel width: %u\n", + MP_VERBOSE(demuxer, "| + Pixel width: %u\n", track->v_width); } if (video->n_pixel_height) { track->v_height = video->pixel_height; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Pixel height: %u\n", + MP_VERBOSE(demuxer, "| + Pixel height: %u\n", track->v_height); } if (video->n_colour_space && video->colour_space.len == 4) { uint8_t *d = (uint8_t *)&video->colour_space.start[0]; track->colorspace = d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Colorspace: %#x\n", + MP_VERBOSE(demuxer, "| + Colorspace: %#x\n", (unsigned int)track->colorspace); } } @@ -569,43 +558,43 @@ static void parse_trackentry(struct demuxer *demuxer, track->tnum = entry->track_number; if (track->tnum) { - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track number: %u\n", + MP_VERBOSE(demuxer, "| + Track number: %u\n", track->tnum); } else { - mp_msg(MSGT_DEMUX, MSGL_ERR, "[mkv] Missing track number!\n"); + MP_ERR(demuxer, "Missing track number!\n"); } if (entry->n_name) { track->name = talloc_strndup(track, entry->name.start, entry->name.len); - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Name: %s\n", + MP_VERBOSE(demuxer, "| + Name: %s\n", track->name); } track->type = entry->track_type; - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track type: "); + MP_VERBOSE(demuxer, "| + Track type: "); switch (track->type) { case MATROSKA_TRACK_AUDIO: - mp_msg(MSGT_DEMUX, MSGL_V, "Audio\n"); + MP_VERBOSE(demuxer, "Audio\n"); break; case MATROSKA_TRACK_VIDEO: - mp_msg(MSGT_DEMUX, MSGL_V, "Video\n"); + MP_VERBOSE(demuxer, "Video\n"); break; case MATROSKA_TRACK_SUBTITLE: - mp_msg(MSGT_DEMUX, MSGL_V, "Subtitle\n"); + MP_VERBOSE(demuxer, "Subtitle\n"); break; default: - mp_msg(MSGT_DEMUX, MSGL_V, "unknown\n"); + MP_VERBOSE(demuxer, "unknown\n"); break; } if (entry->n_audio) { - mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Audio track\n"); + MP_VERBOSE(demuxer, "| + Audio track\n"); |