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 >
Wrap
C/C++ Source or Header
|
2000-11-29
|
3KB
|
135 lines
#include "quicktime.h"
#define DEFAULT_INFO "Made with Quicktime for Linux"
int quicktime_udta_init(quicktime_udta_t *udta)
{
udta->copyright = 0;
udta->copyright_len = 0;
udta->name = 0;
udta->name_len = 0;
udta->info = malloc(strlen(DEFAULT_INFO) + 1);
udta->info_len = strlen(DEFAULT_INFO);
sprintf(udta->info, DEFAULT_INFO);
return 0;
}
int quicktime_udta_delete(quicktime_udta_t *udta)
{
if(udta->copyright_len)
{
free(udta->copyright);
}
if(udta->name_len)
{
free(udta->name);
}
if(udta->info_len)
{
free(udta->info);
}
quicktime_udta_init(udta);
return 0;
}
void quicktime_udta_dump(quicktime_udta_t *udta)
{
printf(" user data (udta)\n");
if(udta->copyright_len) printf(" copyright -> %s\n", udta->copyright);
if(udta->name_len) printf(" name -> %s\n", udta->name);
if(udta->info_len) printf(" info -> %s\n", udta->info);
}
int quicktime_read_udta(quicktime_t *file, quicktime_udta_t *udta, quicktime_atom_t *udta_atom)
{
quicktime_atom_t leaf_atom;
int result = 0;
do
{
quicktime_atom_read_header(file, &leaf_atom);
if(quicktime_atom_is(&leaf_atom, "⌐cpy"))
{
result += quicktime_read_udta_string(file, &(udta->copyright), &(udta->copyright_len));
}
else
if(quicktime_atom_is(&leaf_atom, "⌐nam"))
{
result += quicktime_read_udta_string(file, &(udta->name), &(udta->name_len));
}
else
if(quicktime_atom_is(&leaf_atom, "⌐inf"))
{
result += quicktime_read_udta_string(file, &(udta->info), &(udta->info_len));
}
else
quicktime_atom_skip(file, &leaf_atom);
}while(quicktime_position(file) < udta_atom->end);
return result;
}
void quicktime_write_udta(quicktime_t *file, quicktime_udta_t *udta)
{
quicktime_atom_t atom, subatom;
quicktime_atom_write_header(file, &atom, "udta");
if(udta->copyright_len)
{
quicktime_atom_write_header(file, &subatom, "⌐cpy");
quicktime_write_udta_string(file, udta->copyright, udta->copyright_len);
quicktime_atom_write_footer(file, &subatom);
}
if(udta->name_len)
{
quicktime_atom_write_header(file, &subatom, "⌐nam");
quicktime_write_udta_string(file, udta->name, udta->name_len);
quicktime_atom_write_footer(file, &subatom);
}
if(udta->info_len)
{
quicktime_atom_write_header(file, &subatom, "⌐inf");
quicktime_write_udta_string(file, udta->info, udta->info_len);
quicktime_atom_write_footer(file, &subatom);
}
quicktime_atom_write_footer(file, &atom);
}
int quicktime_read_udta_string(quicktime_t *file, char **string, int *size)
{
int result;
if(*size) free(*string);
*size = quicktime_read_int16(file); /* Size of string */
quicktime_read_int16(file); /* Discard language code */
*string = malloc(*size + 1);
result = quicktime_read_data(file, *string, *size);
(*string)[*size] = 0;
return !result;
}
int quicktime_write_udta_string(quicktime_t *file, char *string, int size)
{
int new_size = strlen(string);
int result;
quicktime_write_int16(file, new_size); /* String size */
quicktime_write_int16(file, 0); /* Language code */
result = quicktime_write_data(file, string, new_size);
return !result;
}
int quicktime_set_udta_string(char **string, int *size, char *new_string)
{
if(*size) free(*string);
*size = strlen(new_string + 1);
*string = malloc(*size + 1);
strcpy(*string, new_string);
return 0;
}