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 / moov.c < prev    next >
C/C++ Source or Header  |  2000-11-29  |  3KB  |  133 lines

  1. #include "quicktime.h"
  2.  
  3.  
  4.  
  5.  
  6.  
  7. int quicktime_moov_init(quicktime_moov_t *moov)
  8. {
  9.     int i;
  10.  
  11.     moov->total_tracks = 0;
  12.     for(i = 0 ; i < MAXTRACKS; i++) moov->trak[i] = 0;
  13.     quicktime_mvhd_init(&(moov->mvhd));
  14.     quicktime_udta_init(&(moov->udta));
  15.     quicktime_ctab_init(&(moov->ctab));
  16.     return 0;
  17. }
  18.  
  19. int quicktime_moov_delete(quicktime_moov_t *moov)
  20. {
  21.     int i;
  22.     while(moov->total_tracks) quicktime_delete_trak(moov);
  23.     quicktime_mvhd_delete(&(moov->mvhd));
  24.     quicktime_udta_delete(&(moov->udta));
  25.     quicktime_ctab_delete(&(moov->ctab));
  26.     return 0;
  27. }
  28.  
  29. void quicktime_moov_dump(quicktime_moov_t *moov)
  30. {
  31.     int i;
  32.     printf("movie\n");
  33.     quicktime_mvhd_dump(&(moov->mvhd));
  34.     quicktime_udta_dump(&(moov->udta));
  35.     for(i = 0; i < moov->total_tracks; i++)
  36.         quicktime_trak_dump(moov->trak[i]);
  37.     quicktime_ctab_dump(&(moov->ctab));
  38. }
  39.  
  40.  
  41. int quicktime_read_moov(quicktime_t *file, quicktime_moov_t *moov, quicktime_atom_t *parent_atom)
  42. {
  43. /* mandatory mvhd */
  44.     quicktime_atom_t leaf_atom;
  45.  
  46.     do
  47.     {
  48.         quicktime_atom_read_header(file, &leaf_atom);
  49.         
  50.         if(quicktime_atom_is(&leaf_atom, "mvhd"))
  51.         {
  52.             quicktime_read_mvhd(file, &(moov->mvhd));
  53.         }
  54.         else
  55.         if(quicktime_atom_is(&leaf_atom, "clip"))
  56.         {
  57.             quicktime_atom_skip(file, &leaf_atom);
  58.         }
  59.         else
  60.         if(quicktime_atom_is(&leaf_atom, "trak"))
  61.         {
  62.             quicktime_trak_t *trak = quicktime_add_trak(moov);
  63.             quicktime_read_trak(file, trak, &leaf_atom);
  64. /*printf("quicktime_read_moov trak\n"); */
  65.         }
  66.         else
  67.         if(quicktime_atom_is(&leaf_atom, "udta"))
  68.         {
  69.             quicktime_read_udta(file, &(moov->udta), &leaf_atom);
  70.             quicktime_atom_skip(file, &leaf_atom);
  71.         }
  72.         else
  73.         if(quicktime_atom_is(&leaf_atom, "ctab"))
  74.         {
  75.             quicktime_read_ctab(file, &(moov->ctab));
  76.         }
  77.         else
  78.         quicktime_atom_skip(file, &leaf_atom);
  79.     }while(quicktime_position(file) < parent_atom->end);
  80.     
  81.     return 0;
  82. }
  83.  
  84. void quicktime_write_moov(quicktime_t *file, quicktime_moov_t *moov)
  85. {
  86.     quicktime_atom_t atom;
  87.     int i;
  88.     long longest_duration = 0;
  89.     long duration, timescale;
  90.     quicktime_atom_write_header(file, &atom, "moov");
  91.  
  92. /* get the duration from the longest track in the mvhd's timescale */
  93.     for(i = 0; i < moov->total_tracks; i++)
  94.     {
  95.         quicktime_trak_fix_counts(file, moov->trak[i]);
  96.         quicktime_trak_duration(moov->trak[i], &duration, ×cale);
  97.  
  98.         duration = (long)((float)duration / timescale * moov->mvhd.time_scale);
  99.  
  100.         if(duration > longest_duration)
  101.         {
  102.             longest_duration = duration;
  103.         }
  104.     }
  105.     moov->mvhd.duration = longest_duration;
  106.     moov->mvhd.selection_duration = longest_duration;
  107.  
  108.     quicktime_write_mvhd(file, &(moov->mvhd));
  109.     quicktime_write_udta(file, &(moov->udta));
  110.     for(i = 0; i < moov->total_tracks; i++)
  111.     {
  112.         quicktime_write_trak(file, moov->trak[i], moov->mvhd.time_scale);
  113.     }
  114.     /*quicktime_write_ctab(file, &(moov->ctab)); */
  115.  
  116.     quicktime_atom_write_footer(file, &atom);
  117. }
  118.  
  119. void quicktime_update_durations(quicktime_moov_t *moov)
  120. {
  121.     
  122. }
  123.  
  124. int quicktime_shift_offsets(quicktime_moov_t *moov, long offset)
  125. {
  126.     int i;
  127.     for(i = 0; i < moov->total_tracks; i++)
  128.     {
  129.         quicktime_trak_shift_offsets(moov->trak[i], offset);
  130.     }
  131.     return 0;
  132. }
  133.