Index: edl.h =================================================================== --- edl.h (revision 32038) +++ edl.h (working copy) @@ -40,6 +40,7 @@ extern char *edl_filename; // file to extract EDL entries from (-edl) extern char *edl_output_filename; // file to put EDL entries in (-edlout) +extern double edl_start_pts; // Start pts to be added/subtracted to EDL pos void free_edl(edl_record_ptr next_edl_record); // free's entire EDL list. edl_record_ptr edl_parse_file(void); // fills EDL stack Index: mplayer.c =================================================================== --- mplayer.c (revision 32038) +++ mplayer.c (working copy) @@ -142,7 +142,7 @@ int quiet=0; int enable_mouse_movements=0; float start_volume = -1; - +double start_pts = MP_NOPTS_VALUE; char *heartbeat_cmd; #define ROUND(x) ((int)((x)<0 ? (x)-0.5 : (x)+0.5)) @@ -339,6 +339,7 @@ // (next seek, pause,...), otherwise after the seek it will // enter the same scene again and skip forward immediately float edl_backward_delay = 2; +double edl_start_pts = 0; ///< Automatically add/sub this from EDL start/stop pos int use_filedir_conf; int use_filename_title; @@ -555,7 +556,6 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) { - double start_pts = MP_NOPTS_VALUE; double video_start_pts = MP_NOPTS_VALUE; mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_FILENAME=%s\n", filename_recode(filename)); @@ -3631,6 +3631,16 @@ } print_file_properties(mpctx, filename); + + // Adjust EDL positions with start_pts + if (edl_start_pts && start_pts) { + edl_record_ptr edl = edl_records; + while (edl) { + edl->start_sec += start_pts; + edl->stop_sec += start_pts; + edl = edl->next; + } + } if(!mpctx->sh_video) goto main; // audio-only Index: cfg-mplayer.h =================================================================== --- cfg-mplayer.h (revision 32038) +++ cfg-mplayer.h (working copy) @@ -103,6 +103,7 @@ CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"edlout", &edl_output_filename, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"edl-backward-delay", &edl_backward_delay, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, + {"edl-start-pts", &edl_start_pts, CONF_TYPE_DOUBLE, 0, 0, 0, NULL}, #ifdef CONFIG_X11 {"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0, NULL}, Index: mplayer.h =================================================================== --- mplayer.h (revision 32038) +++ mplayer.h (working copy) @@ -44,7 +44,7 @@ extern int stream_cache_size; extern int autosync; - +extern double start_pts; extern int frame_dropping; extern int auto_quality; Index: command.c =================================================================== --- command.c (revision 32038) +++ command.c (working copy) @@ -66,6 +66,7 @@ #include "mp_core.h" #include "mp_fifo.h" #include "libavutil/avstring.h" +#include "edl.h" #define ROUND(x) ((int)((x)<0 ? (x)-0.5 : (x)+0.5)) @@ -2614,7 +2615,8 @@ if (mpctx->begin_skip > v) mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdloutBadStop); else { - fprintf(edl_fd, "%f %f %d\n", mpctx->begin_skip, v, 0); + double pts = edl_start_pts ? start_pts : 0; + fprintf(edl_fd, "%f %f %d\n", mpctx->begin_skip - pts, v - pts, 0); mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdloutEndSkip); } mpctx->begin_skip = MP_NOPTS_VALUE;