Index: input/input.c =================================================================== --- input/input.c (revision 32011) +++ input/input.c (working copy) @@ -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}} } }, Index: input/input.h =================================================================== --- input/input.h (revision 32011) +++ input/input.h (working copy) @@ -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, Index: mplayer.c =================================================================== --- mplayer.c (revision 32011) +++ mplayer.c (working copy) @@ -2611,6 +2611,13 @@ } } +static void edl_loadfile(void) +{ + if (edl_filename) { + if (edl_records) { + free_edl(edl_records); + } + next_edl_record = edl_records = edl_parse_file(); + } +} // style & SEEK_ABSOLUTE == 0 means seek relative to current position, == 1 means absolute // style & SEEK_FACTOR == 0 means amount in seconds, == 2 means fraction of file length @@ -3206,11 +3213,8 @@ if(use_filename_title && vo_wintitle == NULL) vo_wintitle = strdup ( mp_basename2 (filename)); } + edl_loadfile(); -if (edl_filename) { - if (edl_records) free_edl(edl_records); - next_edl_record = edl_records = edl_parse_file(); -} if (edl_output_filename) { if (edl_fd) fclose(edl_fd); if ((edl_fd = fopen(edl_output_filename, "w")) == NULL) @@ -3971,6 +3975,13 @@ int brk_cmd = 0; while( !brk_cmd && (cmd = mp_input_get_cmd(0,0,0)) != NULL) { brk_cmd = run_command(mpctx, cmd); + switch (cmd->id) { + case MP_CMD_EDL_LOADFILE: + if (edl_filename) free(edl_filename); + edl_filename = strdup(cmd->args[0].v.s); + edl_loadfile(); + break; + } mp_cmd_free(cmd); if (brk_cmd == 2) goto goto_enable_cache; Index: command.c =================================================================== --- command.c (revision 32011) +++ command.c (working copy) @@ -2601,6 +2601,9 @@ } break; + case MP_CMD_EDL_LOADFILE: + break; + case MP_CMD_EDL_MARK: if (edl_fd) { float v = sh_video ? sh_video->pts :