annotate edl.c @ 13252:7dfd84faaa09

Some minor vo_jpeg fixes: Removed unused variable dst. MPlayer now exits if it is unable to create a file for JPEG output and prints an appropriate message, instead of going on if all is right (which is not). Added line to authors file.
author ivo
date Sun, 05 Sep 2004 17:54:09 +0000
parents ce046ef860da
children 567875b88aab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
1 #include <stdio.h>
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
2 #include <stdlib.h>
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
3 #include "config.h"
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
4 #include "mp_msg.h"
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
5 #include "edl.h"
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
6
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
7 #ifdef USE_EDL
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
8
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
9 int edl_check_mode(void)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
10 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
11 if (edl_filename && edl_output_filename)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
12 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
13 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
14 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
15
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
16 return (1);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
17 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
18
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
19 int edl_count_entries(void)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
20 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
21 FILE *fd = NULL;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
22 int entries = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
23 int action = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
24 float start = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
25 float stop = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
26 char line[100];
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
27
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
28 if (edl_filename)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
29 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
30 if ((fd = fopen(edl_filename, "r")) == NULL)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
31 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
32 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
33 "Invalid EDL file, cant open '%s' for reading!\n",
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
34 edl_filename);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
35 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
36 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
37 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
38 while (fgets(line, 99, fd) != NULL)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
39 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
40 if ((sscanf(line, "%f %f %d", &start, &stop, &action)) ==
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
41 3)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
42 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
43 if (action == EDL_SKIP)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
44 entries += 1;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
45 if (action == EDL_MUTE)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
46 entries += 2;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
47 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
48 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
49 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
50 "Invalid EDL line: %s\n", line);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
51 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
52 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
53
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
54 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
55 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
56 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
57 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
58 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
59 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
60
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
61 return (entries);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
62 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
63
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
64 int edl_parse_file(edl_record_ptr edl_records)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
65 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
66 FILE *fd;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
67 char line[100];
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
68 float start, stop;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
69 int action;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
70 int record_count = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
71 int lineCount = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
72 struct edl_record *next_edl_record = edl_records;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
73
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
74 if (edl_filename)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
75 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
76 if ((fd = fopen(edl_filename, "r")) == NULL)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
77 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
78 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
79 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
80 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
81 while (fgets(line, 99, fd) != NULL)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
82 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
83 lineCount++;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
84 if ((sscanf(line, "%f %f %d", &start, &stop, &action))
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
85 != 3)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
86 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
87 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
88 "Badly formated EDL line [%d]. Discarding!\n",
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
89 lineCount + 1, line);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
90 continue;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
91 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
92 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
93 if (record_count > 0)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
94 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
95 if (start <= (next_edl_record - 1)->stop_sec)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
96 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
97 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
98 "Invalid EDL line [%d]: %s",
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
99 lineCount, line);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
100 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
101 "Last stop position was [%f]; next start is [%f]. Entries must be in chronological order and cannot overlap. Discarding!\n",
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
102 (next_edl_record - 1)->stop_sec, start);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
103 continue;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
104 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
105 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
106 if (stop <= start)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
107 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
108 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
109 "Invalid EDL line [%d]: %s", lineCount,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
110 line);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
111 mp_msg(MSGT_CPLAYER, MSGL_WARN,
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
112 "Stop time must follow start time. Discarding!\n");
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
113 continue;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
114 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
115 next_edl_record->action = action;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
116 if (action == EDL_MUTE)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
117 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
118 next_edl_record->length_sec = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
119 next_edl_record->start_sec = start;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
120 next_edl_record->stop_sec = start;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
121 next_edl_record->mute_state = EDL_MUTE_START;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
122 next_edl_record++;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
123 (next_edl_record - 1)->next = next_edl_record;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
124 next_edl_record->action = action;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
125 next_edl_record->length_sec = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
126 next_edl_record->start_sec = stop;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
127 next_edl_record->stop_sec = stop;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
128 next_edl_record->mute_state = EDL_MUTE_END;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
129
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
130 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
131 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
132 next_edl_record->length_sec = stop - start;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
133 next_edl_record->start_sec = start;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
134 next_edl_record->stop_sec = stop;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
135 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
136 next_edl_record++;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
137
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
138 if (record_count >= 0)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
139 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
140 (next_edl_record - 1)->next = next_edl_record;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
141 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
142
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
143 record_count++;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
144 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
145 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
146
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
147 if (record_count > 0)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
148 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
149 (next_edl_record - 1)->next = NULL;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
150 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
151 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
152 fclose(fd);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
153 } else
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
154 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
155 return (EDL_ERROR);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
156 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
157
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
158 return (record_count);
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
159 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
160
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
161 #endif