Mercurial > mplayer.hg
changeset 31956:a6c25d94e60e
Add new slave mode command for loading EDL file on demand.
Patch by Vlad Seryakov, vseryakov at gmail.
author | reynaldo |
---|---|
date | Fri, 03 Sep 2010 18:50:03 +0000 |
parents | 5c2b199e78d5 |
children | 49848f9a8f30 |
files | DOCS/tech/slave.txt help/help_mp-en.h input/input.c input/input.h mplayer.c mplayer.h |
diffstat | 6 files changed, 28 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/tech/slave.txt Thu Sep 02 19:48:07 2010 +0000 +++ b/DOCS/tech/slave.txt Fri Sep 03 18:50:03 2010 +0000 @@ -105,6 +105,9 @@ prev mouse +edl_loadfile <filename> + Load new EDL file + edl_mark Write the current position into the EDL file.
--- a/help/help_mp-en.h Thu Sep 02 19:48:07 2010 +0000 +++ b/help/help_mp-en.h Fri Sep 03 18:50:03 2010 +0000 @@ -183,6 +183,7 @@ // --- edit decision lists #define MSGTR_EdlOutOfMem "Can't allocate enough memory to hold EDL data.\n" +#define MSGTR_EdlOutOfMemFile "Can't allocate enough memory to hold EDL file name [%s].\n" #define MSGTR_EdlRecordsNo "Read %d EDL actions.\n" #define MSGTR_EdlQueueEmpty "There are no EDL actions to take care of.\n" #define MSGTR_EdlCantOpenForWrite "Can't open EDL file [%s] for writing.\n"
--- a/input/input.c Thu Sep 02 19:48:07 2010 +0000 +++ b/input/input.c Fri Sep 03 18:50:03 2010 +0000 @@ -76,6 +76,7 @@ { MP_CMD_RADIO_STEP_FREQ, "radio_step_freq", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } }, #endif { MP_CMD_SEEK, "seek", 1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, + { MP_CMD_EDL_LOADFILE, "edl_loadfile", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } }, { MP_CMD_EDL_MARK, "edl_mark", 0, { {-1,{0}} } }, { MP_CMD_AUDIO_DELAY, "audio_delay", 1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, { MP_CMD_SPEED_INCR, "speed_incr", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
--- a/input/input.h Thu Sep 02 19:48:07 2010 +0000 +++ b/input/input.h Fri Sep 03 18:50:03 2010 +0000 @@ -61,6 +61,7 @@ MP_CMD_GET_PERCENT_POS, MP_CMD_SUB_STEP, MP_CMD_TV_SET_CHANNEL, + MP_CMD_EDL_LOADFILE, MP_CMD_EDL_MARK, MP_CMD_SUB_ALIGNMENT, MP_CMD_TV_LAST_CHANNEL,
--- a/mplayer.c Thu Sep 02 19:48:07 2010 +0000 +++ b/mplayer.c Fri Sep 03 18:50:03 2010 +0000 @@ -2533,6 +2533,17 @@ #endif } +static void edl_loadfile(void) +{ + if (edl_filename) { + if (edl_records) { + free_edl(edl_records); + edl_needs_reset = 1; + } + next_edl_record = edl_records = edl_parse_file(); + } +} + // Execute EDL command for the current position if one exists static void edl_update(MPContext *mpctx) { @@ -3211,10 +3222,7 @@ vo_wintitle = strdup ( mp_basename2 (filename)); } -if (edl_filename) { - if (edl_records) free_edl(edl_records); - next_edl_record = edl_records = edl_parse_file(); -} + edl_loadfile(); if (edl_output_filename) { if (edl_fd) fclose(edl_fd); if ((edl_fd = fopen(edl_output_filename, "w")) == NULL) @@ -3975,6 +3983,15 @@ int brk_cmd = 0; while( !brk_cmd && (cmd = mp_input_get_cmd(0,0,0)) != NULL) { brk_cmd = run_command(mpctx, cmd); + if (cmd->id == MP_CMD_EDL_LOADFILE) { + if (edl_filename) free(edl_filename); + edl_filename = strdup(cmd->args[0].v.s); + if (edl_filename) + edl_loadfile(); + else + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlOutOfMemFile, + cmd->args[0].v.s); + } mp_cmd_free(cmd); if (brk_cmd == 2) goto goto_enable_cache;