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

📄 box_code_base.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
}#ifndef GPAC_READ_ONLYGF_Err dimm_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_DIMMBox *ptr = (GF_DIMMBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u64(bs, ptr->nbBytes);	return GF_OK;}GF_Err dimm_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 8;	return GF_OK;}#endif/**********************************************************		DREP GF_Box**********************************************************/void drep_del(GF_Box *s){	free((GF_DREPBox *)s);}GF_Err drep_Read(GF_Box *s, GF_BitStream *bs){	GF_DREPBox *ptr = (GF_DREPBox *)s;	ptr->nbBytes = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *drep_New(){	GF_DREPBox *tmp = (GF_DREPBox *) malloc(sizeof(GF_DREPBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_DREP;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err drep_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_DREPBox *ptr = (GF_DREPBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u64(bs, ptr->nbBytes);	return GF_OK;}GF_Err drep_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 8;	return GF_OK;}#endif/**********************************************************		TMIN GF_Box**********************************************************/void tmin_del(GF_Box *s){	free((GF_TMINBox *)s);}GF_Err tmin_Read(GF_Box *s, GF_BitStream *bs){	GF_TMINBox *ptr = (GF_TMINBox *)s;	ptr->minTime = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *tmin_New(){	GF_TMINBox *tmp = (GF_TMINBox *) malloc(sizeof(GF_TMINBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TMIN;	tmp->minTime = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tmin_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_TMINBox *ptr = (GF_TMINBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->minTime);	return GF_OK;}GF_Err tmin_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 4;	return GF_OK;}#endif/**********************************************************		TMAX GF_Box**********************************************************/void tmax_del(GF_Box *s){	free((GF_TMAXBox *)s);}GF_Err tmax_Read(GF_Box *s, GF_BitStream *bs){	GF_TMAXBox *ptr = (GF_TMAXBox *)s;	ptr->maxTime = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *tmax_New(){	GF_TMAXBox *tmp = (GF_TMAXBox *) malloc(sizeof(GF_TMAXBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TMAX;	tmp->maxTime = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tmax_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_TMAXBox *ptr = (GF_TMAXBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->maxTime);	return GF_OK;}GF_Err tmax_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 4;	return GF_OK;}#endif/**********************************************************		PMAX GF_Box**********************************************************/void pmax_del(GF_Box *s){	free((GF_PMAXBox *)s);}GF_Err pmax_Read(GF_Box *s, GF_BitStream *bs){	GF_PMAXBox *ptr = (GF_PMAXBox *)s;	ptr->maxSize = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *pmax_New(){	GF_PMAXBox *tmp = (GF_PMAXBox *) malloc(sizeof(GF_PMAXBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_PMAX;	tmp->maxSize = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err pmax_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_PMAXBox *ptr = (GF_PMAXBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->maxSize);	return GF_OK;}GF_Err pmax_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 4;	return GF_OK;}#endif/**********************************************************		DMAX GF_Box**********************************************************/void dmax_del(GF_Box *s){	free((GF_DMAXBox *)s);}GF_Err dmax_Read(GF_Box *s, GF_BitStream *bs){	GF_DMAXBox *ptr = (GF_DMAXBox *)s;	ptr->maxDur = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *dmax_New(){	GF_DMAXBox *tmp = (GF_DMAXBox *) malloc(sizeof(GF_DMAXBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_DMAX;	tmp->maxDur = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err dmax_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_DMAXBox *ptr = (GF_DMAXBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->maxDur);	return GF_OK;}GF_Err dmax_Size(GF_Box *s){	GF_Err e;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 4;	return GF_OK;}#endif/**********************************************************		PAYT GF_Box**********************************************************/void payt_del(GF_Box *s){	GF_PAYTBox *payt = (GF_PAYTBox *)s;	if (payt->payloadString) free(payt->payloadString);	free(payt);}GF_Err payt_Read(GF_Box *s, GF_BitStream *bs){	u32 length;	GF_PAYTBox *ptr = (GF_PAYTBox *)s;	ptr->payloadCode = gf_bs_read_u32(bs);	length = gf_bs_read_u8(bs);	ptr->payloadString = (char*)malloc(sizeof(char) * (length+1) );	if (! ptr->payloadString) return GF_OUT_OF_MEM;	gf_bs_read_data(bs, ptr->payloadString, length);	ptr->payloadString[length] = 0;	ptr->size -= 4+length+1;	return GF_OK;}GF_Box *payt_New(){	GF_PAYTBox *tmp = (GF_PAYTBox *) malloc(sizeof(GF_PAYTBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_PAYT;	tmp->payloadCode = 0;	tmp->payloadString = NULL;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err payt_Write(GF_Box *s, GF_BitStream *bs){	u32 len;	GF_Err e;	GF_PAYTBox *ptr = (GF_PAYTBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->payloadCode);	len = strlen(ptr->payloadString);	gf_bs_write_u8(bs, len);	if (len) gf_bs_write_data(bs, ptr->payloadString, len);	return GF_OK;}GF_Err payt_Size(GF_Box *s){	GF_Err e;	GF_PAYTBox *ptr = (GF_PAYTBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	s->size += 4;	if (ptr->payloadString) ptr->size += strlen(ptr->payloadString) + 1;	return GF_OK;}#endif/**********************************************************		PAYT GF_Box**********************************************************/void name_del(GF_Box *s){	GF_NameBox *name = (GF_NameBox *)s;	if (name->string) free(name->string);	free(name);}GF_Err name_Read(GF_Box *s, GF_BitStream *bs){	u32 length;	GF_NameBox *ptr = (GF_NameBox *)s;	length = (u32) (ptr->size);	ptr->string = (char*)malloc(sizeof(char) * length);	if (! ptr->string) return GF_OUT_OF_MEM;	gf_bs_read_data(bs, ptr->string, length);	return GF_OK;}GF_Box *name_New(){	GF_NameBox *tmp = (GF_NameBox *) malloc(sizeof(GF_NameBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_NAME;	tmp->string = NULL;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err name_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_NameBox *ptr = (GF_NameBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	if (ptr->string) {		gf_bs_write_data(bs, ptr->string, strlen(ptr->string) + 1);	}	return GF_OK;}GF_Err name_Size(GF_Box *s){	GF_Err e;	GF_NameBox *ptr = (GF_NameBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	if (ptr->string) ptr->size += strlen(ptr->string) + 1;	return GF_OK;}#endifvoid iods_del(GF_Box *s){	GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s;	if (ptr == NULL) return;	if (ptr->descriptor) gf_odf_desc_del(ptr->descriptor);	free(ptr);}GF_Err iods_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 descSize;	char *desc;	GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	//use the OD codec...	descSize = (u32) (ptr->size);	desc = (char*)malloc(sizeof(char) * descSize);	gf_bs_read_data(bs, desc, descSize);	e = gf_odf_desc_read(desc, descSize, &ptr->descriptor);	//OK, free our desc	free(desc);	return GF_OK;}GF_Box *iods_New(){	GF_ObjectDescriptorBox *tmp = (GF_ObjectDescriptorBox *) malloc(sizeof(GF_ObjectDescriptorBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_ObjectDescriptorBox));	gf_isom_full_box_init((GF_Box *)tmp);	tmp->type = GF_ISOM_BOX_TYPE_IODS;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err iods_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 descSize;	char *desc;	GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s;	e = gf_isom_full_box_write(s, bs);	if (e) return e;	//call our OD codec	e = gf_odf_desc_write(ptr->descriptor, &desc, &descSize);	if (e) return e;	gf_bs_write_data(bs, desc, descSize);	//and free our stuff maybe!!	free(desc);	return GF_OK;}GF_Err iods_Size(GF_Box *s){	GF_Err e;	GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	ptr->size += gf_odf_desc_size(ptr->descriptor);	return GF_OK;}#endif //GPAC_READ_ONLYvoid mdat_del(GF_Box *s){	GF_MediaDataBox *ptr = (GF_MediaDataBox *)s;	if (!s) return;		if (ptr->data) free(ptr->data);	free(ptr);}GF_Err mdat_Read(GF_Box *s, GF_BitStream *bs){	GF_MediaDataBox *ptr = (GF_MediaDataBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	ptr->dataSize = s->size;	//then skip these bytes	gf_bs_skip_bytes(bs, ptr->dataSize);	return GF_OK;}GF_Box *mdat_New(){	GF_MediaDataBox *tmp = (GF_MediaDataBox *) malloc(sizeof(GF_MediaDataBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_MediaDataBox));	tmp->type = GF_ISOM_BOX_TYPE_MDAT;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err mdat_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_MediaDataBox *ptr = (GF_MediaDataBox *)s;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	//make sure we have some data ...	//if not, we handle that independantly (edit files)	if (ptr->data) {		gf_bs_write_data(bs, ptr->data, (u32) ptr->dataSize);	}	return GF_OK;}GF_Err mdat_Size(GF_Box *s){	GF_Err e;	GF_MediaDataBox *ptr = (GF_MediaDataBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;		ptr->size += ptr->dataSize;	return GF_OK;}#endif //GPAC_READ_ONLYvoid mdhd_del(GF_Box *s){	GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s;	if (ptr == NULL) return;	free(ptr);}GF_Err mdhd_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	if (ptr->version == 1) {		ptr->creationTime = gf_bs_read_u64(bs);		ptr->modificationTime = gf_bs_read_u64(bs);		ptr->timeScale = gf_bs_read_u32(bs);		ptr->duration = gf_bs_read_u64(bs);	} else {		ptr->creationTime = gf_bs_read_u32(bs);		ptr->modificationTime = gf_bs_read_u32(bs);		ptr->timeScale = gf_bs_read_u32(bs);		ptr->duration = gf_bs_read_u32(bs);	}	//our padding bit	gf_bs_read_int(bs, 1);	//the spec is unclear here, just says "the value 0 is interpreted as undetermined"	ptr->packedLanguage[0] = gf_bs_read_int(bs, 5);	ptr->packedLanguage[1] = gf_bs_read_int(bs, 5);	ptr->packedLanguage[2] = gf_bs_read_int(bs, 5);	//but before or after compaction ?? We assume before	if (ptr->packedLanguage[0] || ptr->packedLanguage[1] || ptr->packedLanguage[2]) {		ptr->packedLanguage[0] += 0x60;		ptr->packedLanguage[1] += 0x60;		ptr->packedLanguage[2] += 0x60;	} else {		ptr->packedLanguage[0] = 'u';		ptr->packedLanguage[1] = 'n';		ptr->packedLanguage[2] = 'd';	}	ptr->reserved = gf_bs_read_u16(bs);	return GF_OK;}GF_Box *mdhd_New(){	GF_MediaHeaderBox *tmp = (GF_MediaHeaderBox *) malloc(sizeof(GF_MediaHeaderBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_MediaHeaderBox));	gf_isom_full_box_init((GF_Box *) tmp);	tmp->type = GF_ISOM_BOX_TYPE_MDHD;	tmp->packedLanguage[0] = 'u';	tmp->packedLanguage[1] = 'n';	tmp->packedLanguage[2] = 'd';	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err mdhd_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s;	e = gf_isom_full_box_write(s, bs);	if (e) return e;    if (ptr->version == 1) {		gf_bs_write_u64(bs, ptr->creationTime);		gf_bs_write_u64(bs, ptr->modificationTime);		gf_bs_write_u32(bs, ptr->timeScale);		gf_bs_write_u64(bs, ptr->duration);	} else {		gf_bs_write_u32(bs, (u32) ptr->creationTime);		gf_bs_write_u32(bs, (u32) ptr->modificationTime);		gf_bs_write_u32(bs, ptr->timeScale);		gf_bs_write_u32(bs, (u32) ptr->duration);	}	//SPECS: BIT(1) of padding	gf_bs_write_int(bs, 0, 1);	gf_bs_write_int(bs, ptr->packedLanguage[0] - 0x60, 5);	gf_bs_write_int(bs, ptr->packedLanguage[1] - 0x60, 5

⌨️ 快捷键说明

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