8
char *edl_filename; // file to extract EDL entries from (-edl)
9
char *edl_output_filename; // file to put EDL entries in (-edlout)
14
* Allocates a new EDL record and makes sure allocation was successful.
16
* \return New allocated EDL record.
17
* \brief Allocate new EDL record
20
static edl_record_ptr edl_alloc_new(edl_record_ptr next_edl_record)
22
edl_record_ptr new_record = calloc(1, sizeof(struct edl_record));
24
mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_EdlOutOfMem);
28
if (next_edl_record) // if this isn't the first record, tell the previous one what the new one is.
29
next_edl_record->next = new_record;
30
new_record->prev = next_edl_record;
36
* Goes through entire EDL records and frees all memory.
37
* Assumes next_edl_record is valid or NULL.
39
* \brief Free EDL memory
42
void free_edl(edl_record_ptr next_edl_record)
45
while (next_edl_record) {
46
tmp = next_edl_record->next;
47
free(next_edl_record);
48
next_edl_record = tmp;
52
/** Parses edl_filename to fill EDL operations queue.
53
* Prints out how many EDL operations recorded total.
54
* \brief Fills EDL operations queue.
57
edl_record_ptr edl_parse_file()
65
edl_record_ptr edl_records = edl_alloc_new(NULL);
66
edl_record_ptr next_edl_record = edl_records;
70
if ((fd = fopen(edl_filename, "r")) == NULL)
75
while (fgets(line, 99, fd) != NULL)
78
if ((sscanf(line, "%f %f %d", &start, &stop, &action))
81
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadlyFormattedLine,
86
if (next_edl_record->prev && start <= next_edl_record->prev->stop_sec)
88
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine, line);
89
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineOverlap,
90
next_edl_record->prev->stop_sec, start);
95
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlNOValidLine,
97
mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdlBadLineBadStop);
100
next_edl_record->action = action;
101
if (action == EDL_MUTE)
103
next_edl_record->length_sec = 0;
104
next_edl_record->start_sec = start;
105
next_edl_record->stop_sec = start;
107
next_edl_record = edl_alloc_new(next_edl_record);
109
next_edl_record->action = action;
110
next_edl_record->length_sec = 0;
111
next_edl_record->start_sec = stop;
112
next_edl_record->stop_sec = stop;
115
next_edl_record->length_sec = stop - start;
116
next_edl_record->start_sec = start;
117
next_edl_record->stop_sec = stop;
119
next_edl_record = edl_alloc_new(next_edl_record);
126
if (next_edl_record->prev) {
127
next_edl_record->prev->next = NULL; // a record was before me, i don't want them thinking i'm a real record.
128
mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlRecordsNo, record_count);
131
mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdlQueueEmpty);
132
edl_records = NULL; // there was no previous record, we only had one record, the empty one.
134
free(next_edl_record);