[MPlayer-cvslog] r32041 - in trunk: DOCS/man/en/mplayer.1 cfg-mplayer.h command.c edl.h mplayer.c

reynaldo subversion at mplayerhq.hu
Sat Sep 4 01:49:35 CEST 2010


Author: reynaldo
Date: Sat Sep  4 01:49:35 2010
New Revision: 32041

Log:
Add -edl-start-pts option to Adjust positions in EDL records according
to file's start time. Patch by Vlad Seryakov, vseryakov at gmail.

Modified:
   trunk/cfg-mplayer.h
   trunk/command.c
   trunk/edl.h
   trunk/mplayer.c

Changes in other areas also in this revision:
Modified:
   trunk/DOCS/man/en/mplayer.1

Modified: trunk/cfg-mplayer.h
==============================================================================
--- trunk/cfg-mplayer.h	Fri Sep  3 20:50:03 2010	(r32040)
+++ trunk/cfg-mplayer.h	Sat Sep  4 01:49:35 2010	(r32041)
@@ -103,6 +103,8 @@ const m_option_t mplayer_opts[]={
      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_FLAG, 0, 0, 1, NULL},
+    {"noedl-start-pts", &edl_start_pts,  CONF_TYPE_FLAG, 0, 1, 0, NULL},
 
 #ifdef CONFIG_X11
     {"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0, NULL},

Modified: trunk/command.c
==============================================================================
--- trunk/command.c	Fri Sep  3 20:50:03 2010	(r32040)
+++ trunk/command.c	Sat Sep  4 01:49:35 2010	(r32041)
@@ -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 @@ int run_command(MPContext *mpctx, mp_cmd
                     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;

Modified: trunk/edl.h
==============================================================================
--- trunk/edl.h	Fri Sep  3 20:50:03 2010	(r32040)
+++ trunk/edl.h	Sat Sep  4 01:49:35 2010	(r32041)
@@ -40,6 +40,7 @@ typedef struct edl_record* edl_record_pt
 
 extern char *edl_filename; // file to extract EDL entries from (-edl)
 extern char *edl_output_filename; // file to put EDL entries in (-edlout)
+extern int 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

Modified: trunk/mplayer.c
==============================================================================
--- trunk/mplayer.c	Fri Sep  3 20:50:03 2010	(r32040)
+++ trunk/mplayer.c	Sat Sep  4 01:49:35 2010	(r32041)
@@ -142,7 +142,7 @@ int player_idle_mode=0;
 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 @@ FILE* edl_fd = NULL; ///< fd to write to
 // (next seek, pause,...), otherwise after the seek it will
 // enter the same scene again and skip forward immediately
 float edl_backward_delay = 2;
+int 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 @@ char *get_metadata (metadata_t type) {
 
 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));
@@ -3640,6 +3640,16 @@ if (select_subtitle(mpctx)) {
 
   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
 
 if(!reinit_video_chain()) {


More information about the MPlayer-cvslog mailing list