diff options
author | wm4 <wm4@nowhere> | 2017-01-21 17:19:01 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2017-01-21 17:19:01 +0100 |
commit | 73858bb0ccac91b6a529c8dd4b825f47aa28c4b7 (patch) | |
tree | 2baf1e7a267976e51ecbb2a08e02b0c430ea8d59 /player/misc.c | |
parent | 085dfdea3246e4d0e984f9f3ccba2959df89842d (diff) | |
download | mpv-73858bb0ccac91b6a529c8dd4b825f47aa28c4b7.tar.bz2 mpv-73858bb0ccac91b6a529c8dd4b825f47aa28c4b7.tar.xz |
player: remove --stream-capture option/property
This was excessively useless, and I want my time back that was needed to
explain users why they don't want to use it.
It captured the byte stream only, and even for types of streams it was
designed for (like transport streams), it was rather questionable.
As part of the removal, un-inline demux_run_on_thread() (which has only
1 call-site now), and sort of reimplement --stream-dump to write the
data directly instead of using the removed capture code.
(--stream-dump is also very useless, and I struggled coming up with an
explanation for it in the manpage.)
Diffstat (limited to 'player/misc.c')
-rw-r--r-- | player/misc.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/player/misc.c b/player/misc.c index 2c160aef73..6762f8a518 100644 --- a/player/misc.c +++ b/player/misc.c @@ -17,6 +17,7 @@ #include <stddef.h> #include <stdbool.h> +#include <errno.h> #include <assert.h> #include "config.h" @@ -212,21 +213,34 @@ int stream_dump(struct MPContext *mpctx, const char *source_filename) int64_t size = stream_get_size(stream); - stream_set_capture_file(stream, opts->stream_dump); + FILE *dest = fopen(opts->stream_dump, "wb"); + if (!dest) { + MP_ERR(mpctx, "Error opening dump file: %s\n", mp_strerror(errno)); + return -1; + } + + bool ok = true; - while (mpctx->stop_play == KEEP_PLAYING && !stream->eof) { + while (mpctx->stop_play == KEEP_PLAYING && ok) { if (!opts->quiet && ((stream->pos / (1024 * 1024)) % 2) == 1) { uint64_t pos = stream->pos; MP_MSG(mpctx, MSGL_STATUS, "Dumping %lld/%lld...", (long long int)pos, (long long int)size); } - stream_fill_buffer(stream); + bstr data = stream_peek(stream, STREAM_MAX_BUFFER_SIZE); + if (data.len == 0) { + ok &= stream->eof; + break; + } + ok &= fwrite(data.start, data.len, 1, dest) == 1; + stream_skip(stream, data.len); mp_wakeup_core(mpctx); // don't actually sleep mp_idle(mpctx); // but process input } + ok &= fclose(dest) == 0; free_stream(stream); - return 0; + return ok ? 0 : -1; } void merge_playlist_files(struct playlist *pl) |