00001 #include "funcprotos.h"
00002 #include "quicktime.h"
00003
00004
00005 void quicktime_elst_table_init(quicktime_elst_table_t *table)
00006 {
00007 table->duration = 0;
00008 table->time = 0;
00009 table->rate = 1;
00010 }
00011
00012 void quicktime_elst_table_delete(quicktime_elst_table_t *table)
00013 {
00014 }
00015
00016 void quicktime_read_elst_table(quicktime_t *file, quicktime_elst_table_t *table)
00017 {
00018 table->duration = quicktime_read_int32(file);
00019 table->time = quicktime_read_int32(file);
00020 table->rate = quicktime_read_fixed32(file);
00021 }
00022
00023 void quicktime_write_elst_table(quicktime_t *file, quicktime_elst_table_t *table, long duration)
00024 {
00025 table->duration = duration;
00026 quicktime_write_int32(file, table->duration);
00027 quicktime_write_int32(file, table->time);
00028 quicktime_write_fixed32(file, table->rate);
00029 }
00030
00031 void quicktime_elst_table_dump(quicktime_elst_table_t *table)
00032 {
00033 printf(" edit list table\n");
00034 printf(" duration %ld\n", table->duration);
00035 printf(" time %ld\n", table->time);
00036 printf(" rate %f\n", table->rate);
00037 }
00038
00039 void quicktime_elst_init(quicktime_elst_t *elst)
00040 {
00041 elst->version = 0;
00042 elst->flags = 0;
00043 elst->total_entries = 0;
00044 elst->table = 0;
00045 }
00046
00047 void quicktime_elst_init_all(quicktime_elst_t *elst)
00048 {
00049 if(!elst->total_entries)
00050 {
00051 elst->total_entries = 1;
00052 elst->table = (quicktime_elst_table_t*)calloc(1, sizeof(quicktime_elst_table_t) * elst->total_entries);
00053 quicktime_elst_table_init(&(elst->table[0]));
00054 }
00055 }
00056
00057 void quicktime_elst_delete(quicktime_elst_t *elst)
00058 {
00059 int i;
00060 if(elst->total_entries)
00061 {
00062 for(i = 0; i < elst->total_entries; i++)
00063 quicktime_elst_table_delete(&(elst->table[i]));
00064 free(elst->table);
00065 }
00066 elst->total_entries = 0;
00067 }
00068
00069 void quicktime_elst_dump(quicktime_elst_t *elst)
00070 {
00071 int i;
00072 printf(" edit list (elst)\n");
00073 printf(" version %d\n", elst->version);
00074 printf(" flags %d\n", elst->flags);
00075 printf(" total_entries %d\n", elst->total_entries);
00076
00077 for(i = 0; i < elst->total_entries; i++)
00078 {
00079 quicktime_elst_table_dump(&(elst->table[i]));
00080 }
00081 }
00082
00083 void quicktime_read_elst(quicktime_t *file, quicktime_elst_t *elst)
00084 {
00085 int i;
00086 quicktime_atom_t leaf_atom;
00087
00088 elst->version = quicktime_read_char(file);
00089 elst->flags = quicktime_read_int24(file);
00090 elst->total_entries = quicktime_read_int32(file);
00091 elst->table = (quicktime_elst_table_t*)calloc(1, sizeof(quicktime_elst_table_t) * elst->total_entries);
00092 for(i = 0; i < elst->total_entries; i++)
00093 {
00094 quicktime_elst_table_init(&(elst->table[i]));
00095 quicktime_read_elst_table(file, &(elst->table[i]));
00096 }
00097 }
00098
00099 void quicktime_write_elst(quicktime_t *file, quicktime_elst_t *elst, long duration)
00100 {
00101 quicktime_atom_t atom;
00102 int i;
00103 quicktime_atom_write_header(file, &atom, "elst");
00104
00105 quicktime_write_char(file, elst->version);
00106 quicktime_write_int24(file, elst->flags);
00107 quicktime_write_int32(file, elst->total_entries);
00108 for(i = 0; i < elst->total_entries; i++)
00109 {
00110 quicktime_write_elst_table(file, elst->table, duration);
00111 }
00112
00113 quicktime_atom_write_footer(file, &atom);
00114 }