⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udta.c

📁 完整的RTP RTSP代码库
💻 C
字号:
#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);	quicktime_hnti_init(&(udta->hnti));	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_hnti_delete(&(udta->hnti));	quicktime_udta_init(udta);	return 0;}int 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);	quicktime_hnti_dump(&udta->hnti);}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	{		/* udta atoms can be terminated by a 4 byte zero */		if (udta_atom->end - quicktime_position(file) < HEADER_LENGTH) {			u_char trash[HEADER_LENGTH];			int remainder = udta_atom->end - quicktime_position(file);			quicktime_read_data(file, trash, remainder);			break;		}		quicktime_atom_read_header(file, &leaf_atom);				if(quicktime_atom_is(&leaf_atom, "ヽpy"))		{			result += quicktime_read_udta_string(file, &(udta->copyright), &(udta->copyright_len));		}		else		if(quicktime_atom_is(&leaf_atom, "﹏am"))		{			result += quicktime_read_udta_string(file, &(udta->name), &(udta->name_len));		}		else		if(quicktime_atom_is(&leaf_atom, "﹊nf"))		{			result += quicktime_read_udta_string(file, &(udta->info), &(udta->info_len));		}		else if (quicktime_atom_is(&leaf_atom, "hnti")) {			quicktime_read_hnti(file, &(udta->hnti), &leaf_atom);		}		else		quicktime_atom_skip(file, &leaf_atom);	}while(quicktime_position(file) < udta_atom->end);	return result;}int quicktime_write_udta(quicktime_t *file, quicktime_udta_t *udta){	quicktime_atom_t atom, subatom;	/*	 * Empty udta atom makes Darwin Streaming Server unhappy	 * so avoid it	 */	if (file->use_mp4) {		if (udta->copyright_len == 0		  && udta->hnti.rtp.string == NULL) {			return;		}	} else {		if (udta->copyright_len + udta->name_len + udta->info_len == 0		  && udta->hnti.rtp.string == NULL) {			return;		}	}	quicktime_atom_write_header(file, &atom, "udta");	if(udta->copyright_len)	{		quicktime_atom_write_header(file, &subatom, "ヽpy");		quicktime_write_udta_string(file, udta->copyright, udta->copyright_len);		quicktime_atom_write_footer(file, &subatom);	}	if(udta->name_len && !file->use_mp4)	{		quicktime_atom_write_header(file, &subatom, "﹏am");		quicktime_write_udta_string(file, udta->name, udta->name_len);		quicktime_atom_write_footer(file, &subatom);	}	if(udta->info_len && !file->use_mp4)	{		quicktime_atom_write_header(file, &subatom, "﹊nf");		quicktime_write_udta_string(file, udta->info, udta->info_len);		quicktime_atom_write_footer(file, &subatom);	}	if (udta->hnti.rtp.string != NULL) {		quicktime_write_hnti(file, &(udta->hnti));	}	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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -