annotate edl.c @ 24992:5701e23ebcb4

Better handling of win32 GUI thread: 1. Use _beginthreadex to create the GUI thread to avoid possible memory leak when linked to MS CRT. 2. Terminate the GUI thread in an cleaner way using PostThreadMessage() rather than the unrecommended TerminateThread().
author zuxy
date Sun, 11 Nov 2007 08:14:57 +0000
parents 64a5e75bb7f2
children 0f1b5b68af32
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"
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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
ac31a89c3d99 remove edl.c pre-alloc, more readble and safe code
ods15
parents: 17566
diff changeset
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
48 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
49 }
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
57 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
58 FILE *fd;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
59 char line[100];
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
60 float start, stop;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
61 int action;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
62 int record_count = 0;
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
63 int lineCount = 0;
17802
ac31a89c3d99 remove edl.c pre-alloc, more readble and safe code
ods15
parents: 17566
diff changeset
64 edl_record_ptr edl_records = NULL;
ac31a89c3d99 remove edl.c pre-alloc, more readble and safe code
ods15
parents: 17566
diff changeset
65 edl_record_ptr next_edl_record = NULL;
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
66
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
67 if (edl_filename)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
68 {
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
69 if ((fd = fopen(edl_filename, "r")) == NULL)
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
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;
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
72 }
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
73
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
74 while (fgets(line, 99, fd) != NULL)
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
75 {
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
76 lineCount++;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
77
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
78 if ((sscanf(line, "%f %f %d", &start, &stop, &action))
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
79 != 3)
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
80 {
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
81 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadlyFormattedLine,
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
82 lineCount);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
83 continue;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
84 }
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
85
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
86 if (next_edl_record && start <= next_edl_record->stop_sec)
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
87 {
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
88 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
89 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap,
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
90 next_edl_record->stop_sec, start);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
91 continue;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
92 }
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
93
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
94 if (stop <= start)
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
95 {
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
96 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine,
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
97 line);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
98 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
99 continue;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
100 }
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
101
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
102 next_edl_record = edl_alloc_new(next_edl_record);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
103
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
104 if (!edl_records) edl_records = next_edl_record;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
105
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
106 next_edl_record->action = action;
17802
ac31a89c3d99 remove edl.c pre-alloc, more readble and safe code
ods15
parents: 17566
diff changeset
107
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
108 if (action == EDL_MUTE)
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
109 {
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
110 next_edl_record->length_sec = 0;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
111 next_edl_record->start_sec = start;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
112 next_edl_record->stop_sec = start;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
113
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
114 next_edl_record = edl_alloc_new(next_edl_record);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
115
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
116 next_edl_record->action = action;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
117 next_edl_record->length_sec = 0;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
118 next_edl_record->start_sec = stop;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
119 next_edl_record->stop_sec = stop;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
120 } else
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
121 {
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
122 next_edl_record->length_sec = stop - start;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
123 next_edl_record->start_sec = start;
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
124 next_edl_record->stop_sec = stop;
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
125 }
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
126
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
127 record_count++;
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
128 }
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
129
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
130 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
131 }
18904
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
132
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
133 if (edl_records)
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
134 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
135 else
64a5e75bb7f2 all cosmetics, mainly denestifying of main edl operation's fill loop
reynaldo
parents: 18903
diff changeset
136 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
17802
ac31a89c3d99 remove edl.c pre-alloc, more readble and safe code
ods15
parents: 17566
diff changeset
137
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
138 return edl_records;
13168
ce046ef860da EDL enhancement/fixes:
rtognimp
parents:
diff changeset
139 }