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

  1. #include "quicktime.h"
  2.  
  3. #define DEFAULT_INFO "Made with Quicktime for Linux"
  4.  
  5. int quicktime_udta_init(quicktime_udta_t *udta)
  6. {
  7.     udta->copyright = 0;
  8.     udta->copyright_len = 0;
  9.     udta->name = 0;
  10.     udta->name_len = 0;
  11.  
  12.     udta->info = malloc(strlen(DEFAULT_INFO) + 1);
  13.     udta->info_len = strlen(DEFAULT_INFO);
  14.     sprintf(udta->info, DEFAULT_INFO);
  15.     return 0;
  16. }
  17.  
  18. int quicktime_udta_delete(quicktime_udta_t *udta)
  19. {
  20.     if(udta->copyright_len)
  21.     {
  22.         free(udta->copyright);
  23.     }
  24.     if(udta->name_len)
  25.     {
  26.         free(udta->name);
  27.     }
  28.     if(udta->info_len)
  29.     {
  30.         free(udta->info);
  31.     }
  32.     quicktime_udta_init(udta);
  33.     return 0;
  34. }
  35.  
  36. void quicktime_udta_dump(quicktime_udta_t *udta)
  37. {
  38.     printf(" user data (udta)\n");
  39.     if(udta->copyright_len) printf("  copyright -> %s\n", udta->copyright);
  40.     if(udta->name_len) printf("  name -> %s\n", udta->name);
  41.     if(udta->info_len) printf("  info -> %s\n", udta->info);
  42. }
  43.  
  44. int quicktime_read_udta(quicktime_t *file, quicktime_udta_t *udta, quicktime_atom_t *udta_atom)
  45. {
  46.     quicktime_atom_t leaf_atom;
  47.     int result = 0;
  48.  
  49.     do
  50.     {
  51.         quicktime_atom_read_header(file, &leaf_atom);
  52.         
  53.         if(quicktime_atom_is(&leaf_atom, "⌐cpy"))
  54.         {
  55.             result += quicktime_read_udta_string(file, &(udta->copyright), &(udta->copyright_len));
  56.         }
  57.         else
  58.         if(quicktime_atom_is(&leaf_atom, "⌐nam"))
  59.         {
  60.             result += quicktime_read_udta_string(file, &(udta->name), &(udta->name_len));
  61.         }
  62.         else
  63.         if(quicktime_atom_is(&leaf_atom, "⌐inf"))
  64.         {
  65.             result += quicktime_read_udta_string(file, &(udta->info), &(udta->info_len));
  66.         }
  67.         else
  68.         quicktime_atom_skip(file, &leaf_atom);
  69.     }while(quicktime_position(file) < udta_atom->end);
  70.  
  71.     return result;
  72. }
  73.  
  74. void quicktime_write_udta(quicktime_t *file, quicktime_udta_t *udta)
  75. {
  76.     quicktime_atom_t atom, subatom;
  77.     quicktime_atom_write_header(file, &atom, "udta");
  78.  
  79.     if(udta->copyright_len)
  80.     {
  81.         quicktime_atom_write_header(file, &subatom, "⌐cpy");
  82.         quicktime_write_udta_string(file, udta->copyright, udta->copyright_len);
  83.         quicktime_atom_write_footer(file, &subatom);
  84.     }
  85.  
  86.     if(udta->name_len)
  87.     {
  88.         quicktime_atom_write_header(file, &subatom, "⌐nam");
  89.         quicktime_write_udta_string(file, udta->name, udta->name_len);
  90.         quicktime_atom_write_footer(file, &subatom);
  91.     }
  92.  
  93.     if(udta->info_len)
  94.     {
  95.         quicktime_atom_write_header(file, &subatom, "⌐inf");
  96.         quicktime_write_udta_string(file, udta->info, udta->info_len);
  97.         quicktime_atom_write_footer(file, &subatom);
  98.     }
  99.  
  100.     quicktime_atom_write_footer(file, &atom);
  101. }
  102.  
  103. int quicktime_read_udta_string(quicktime_t *file, char **string, int *size)
  104. {
  105.     int result;
  106.  
  107.     if(*size) free(*string);
  108.     *size = quicktime_read_int16(file);  /* Size of string */
  109.     quicktime_read_int16(file);  /* Discard language code */
  110.     *string = malloc(*size + 1);
  111.     result = quicktime_read_data(file, *string, *size);
  112.     (*string)[*size] = 0;
  113.     return !result;
  114. }
  115.  
  116. int quicktime_write_udta_string(quicktime_t *file, char *string, int size)
  117. {
  118.     int new_size = strlen(string);
  119.     int result;
  120.  
  121.     quicktime_write_int16(file, new_size);    /* String size */
  122.     quicktime_write_int16(file, 0);    /* Language code */
  123.     result = quicktime_write_data(file, string, new_size);
  124.     return !result;
  125. }
  126.  
  127. int quicktime_set_udta_string(char **string, int *size, char *new_string)
  128. {
  129.     if(*size) free(*string);
  130.     *size = strlen(new_string + 1);
  131.     *string = malloc(*size + 1);
  132.     strcpy(*string, new_string);
  133.     return 0;
  134. }
  135.