summaryrefslogtreecommitdiffstats
path: root/core/mplayer.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-11 22:40:46 +0200
committerwm4 <wm4@nowhere>2013-05-12 21:57:02 +0200
commit989b482bd601013392e0797d4585d4c189127d19 (patch)
tree7e64fb004db217fd3d5f50972e3f23f371da78f0 /core/mplayer.c
parentfaad40aad92d51290ef2fc4d94277eca89863873 (diff)
downloadmpv-989b482bd601013392e0797d4585d4c189127d19.tar.bz2
mpv-989b482bd601013392e0797d4585d4c189127d19.tar.xz
core: re-add -dumpstream as --stream-dump
Apparently useful for dumping DVD. Could also be used to rip streams with libquvi and such, but for that there are better tools. Actually I doubt there aren't better tools to dump DVDs, but whatever, this was a feature request, so I don't need a good reason.
Diffstat (limited to 'core/mplayer.c')
-rw-r--r--core/mplayer.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/core/mplayer.c b/core/mplayer.c
index ed8de9eb36..abd306426d 100644
--- a/core/mplayer.c
+++ b/core/mplayer.c
@@ -4105,6 +4105,35 @@ static void idle_loop(struct MPContext *mpctx)
}
}
+static void stream_dump(struct MPContext *mpctx)
+{
+ struct MPOpts *opts = &mpctx->opts;
+ char *filename = opts->stream_dump;
+ stream_t *stream = mpctx->stream;
+ assert(stream && filename);
+
+ stream_set_capture_file(stream, filename);
+
+ while (mpctx->stop_play == KEEP_PLAYING && !stream->eof) {
+ if (!opts->quiet && ((stream->pos / (1024 * 1024)) % 2) == 1) {
+ uint64_t pos = stream->pos - stream->start_pos;
+ uint64_t end = stream->end_pos - stream->start_pos;
+ char *line = talloc_asprintf(NULL, "Dumping %lld/%lld...",
+ (long long int)pos, (long long int)end);
+ write_status_line(mpctx, line);
+ talloc_free(line);
+ }
+ stream_fill_buffer(stream);
+ for (;;) {
+ mp_cmd_t *cmd = mp_input_get_cmd(mpctx->input, 0, false);
+ if (!cmd)
+ break;
+ run_command(mpctx, cmd);
+ talloc_free(cmd);
+ }
+ }
+}
+
// Start playing the current playlist entry.
// Handle initialization and deinitialization.
static void play_current_file(struct MPContext *mpctx)
@@ -4221,6 +4250,11 @@ static void play_current_file(struct MPContext *mpctx)
}
mpctx->stream->start_pos += opts->seek_to_byte;
+ if (opts->stream_dump && opts->stream_dump[0]) {
+ stream_dump(mpctx);
+ goto terminate_playback;
+ }
+
// CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts)
#ifdef CONFIG_DVBIN
goto_enable_cache: ;