1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 18:12:22 +00:00

mplayer: remove stream dumping capability

This had very limited usefulness, and you're much better off using
ffmpeg directly. Even if that should not be sufficient, the mplayer
encoding branch might provide a better way out.
This commit is contained in:
wm4 2012-07-30 22:38:56 +02:00
parent 6e8633c734
commit c78ba1c55c
2 changed files with 1 additions and 178 deletions

View File

@ -762,15 +762,6 @@ const m_option_t mplayer_opts[]={
// dump some stream out instead of playing the file
OPT_STRING("dumpfile", stream_dump_name, 0, OPTDEF_STR("stream.dump")),
{"dumpaudio", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"dumpvideo", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 2, NULL},
{"dumpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 3, NULL},
{"dumpmpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 4, NULL},
{"dumpstream", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 5, NULL},
{"dumpsrtsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 6, NULL},
{"dumpmicrodvdsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 7, NULL},
{"dumpjacosub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 8, NULL},
{"dumpsami", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 9, NULL},
OPT_MAKE_FLAGS("capture", capture_dump, 0),

170
mplayer.c
View File

@ -228,9 +228,6 @@ int forced_subs_only = 0;
// cache2:
int stream_cache_size = -1;
// dump:
int stream_dump_type = 0;
// A-V sync:
static float default_max_pts_correction = -1;
float audio_delay = 0;
@ -1186,50 +1183,6 @@ static void print_status(struct MPContext *mpctx, double a_pos, bool at_frame)
free(line);
}
struct stream_dump_progress {
uint64_t count;
unsigned start_time;
unsigned last_print_time;
};
static void stream_dump_progress_start(struct stream_dump_progress *p)
{
p->start_time = p->last_print_time = GetTimerMS();
p->count = 0;
}
static void stream_dump_progress(struct stream_dump_progress *p,
uint64_t len, stream_t *stream)
{
p->count += len;
unsigned t = GetTimerMS();
if (t - p->last_print_time < 1000)
return;
uint64_t start = stream->start_pos;
uint64_t end = stream->end_pos;
uint64_t pos = stream->pos;
p->last_print_time = t;
/* TODO: pretty print sizes; ETA */
if (end > start && pos >= start && pos <= end) {
mp_tmsg(MSGT_STATUSLINE, MSGL_STATUS,
"dump: %"PRIu64 " bytes written (~%.1f%%)",
p->count, 100.0 * (pos - start) / (end - start));
mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "\r");
} else {
mp_tmsg(MSGT_STATUSLINE, MSGL_STATUS,
"dump: %"PRIu64 " bytes written", p->count);
mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "\r");
}
}
static void stream_dump_progress_end(struct stream_dump_progress *p, char *name)
{
mp_msg(MSGT_CPLAYER, MSGL_INFO, "dump: %"PRIu64 " bytes written to '%s'.\n",
p->count, name);
}
/**
* \brief build a chain of audio filters that converts the input format
* to the ao's format, taking into account the current playback_speed.
@ -3987,50 +3940,6 @@ play_next_file:
}
mpctx->stream->start_pos += seek_to_byte;
if (stream_dump_type == 5) {
unsigned char buf[4096];
int len;
FILE *f;
stream_reset(mpctx->stream);
stream_seek(mpctx->stream, mpctx->stream->start_pos);
f = fopen(opts->stream_dump_name, "wb");
if (!f) {
mp_tmsg(MSGT_CPLAYER, MSGL_FATAL, "Cannot open dump file.\n");
exit_player(mpctx, EXIT_ERROR);
}
if (opts->chapterrange[0] > 1) {
int chapter = opts->chapterrange[0] - 1;
stream_control(mpctx->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter);
}
struct stream_dump_progress info;
stream_dump_progress_start(&info);
while (!mpctx->stream->eof && !async_quit_request) {
len = stream_read(mpctx->stream, buf, 4096);
if (len > 0) {
if (fwrite(buf, len, 1, f) != 1) {
mp_tmsg(MSGT_GLOBAL, MSGL_FATAL, "%s: Error writing file.\n", opts->stream_dump_name);
exit_player(mpctx, EXIT_ERROR);
}
}
stream_dump_progress(&info, len, mpctx->stream);
if (opts->chapterrange[1] > 0) {
int chapter = -1;
if (stream_control(mpctx->stream,
STREAM_CTRL_GET_CURRENT_CHAPTER, &chapter) == STREAM_OK
&& chapter + 1 > opts->chapterrange[1])
break;
}
}
if (fclose(f)) {
mp_tmsg(MSGT_GLOBAL, MSGL_FATAL, "%s: Error writing file.\n",
opts->stream_dump_name);
exit_player(mpctx, EXIT_ERROR);
}
stream_dump_progress_end(&info, opts->stream_dump_name);
mp_tmsg(MSGT_CPLAYER, MSGL_INFO, "Stream dump complete.\n");
exit_player_with_rc(mpctx, EXIT_EOF, 0);
}
#ifdef CONFIG_DVDREAD
if (mpctx->stream->type == STREAMTYPE_DVD) {
if (opts->audio_lang && opts->audio_id == -1)
@ -4209,67 +4118,6 @@ goto_enable_cache:
select_audio(mpctx->sources[i].demuxer->audio->demuxer, opts->audio_id,
opts->audio_lang);
// DUMP STREAMS:
if ((stream_dump_type) && (stream_dump_type < 4)) {
FILE *f;
demux_stream_t *ds = NULL;
// select stream to dump
switch (stream_dump_type) {
case 1: ds = mpctx->d_audio;
break;
case 2: ds = mpctx->d_video;
break;
case 3: ds = mpctx->d_sub;
break;
}
if (!ds) {
mp_tmsg(MSGT_CPLAYER, MSGL_FATAL,
"dump: FATAL: Selected stream missing!\n");
exit_player(mpctx, EXIT_ERROR);
}
// disable other streams:
if (mpctx->d_audio && mpctx->d_audio != ds) {
ds_free_packs(mpctx->d_audio);
mpctx->d_audio->id = -2;
}
if (mpctx->d_video && mpctx->d_video != ds) {
ds_free_packs(mpctx->d_video);
mpctx->d_video->id = -2;
}
if (mpctx->d_sub && mpctx->d_sub != ds) {
ds_free_packs(mpctx->d_sub);
mpctx->d_sub->id = -2;
}
// let's dump it!
f = fopen(opts->stream_dump_name, "wb");
if (!f) {
mp_tmsg(MSGT_CPLAYER, MSGL_FATAL, "Cannot open dump file.\n");
exit_player(mpctx, EXIT_ERROR);
}
struct stream_dump_progress info;
stream_dump_progress_start(&info);
while (!ds->eof) {
unsigned char *start;
int in_size = ds_get_packet(ds, &start);
if ((mpctx->demuxer->file_format == DEMUXER_TYPE_AVI || mpctx->demuxer->file_format == DEMUXER_TYPE_ASF)
&& stream_dump_type == 2)
fwrite(&in_size, 1, 4, f);
if (in_size > 0) {
fwrite(start, in_size, 1, f);
stream_dump_progress(&info, in_size, mpctx->stream);
}
if (opts->chapterrange[1] > 0) {
int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer, 0);
if (cur_chapter != -1 && cur_chapter + 1 > opts->chapterrange[1])
break;
}
}
fclose(f);
stream_dump_progress_end(&info, opts->stream_dump_name);
mp_tmsg(MSGT_CPLAYER, MSGL_INFO, "Stream dump complete.\n");
exit_player_with_rc(mpctx, EXIT_EOF, 0);
}
mpctx->sh_audio = mpctx->d_audio->sh;
mpctx->sh_video = mpctx->d_video->sh;
@ -4343,23 +4191,7 @@ goto_enable_cache:
if (mpctx->set_of_sub_size > 0)
mpctx->sub_counts[SUB_SOURCE_SUBS] = mpctx->set_of_sub_size;
if (select_subtitle(mpctx)) {
if (mpctx->subdata)
switch (stream_dump_type) {
case 3: list_sub_file(mpctx->subdata);
break;
case 4: dump_mpsub(mpctx->subdata, mpctx->sh_video->fps);
break;
case 6: dump_srt(mpctx->subdata, mpctx->sh_video->fps);
break;
case 7: dump_microdvd(mpctx->subdata, mpctx->sh_video->fps);
break;
case 8: dump_jacosub(mpctx->subdata, mpctx->sh_video->fps);
break;
case 9: dump_sami(mpctx->subdata, mpctx->sh_video->fps);
break;
}
}
select_subtitle(mpctx);
print_file_properties(mpctx, mpctx->filename);