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

📄 atom.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
字号:
#include "quicktime.h"int quicktime_atom_reset(quicktime_atom_t *atom){	atom->end = 0;	atom->type[0] = atom->type[1] = atom->type[2] = atom->type[3] = 0;	return 0;}int quicktime_atom_read_header(quicktime_t *file, quicktime_atom_t *atom){	char header[10];	int result;	long size2;	atom->start = quicktime_position(file);	quicktime_atom_reset(atom);	if(!quicktime_read_data(file, header, HEADER_LENGTH)) return 1;	result = quicktime_atom_read_type(header, atom->type);	atom->size = quicktime_atom_read_size(header);	if (atom->size == 0) {		atom->size = file->total_length - atom->start;	}	atom->end = atom->start + atom->size;/* Skip placeholder atom */	if(quicktime_match_32(atom->type, "wide"))	{		atom->start = quicktime_position(file);		quicktime_atom_reset(atom);		if(!quicktime_read_data(file, header, HEADER_LENGTH)) 			return 1;		result = quicktime_atom_read_type(header, atom->type);		atom->size -= 8;		if(!atom->size)		{/* Wrapper ended.  Get new atom size */			atom->size = quicktime_atom_read_size(header);			if (atom->size == 0) {				atom->size = file->total_length - atom->start;			}		}		atom->end = atom->start + atom->size;	}	else/* Get extended size */	if(atom->size == 1)	{		if(!quicktime_read_data(file, header, HEADER_LENGTH)) return 1;		atom->size = quicktime_atom_read_size64(header);	}#ifdef DEBUG	printf("Reading atom %.4s length %u\n", atom->type, atom->size);#endif	return result;}int quicktime_atom_write_header(quicktime_t *file, quicktime_atom_t *atom, char *text){	atom->start = quicktime_position(file);	quicktime_write_int32(file, 0);	quicktime_write_char32(file, text);}int quicktime_atom_write_footer(quicktime_t *file, quicktime_atom_t *atom){	atom->end = quicktime_position(file);	quicktime_set_position(file, atom->start);	quicktime_write_int32(file, atom->end - atom->start);	quicktime_set_position(file, atom->end);}int quicktime_atom_is(quicktime_atom_t *atom, char *type){	if(atom->type[0] == type[0] &&		atom->type[1] == type[1] &&		atom->type[2] == type[2] &&		atom->type[3] == type[3])	return 1;	else	return 0;}long quicktime_atom_read_size(char *data){	unsigned long result;	unsigned long a, b, c, d;		a = (unsigned char)data[0];	b = (unsigned char)data[1];	c = (unsigned char)data[2];	d = (unsigned char)data[3];	result = (a<<24) | (b<<16) | (c<<8) | d;	if(result > 0 && result < HEADER_LENGTH) result = HEADER_LENGTH;	return (long)result;}u_int64_t quicktime_atom_read_size64(char *data){	u_int64_t result = 0;	int i;	for (i = 0; i < 8; i++) {		result |= data[i];		if (i < 7) {			result <<= 8;		}	}	if(result < HEADER_LENGTH) 		result = HEADER_LENGTH;	return result;}int quicktime_atom_read_type(char *data, char *type){	type[0] = data[4];	type[1] = data[5];	type[2] = data[6];	type[3] = data[7];/*printf("%c%c%c%c ", type[0], type[1], type[2], type[3]); *//* need this for quicktime_check_sig */	if(isalpha(type[0]) && isalpha(type[1]) && isalpha(type[2]) && isalpha(type[3]))	return 0;	else	return 1;}int quicktime_atom_skip(quicktime_t *file, quicktime_atom_t *atom){	/* printf("skipping atom %.4s, size %u\n", atom->type, atom->size); */	return quicktime_set_position(file, atom->end);}

⌨️ 快捷键说明

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