summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-02-25 13:24:15 +0100
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>2015-02-26 10:38:53 +0900
commit1e0edb3e6f25be88d79781df2515040e56c00de2 (patch)
treed255cef57e0ac9d81369ee5a4418ce9630ad837a
parent4ed46bfa255eeb9fb03e01a2f63d2c9fc7e08328 (diff)
downloadmpv-1e0edb3e6f25be88d79781df2515040e56c00de2.tar.bz2
mpv-1e0edb3e6f25be88d79781df2515040e56c00de2.tar.xz
demux_mkv: don't spam too many warnings with partial files
Limit it to a single message. It often printed more than that, and in some cases (old files with "cluster" index), spammed a lot. (cherry picked from commit a761a1531a9883abb2de5d29c98f4c96a93138a3)
-rw-r--r--demux/demux_mkv.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index f2cff54ce5..479bf6cedf 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -183,6 +183,8 @@ typedef struct mkv_demuxer {
int subtitle_preroll;
bool index_has_durations;
+
+ bool eof_warning;
} mkv_demuxer_t;
#define REALHEADER_SIZE 16
@@ -1060,6 +1062,9 @@ static int demux_mkv_read_seekhead(demuxer_t *demuxer)
struct ebml_seek_head seekhead = {0};
struct ebml_parse_ctx parse_ctx = {demuxer->log};
+ int64_t end = 0;
+ stream_control(s, STREAM_CTRL_GET_SIZE, &end);
+
MP_VERBOSE(demuxer, "/---- [ parsing seek head ] ---------\n");
if (ebml_read_element(s, &parse_ctx, &seekhead, &ebml_seek_head_desc) < 0) {
res = -1;
@@ -1074,13 +1079,16 @@ static int demux_mkv_read_seekhead(demuxer_t *demuxer)
uint64_t pos = seek->seek_position + mkv_d->segment_start;
MP_DBG(demuxer, "Element 0x%x at %"PRIu64".\n",
(unsigned)seek->seek_id, pos);
- get_header_element(demuxer, seek->seek_id, pos);
- // This is nice to warn against incomplete files.
- int64_t end = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &end);
- if (pos >= end)
- MP_WARN(demuxer, "SeekHead position beyond "
- "end of file - incomplete file?\n");
+ struct header_elem *elem = get_header_element(demuxer, seek->seek_id, pos);
+ // Warn against incomplete files.
+ if (elem && pos >= end) {
+ elem->parsed = true; // don't bother
+ if (!mkv_d->eof_warning) {
+ MP_WARN(demuxer, "SeekHead position beyond "
+ "end of file - incomplete file?\n");
+ mkv_d->eof_warning = true;
+ }
+ }
}
out:
MP_VERBOSE(demuxer, "\\---- [ parsing seek head ] ---------\n");
@@ -1805,13 +1813,6 @@ static int demux_mkv_open(demuxer_t *demuxer, enum demux_check check)
}
MP_VERBOSE(demuxer, "Seeking to %"PRIu64" to read header element 0x%x.\n",
elem->pos, (unsigned)elem->id);
- int64_t end = 0;
- stream_control(s, STREAM_CTRL_GET_SIZE, &end);
- if (elem->pos >= end) {
- MP_WARN(demuxer, "SeekHead position beyond "
- "end of file - incomplete file?\n");
- continue;
- }
if (!stream_seek(s, elem->pos)) {
MP_WARN(demuxer, "Failed to seek when reading header element.\n");
continue;