home *** CD-ROM | disk | FTP | other *** search
/ Geek 6 / Geek-006.iso / linux / video / xmovie-1.5.3.tar.gz / xmovie-1.5.3.tar / xmovie-1.5.3 / quicktime / elst.c < prev    next >
C/C++ Source or Header  |  2000-11-29  |  3KB  |  114 lines

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