Mercurial > mplayer.hg
annotate edl.c @ 18821:ac61a42feb47
Avoid crash in uninit-without-config case
author | reimar |
---|---|
date | Mon, 26 Jun 2006 17:01:07 +0000 |
parents | 3b5b7e78b9af |
children | 0f79833f1b43 |
rev | line source |
---|---|
13168 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include "config.h" | |
4 #include "mp_msg.h" | |
5 #include "edl.h" | |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
6 #include "help_mp.h" |
13168 | 7 |
14607
7a80c6ac5058
several sets of headers declare global variables in them, which causes multiple definition errors with gcc 4.x
iive
parents:
13358
diff
changeset
|
8 char *edl_filename; // file to extract EDL entries from (-edl) |
7a80c6ac5058
several sets of headers declare global variables in them, which causes multiple definition errors with gcc 4.x
iive
parents:
13358
diff
changeset
|
9 char *edl_output_filename; // file to put EDL entries in (-edlout) |
7a80c6ac5058
several sets of headers declare global variables in them, which causes multiple definition errors with gcc 4.x
iive
parents:
13358
diff
changeset
|
10 |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
11 /** |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
12 * Allocates a new EDL record and makes sure allocation was successful. |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
13 * |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
14 * \return New allocated EDL record. |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
15 * \brief Allocate new EDL record |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
16 */ |
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
17 |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
18 static edl_record_ptr edl_alloc_new(edl_record_ptr next_edl_record) |
13168 | 19 { |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
20 edl_record_ptr new_record = calloc(1, sizeof(struct edl_record)); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
21 if (!new_record) { |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
22 mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_EdlOutOfMem); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
23 exit(1); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
24 } |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
25 |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
26 if (next_edl_record) // if this isn't the first record, tell the previous one what the new one is. |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
27 next_edl_record->next = new_record; |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
28 new_record->prev = next_edl_record; |
17802 | 29 new_record->next = NULL; |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
30 |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
31 return new_record; |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
32 } |
13168 | 33 |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
34 /** |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
35 * Goes through entire EDL records and frees all memory. |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
36 * Assumes next_edl_record is valid or NULL. |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
37 * |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
38 * \brief Free EDL memory |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
39 */ |
13168 | 40 |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
41 void free_edl(edl_record_ptr next_edl_record) |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
42 { |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
43 edl_record_ptr tmp; |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
44 while (next_edl_record) { |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
45 tmp = next_edl_record->next; |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
46 free(next_edl_record); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
47 next_edl_record = tmp; |
13168 | 48 } |
49 } | |
50 | |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
51 /** Parses edl_filename to fill EDL operations queue. |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
52 * Prints out how many EDL operations recorded total. |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
53 * \brief Fills EDL operations queue. |
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
54 */ |
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
55 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17109
diff
changeset
|
56 edl_record_ptr edl_parse_file(void) |
13168 | 57 { |
58 FILE *fd; | |
59 char line[100]; | |
60 float start, stop; | |
61 int action; | |
62 int record_count = 0; | |
63 int lineCount = 0; | |
17802 | 64 edl_record_ptr edl_records = NULL; |
65 edl_record_ptr next_edl_record = NULL; | |
13168 | 66 |
67 if (edl_filename) | |
68 { | |
69 if ((fd = fopen(edl_filename, "r")) == NULL) | |
70 { | |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
71 return NULL; |
13168 | 72 } else |
73 { | |
74 while (fgets(line, 99, fd) != NULL) | |
75 { | |
76 lineCount++; | |
77 if ((sscanf(line, "%f %f %d", &start, &stop, &action)) | |
78 != 3) | |
79 { | |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
80 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadlyFormattedLine, |
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
81 lineCount + 1); |
13168 | 82 continue; |
83 } else | |
84 { | |
17802 | 85 if (next_edl_record && start <= next_edl_record->stop_sec) |
13168 | 86 { |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
87 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
88 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap, |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
89 next_edl_record->prev->stop_sec, start); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
90 continue; |
13168 | 91 } |
92 if (stop <= start) | |
93 { | |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
94 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, |
13168 | 95 line); |
13358
567875b88aab
Hardcoded EDL messages moved to help_mp-en.h, Doxygen comments added, patch
diego
parents:
13168
diff
changeset
|
96 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop); |
13168 | 97 continue; |
98 } | |
17802 | 99 next_edl_record = edl_alloc_new(next_edl_record); |
100 if (!edl_records) edl_records = next_edl_record; | |
101 | |
13168 | 102 next_edl_record->action = action; |
103 if (action == EDL_MUTE) | |
104 { | |
105 next_edl_record->length_sec = 0; | |
106 next_edl_record->start_sec = start; | |
107 next_edl_record->stop_sec = start; | |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
108 |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
109 next_edl_record = edl_alloc_new(next_edl_record); |
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
110 |
13168 | 111 next_edl_record->action = action; |
112 next_edl_record->length_sec = 0; | |
113 next_edl_record->start_sec = stop; | |
114 next_edl_record->stop_sec = stop; | |
115 } else | |
116 { | |
117 next_edl_record->length_sec = stop - start; | |
118 next_edl_record->start_sec = start; | |
119 next_edl_record->stop_sec = stop; | |
120 } | |
121 record_count++; | |
122 } | |
123 } | |
124 } | |
125 fclose(fd); | |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
126 } |
17802 | 127 if (edl_records) mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count); |
128 else mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty); | |
129 | |
14807
664b06b907cb
Some to-be-redundant EDL code moved to edl.c with mencoder's edl in mind. Stack handling improvements, Patch by Oded Shimon
reynaldo
parents:
14607
diff
changeset
|
130 return edl_records; |
13168 | 131 } |