[MPlayer-cvslog] r18896 - trunk/edl.c

reynaldo subversion at mplayerhq.hu
Tue Jul 4 09:33:19 CEST 2006


Author: reynaldo
Date: Tue Jul  4 09:33:15 2006
New Revision: 18896

Modified:
   trunk/edl.c

Log:
- Fix segfault on overlapping start/stop
- Correctly report skipped erroneous line number
- Denestyfies main operation fill loop


Modified: trunk/edl.c
==============================================================================
--- trunk/edl.c	(original)
+++ trunk/edl.c	Tue Jul  4 09:33:15 2006
@@ -69,63 +69,69 @@
         if ((fd = fopen(edl_filename, "r")) == NULL)
         {
             return NULL;
-        } else
+        }
+
+        while (fgets(line, 99, fd) != NULL)
         {
-            while (fgets(line, 99, fd) != NULL)
+            lineCount++;
+
+            if ((sscanf(line, "%f %f %d", &start, &stop, &action))
+                != 3)
+            {
+                mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadlyFormattedLine,
+                       lineCount);
+                continue;
+            }
+
+            if (next_edl_record && start <= next_edl_record->stop_sec)
+            {
+                mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line);
+                mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap,
+                       next_edl_record->stop_sec, start);
+                continue;    
+            }
+
+            if (stop <= start)
             {
-                lineCount++;
-                if ((sscanf(line, "%f %f %d", &start, &stop, &action))
-                    != 3)
-                {
-                    mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadlyFormattedLine,
-                           lineCount + 1);
-                    continue;
-                } else
-                {
-                    if (next_edl_record && start <= next_edl_record->stop_sec)
-                    {
-                        mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line);
-                        mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap,
-                               next_edl_record->prev->stop_sec, start);
-                        continue;    
-                    }
-                    if (stop <= start)
-                    {
-                        mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine,
-                               line);
-                        mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop);
-                        continue;
-                    }
-                    next_edl_record = edl_alloc_new(next_edl_record);
-                    if (!edl_records) edl_records = next_edl_record;
-
-                    next_edl_record->action = action;
-                    if (action == EDL_MUTE)
-                    {
-                        next_edl_record->length_sec = 0;
-                        next_edl_record->start_sec = start;
-                        next_edl_record->stop_sec = start;
-                        
-                        next_edl_record = edl_alloc_new(next_edl_record);
-                        
-                        next_edl_record->action = action;
-                        next_edl_record->length_sec = 0;
-                        next_edl_record->start_sec = stop;
-                        next_edl_record->stop_sec = stop;
-                    } else
-                    {
-                        next_edl_record->length_sec = stop - start;
-                        next_edl_record->start_sec = start;
-                        next_edl_record->stop_sec = stop;
-                    }
-                    record_count++;
-                }
+                mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine,
+                       line);
+                mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop);
+                continue;
             }
+
+            next_edl_record = edl_alloc_new(next_edl_record);
+            if (!edl_records) edl_records = next_edl_record;
+
+            next_edl_record->action = action;
+
+            if (action == EDL_MUTE)
+            {
+                next_edl_record->length_sec = 0;
+                next_edl_record->start_sec = start;
+                next_edl_record->stop_sec = start;
+                
+                next_edl_record = edl_alloc_new(next_edl_record);
+                 
+                next_edl_record->action = action;
+                next_edl_record->length_sec = 0;
+                next_edl_record->start_sec = stop;
+                next_edl_record->stop_sec = stop;
+            } else
+            {
+                next_edl_record->length_sec = stop - start;
+                next_edl_record->start_sec = start;
+                next_edl_record->stop_sec = stop;
+            }
+            record_count++;
         }
+
         fclose(fd);
     }        
-    if (edl_records) mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
-    else mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
+
+    if (edl_records) 
+        mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
+    else 
+        mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
 
     return edl_records;
 }



More information about the MPlayer-cvslog mailing list