allow ffmpeg video to resample curr_pos, add bluray format
[goodguy/history.git] / cinelerra-5.0 / quicktime / elst.c
1 #include "funcprotos.h"
2 #include "quicktime.h"
3
4
5 void quicktime_elst_table_init(quicktime_elst_table_t *table)
6 {
7         table->duration = 0;
8         table->time = 0;
9         table->rate = 1;
10 }
11
12 void quicktime_elst_table_delete(quicktime_elst_table_t *table)
13 {
14 }
15
16 void quicktime_read_elst_table(quicktime_t *file, quicktime_elst_table_t *table)
17 {
18         table->duration = quicktime_read_int32(file);
19         table->time = quicktime_read_int32(file);
20         table->rate = quicktime_read_fixed32(file);
21 }
22
23 void quicktime_write_elst_table(quicktime_t *file, quicktime_elst_table_t *table, long duration)
24 {
25         table->duration = duration;
26         quicktime_write_int32(file, table->duration);
27         quicktime_write_int32(file, table->time);
28         quicktime_write_fixed32(file, table->rate);
29 }
30
31 void quicktime_elst_table_dump(quicktime_elst_table_t *table)
32 {
33         printf("    edit list table\n");
34         printf("     duration %ld\n", table->duration);
35         printf("     time %ld\n", table->time);
36         printf("     rate %f\n", table->rate);
37 }
38
39 void quicktime_elst_init(quicktime_elst_t *elst)
40 {
41         elst->version = 0;
42         elst->flags = 0;
43         elst->total_entries = 0;
44         elst->table = 0;
45 }
46
47 void quicktime_elst_init_all(quicktime_elst_t *elst)
48 {
49         if(!elst->total_entries)
50         {
51                 elst->total_entries = 1;
52                 elst->table = (quicktime_elst_table_t*)calloc(1, sizeof(quicktime_elst_table_t) * elst->total_entries);
53                 quicktime_elst_table_init(&(elst->table[0]));
54         }
55 }
56
57 void quicktime_elst_delete(quicktime_elst_t *elst)
58 {
59         int i;
60         if(elst->total_entries)
61         {
62                 for(i = 0; i < elst->total_entries; i++)
63                         quicktime_elst_table_delete(&(elst->table[i]));
64                 free(elst->table);
65         }
66         elst->total_entries = 0;
67 }
68
69 void quicktime_elst_dump(quicktime_elst_t *elst)
70 {
71         int i;
72         printf("   edit list (elst)\n");
73         printf("    version %d\n", elst->version);
74         printf("    flags %ld\n", elst->flags);
75         printf("    total_entries %ld\n", elst->total_entries);
76
77         for(i = 0; i < elst->total_entries; i++)
78         {
79                 quicktime_elst_table_dump(&(elst->table[i]));
80         }
81 }
82
83 void quicktime_read_elst(quicktime_t *file, quicktime_elst_t *elst)
84 {
85         int i;
86         elst->version = quicktime_read_char(file);
87         elst->flags = quicktime_read_int24(file);
88         elst->total_entries = quicktime_read_int32(file);
89         elst->table = (quicktime_elst_table_t*)calloc(1, sizeof(quicktime_elst_table_t) * elst->total_entries);
90         for(i = 0; i < elst->total_entries; i++)
91         {
92                 quicktime_elst_table_init(&(elst->table[i]));
93                 quicktime_read_elst_table(file, &(elst->table[i]));
94         }
95 }
96
97 void quicktime_write_elst(quicktime_t *file, quicktime_elst_t *elst, long duration)
98 {
99         quicktime_atom_t atom;
100         int i;
101         quicktime_atom_write_header(file, &atom, "elst");
102
103         quicktime_write_char(file, elst->version);
104         quicktime_write_int24(file, elst->flags);
105         quicktime_write_int32(file, elst->total_entries);
106         for(i = 0; i < elst->total_entries; i++)
107         {
108                 quicktime_write_elst_table(file, elst->table, duration);
109         }
110
111         quicktime_atom_write_footer(file, &atom);
112 }