mirror of
https://github.com/mpv-player/mpv
synced 2025-03-19 18:05:21 +00:00
command: remove sub_remove command
This messes deeply with the subtitle bookkeeping data structures, and would have to be reimplemented anyway. It's not sure what this was even useful for. Possibly for slave mode.
This commit is contained in:
parent
330c90cbb8
commit
1fb275b7de
68
command.c
68
command.c
@ -2486,64 +2486,6 @@ static const char *property_error_string(int error_value)
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
static void remove_subtitle_range(MPContext *mpctx, int start, int count)
|
||||
{
|
||||
int idx;
|
||||
int end = start + count;
|
||||
int after = mpctx->set_of_sub_size - end;
|
||||
sub_data **subs = mpctx->set_of_subtitles;
|
||||
#ifdef CONFIG_ASS
|
||||
struct ass_track **ass_tracks = mpctx->set_of_ass_tracks;
|
||||
#endif
|
||||
if (count < 0 || count > mpctx->set_of_sub_size ||
|
||||
start < 0 || start > mpctx->set_of_sub_size - count) {
|
||||
mp_msg(MSGT_CPLAYER, MSGL_ERR,
|
||||
"Cannot remove invalid subtitle range %i +%i\n", start, count);
|
||||
return;
|
||||
}
|
||||
for (idx = start; idx < end; idx++) {
|
||||
sub_data *subd = subs[idx];
|
||||
char *filename = "";
|
||||
if (subd)
|
||||
filename = subd->filename;
|
||||
#ifdef CONFIG_ASS
|
||||
if (!subd)
|
||||
filename = ass_tracks[idx]->name;
|
||||
#endif
|
||||
mp_msg(MSGT_CPLAYER, MSGL_STATUS,
|
||||
"SUB: Removed subtitle file (%d): %s\n", idx + 1, filename);
|
||||
sub_free(subd);
|
||||
subs[idx] = NULL;
|
||||
#ifdef CONFIG_ASS
|
||||
if (ass_tracks[idx])
|
||||
ass_free_track(ass_tracks[idx]);
|
||||
ass_tracks[idx] = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
mpctx->global_sub_size -= count;
|
||||
mpctx->set_of_sub_size -= count;
|
||||
if (mpctx->set_of_sub_size <= 0)
|
||||
mpctx->sub_counts[SUB_SOURCE_SUBS] = 0;
|
||||
|
||||
memmove(subs + start, subs + end, after * sizeof(*subs));
|
||||
memset(subs + start + after, 0, count * sizeof(*subs));
|
||||
#ifdef CONFIG_ASS
|
||||
memmove(ass_tracks + start, ass_tracks + end, after * sizeof(*ass_tracks));
|
||||
memset(ass_tracks + start + after, 0, count * sizeof(*ass_tracks));
|
||||
#endif
|
||||
|
||||
if (mpctx->set_of_sub_pos >= start && mpctx->set_of_sub_pos < end) {
|
||||
mpctx->global_sub_pos = -2;
|
||||
mpctx->subdata = NULL;
|
||||
mpctx->osd->ass_track = NULL;
|
||||
mp_input_queue_cmd(mpctx->input, mp_input_parse_cmd("sub_select"));
|
||||
} else if (mpctx->set_of_sub_pos >= end) {
|
||||
mpctx->set_of_sub_pos -= count;
|
||||
mpctx->global_sub_pos -= count;
|
||||
}
|
||||
}
|
||||
|
||||
static char *format_time(double time)
|
||||
{
|
||||
int h, m, s = time;
|
||||
@ -3145,16 +3087,6 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
||||
}
|
||||
break;
|
||||
|
||||
case MP_CMD_SUB_REMOVE:
|
||||
if (sh_video) {
|
||||
int v = cmd->args[0].v.i;
|
||||
if (v < 0)
|
||||
remove_subtitle_range(mpctx, 0, mpctx->set_of_sub_size);
|
||||
else if (v < mpctx->set_of_sub_size)
|
||||
remove_subtitle_range(mpctx, v, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case MP_CMD_GET_SUB_VISIBILITY:
|
||||
if (sh_video) {
|
||||
mp_msg(MSGT_GLOBAL, MSGL_INFO,
|
||||
|
@ -132,7 +132,6 @@ static const mp_cmd_t mp_cmds[] = {
|
||||
{ MP_CMD_SUB_ALIGNMENT, "sub_alignment", { OARG_INT(-1) } },
|
||||
{ MP_CMD_SUB_VISIBILITY, "sub_visibility", { OARG_INT(-1) } },
|
||||
{ MP_CMD_SUB_LOAD, "sub_load", { ARG_STRING } },
|
||||
{ MP_CMD_SUB_REMOVE, "sub_remove", { OARG_INT(-1) } },
|
||||
{ MP_CMD_SUB_SELECT, "vobsub_lang", { OARG_INT(-2) } }, // for compatibility
|
||||
{ MP_CMD_SUB_SELECT, "sub_select", { OARG_INT(-2) } },
|
||||
{ MP_CMD_SUB_SOURCE, "sub_source", { OARG_INT(-2) } },
|
||||
|
@ -84,7 +84,6 @@ enum mp_command_type {
|
||||
MP_CMD_SWITCH_AUDIO,
|
||||
MP_CMD_GET_TIME_POS,
|
||||
MP_CMD_SUB_LOAD,
|
||||
MP_CMD_SUB_REMOVE,
|
||||
MP_CMD_KEYDOWN_EVENTS,
|
||||
MP_CMD_VO_BORDER,
|
||||
MP_CMD_SET_PROPERTY,
|
||||
|
Loading…
Reference in New Issue
Block a user