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

📄 box_code_base.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
	//the flag set indicates we have a string (WE HAVE TO for URLs)    if ( !(ptr->flags & 1)) {		//to check, the spec says: First name, then location		if (ptr->nameURN) {			gf_bs_write_data(bs, ptr->nameURN, (u32)strlen(ptr->nameURN) + 1);		}		if (ptr->location) {			gf_bs_write_data(bs, ptr->location, (u32)strlen(ptr->location) + 1);		}	}	return GF_OK;}GF_Err urn_Size(GF_Box *s){	GF_Err e;	GF_DataEntryURNBox *ptr = (GF_DataEntryURNBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	if ( !(ptr->flags & 1)) {		if (ptr->nameURN) ptr->size += 1 + strlen(ptr->nameURN);		if (ptr->location) ptr->size += 1 + strlen(ptr->location);	}	return GF_OK;}#endif //GPAC_READ_ONLYvoid defa_del(GF_Box *s){	GF_UnknownBox *ptr = (GF_UnknownBox *) s;	if (!s) return;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Err defa_Read(GF_Box *s, GF_BitStream *bs){	u32 bytesToRead;	GF_UnknownBox *ptr = (GF_UnknownBox *)s;	if (ptr->size > 0xFFFFFFFF) return GF_ISOM_INVALID_FILE;	bytesToRead = (u32) (ptr->size);	if (bytesToRead) {		ptr->data = (char*)malloc(bytesToRead);		if (ptr->data == NULL ) return GF_OUT_OF_MEM;		ptr->dataSize = bytesToRead;		gf_bs_read_data(bs, ptr->data, ptr->dataSize);	}	return GF_OK;}//warning: we don't have any boxType, trick has to be done while creating..GF_Box *defa_New(){	GF_UnknownBox *tmp = (GF_UnknownBox *) malloc(sizeof(GF_UnknownBox));	memset(tmp, 0, sizeof(GF_UnknownBox));	return (GF_Box *) tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err defa_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_UnknownBox *ptr = (GF_UnknownBox *)s;	if (!s) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;    if (ptr->data) {		gf_bs_write_data(bs, ptr->data, ptr->dataSize);	}	return GF_OK;}GF_Err defa_Size(GF_Box *s){	GF_Err e;	GF_UnknownBox *ptr = (GF_UnknownBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	ptr->size += ptr->dataSize;	return GF_OK;}#endif //GPAC_READ_ONLYvoid uuid_del(GF_Box *s){	GF_UnknownUUIDBox *ptr = (GF_UnknownUUIDBox *) s;	if (!s) return;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Err uuid_Read(GF_Box *s, GF_BitStream *bs){	u32 bytesToRead;	GF_UnknownUUIDBox *ptr = (GF_UnknownUUIDBox *)s;	if (ptr->size > 0xFFFFFFFF) return GF_ISOM_INVALID_FILE;	bytesToRead = (u32) (ptr->size);	if (bytesToRead) {		ptr->data = (char*)malloc(bytesToRead);		if (ptr->data == NULL ) return GF_OUT_OF_MEM;		ptr->dataSize = bytesToRead;		gf_bs_read_data(bs, ptr->data, ptr->dataSize);	}	return GF_OK;}//warning: we don't have any boxType, trick has to be done while creating..GF_Box *uuid_New(){	GF_UnknownUUIDBox *tmp = (GF_UnknownUUIDBox *) malloc(sizeof(GF_UnknownUUIDBox));	memset(tmp, 0, sizeof(GF_UnknownUUIDBox));	tmp->type = GF_ISOM_BOX_TYPE_UUID;	return (GF_Box *) tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err uuid_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_UnknownUUIDBox *ptr = (GF_UnknownUUIDBox*)s;	if (!s) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;    if (ptr->data) {		gf_bs_write_data(bs, ptr->data, ptr->dataSize);	}	return GF_OK;}GF_Err uuid_Size(GF_Box *s){	GF_Err e;	GF_UnknownUUIDBox*ptr = (GF_UnknownUUIDBox*)s;	e = gf_isom_box_get_size(s);	if (e) return e;	ptr->size += ptr->dataSize;	return GF_OK;}#endif //GPAC_READ_ONLYvoid dinf_del(GF_Box *s){	GF_DataInformationBox *ptr = (GF_DataInformationBox *)s;	if (ptr == NULL) return;	gf_isom_box_del((GF_Box *)ptr->dref);	free(ptr);}GF_Err dinf_AddBox(GF_Box *s, GF_Box *a){	GF_DataInformationBox *ptr = (GF_DataInformationBox *)s;	switch(a->type) {	case GF_ISOM_BOX_TYPE_DREF:		if (ptr->dref) return GF_ISOM_INVALID_FILE;		ptr->dref = (GF_DataReferenceBox *)a;		return GF_OK;			}	gf_isom_box_del(a);	return GF_OK;		}GF_Err dinf_Read(GF_Box *s, GF_BitStream *bs){	return gf_isom_read_box_list(s, bs, dinf_AddBox);}GF_Box *dinf_New(){	GF_DataInformationBox *tmp = (GF_DataInformationBox *) malloc(sizeof(GF_DataInformationBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_DataInformationBox));	tmp->type = GF_ISOM_BOX_TYPE_DINF;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err dinf_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_DataInformationBox *ptr = (GF_DataInformationBox *)s;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	if (ptr->dref) {		e = gf_isom_box_write((GF_Box *)ptr->dref, bs);		if (e) return e;	}	return GF_OK;}GF_Err dinf_Size(GF_Box *s){	GF_Err e;	GF_DataInformationBox *ptr = (GF_DataInformationBox *)s;	e = gf_isom_box_get_size(s);	if (ptr->dref) {		e = gf_isom_box_size((GF_Box *) ptr->dref);		if (e) return e;		ptr->size += ptr->dref->size;	}	return GF_OK;}#endif //GPAC_READ_ONLYvoid dref_del(GF_Box *s){	GF_DataReferenceBox *ptr = (GF_DataReferenceBox *) s;	if (ptr == NULL) return;	gf_isom_box_array_del(ptr->boxList);	free(ptr);}GF_Err dref_AddDataEntry(GF_DataReferenceBox *ptr, GF_Box *entry){	return gf_list_add(ptr->boxList, entry);}GF_Err dref_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 count, i;	GF_Box *a;	GF_DataReferenceBox *ptr = (GF_DataReferenceBox *)s;		if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	count = gf_bs_read_u32(bs);	for ( i = 0; i < count; i++ ) {		e = gf_isom_parse_box(&a, bs);		if (e) return e;		if (ptr->size<a->size) return GF_ISOM_INVALID_FILE;		e = gf_list_add(ptr->boxList, a);		if (e) return e;		ptr->size -= a->size;	}	return GF_OK;}GF_Box *dref_New(){	GF_DataReferenceBox *tmp = (GF_DataReferenceBox *) malloc(sizeof(GF_DataReferenceBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_DataReferenceBox));	gf_isom_full_box_init((GF_Box *) tmp);	tmp->boxList = gf_list_new();	if (!tmp->boxList) {		free(tmp);		return NULL;	}	tmp->type = GF_ISOM_BOX_TYPE_DREF;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err dref_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 count;	GF_DataReferenceBox *ptr = (GF_DataReferenceBox *)s;	if (!s) return GF_BAD_PARAM;	e = gf_isom_full_box_write(s, bs);	if (e) return e;	count = gf_list_count(ptr->boxList);	gf_bs_write_u32(bs, count);	return gf_isom_box_array_write(s, ptr->boxList, bs);}GF_Err dref_Size(GF_Box *s){	GF_Err e;	GF_DataReferenceBox *ptr = (GF_DataReferenceBox *)s;	if (!s) return GF_BAD_PARAM;	e = gf_isom_full_box_get_size(s);	if (e) return e;	ptr->size += 4;	e = gf_isom_box_array_size(s, ptr->boxList);	if (e) return e;	return GF_OK;}#endif //GPAC_READ_ONLYvoid edts_del(GF_Box *s){	GF_EditBox *ptr = (GF_EditBox *) s;	gf_isom_box_del((GF_Box *)ptr->editList);	free(ptr);}GF_Err edts_AddBox(GF_Box *s, GF_Box *a){	GF_EditBox *ptr = (GF_EditBox *)s;	if (a->type == GF_ISOM_BOX_TYPE_ELST) {		if (ptr->editList) return GF_BAD_PARAM;		ptr->editList = (GF_EditListBox *)a;		return GF_OK;	}	gf_isom_box_del(a);	return GF_OK;}GF_Err edts_Read(GF_Box *s, GF_BitStream *bs){	return gf_isom_read_box_list(s, bs, edts_AddBox);}GF_Box *edts_New(){	GF_EditBox *tmp;	GF_SAFEALLOC(tmp, GF_EditBox);	if (tmp == NULL) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_EDTS;	return (GF_Box *) tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err edts_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_EditBox *ptr = (GF_EditBox *)s;	//here we have a trick: if editList is empty, skip the box	if (gf_list_count(ptr->editList->entryList)) {		e = gf_isom_box_write_header(s, bs);		if (e) return e;		e = gf_isom_box_write((GF_Box *) ptr->editList, bs);		if (e) return e;	}	return GF_OK;}GF_Err edts_Size(GF_Box *s){	GF_Err e;	GF_EditBox *ptr = (GF_EditBox *)s;	//here we have a trick: if editList is empty, skip the box	if (! gf_list_count(ptr->editList->entryList)) {		ptr->size = 0;	} else {		e = gf_isom_box_get_size(s);		if (e) return e;		e = gf_isom_box_size((GF_Box *)ptr->editList);		if (e) return e;		ptr->size += ptr->editList->size;	}	return GF_OK;}#endif //GPAC_READ_ONLYvoid elst_del(GF_Box *s){	GF_EditListBox *ptr;	GF_EdtsEntry *p;	u32 entryCount;	u32 i;	ptr = (GF_EditListBox *)s;	if (ptr == NULL) return;	entryCount = gf_list_count(ptr->entryList);	for (i = 0; i < entryCount; i++) {		p = (GF_EdtsEntry*)gf_list_get(ptr->entryList, i);		if (p) free(p);	}	gf_list_del(ptr->entryList);	free(ptr);}GF_Err elst_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 entries;	s32 tr;	u32 entryCount;	GF_EdtsEntry *p;	GF_EditListBox *ptr = (GF_EditListBox *)s;		e = gf_isom_full_box_read(s, bs);	if (e) return e;	entryCount = gf_bs_read_u32(bs);	for (entries = 0; entries < entryCount; entries++ ) {		p = (GF_EdtsEntry *) malloc(sizeof(GF_EdtsEntry));		if (!p) return GF_OUT_OF_MEM;		if (ptr->version == 1) {			p->segmentDuration = gf_bs_read_u64(bs);			p->mediaTime = (s64) gf_bs_read_u64(bs);		} else {			p->segmentDuration = gf_bs_read_u32(bs);			tr = gf_bs_read_u32(bs);			p->mediaTime = (s64) tr;		}		p->mediaRate = gf_bs_read_u32(bs);		gf_list_add(ptr->entryList, p);	}	return GF_OK;}GF_Box *elst_New(){	GF_EditListBox *tmp;		tmp = (GF_EditListBox *) malloc(sizeof(GF_EditListBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_EditListBox));	gf_isom_full_box_init((GF_Box *)tmp);	tmp->entryList = gf_list_new();	if (!tmp->entryList) {		free(tmp);		return NULL;	}	tmp->type = GF_ISOM_BOX_TYPE_ELST;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err elst_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 i;	u32 entryCount;	GF_EdtsEntry *p;	GF_EditListBox *ptr = (GF_EditListBox *)s;	if (!ptr) return GF_BAD_PARAM;	entryCount = gf_list_count(ptr->entryList);	e = gf_isom_full_box_write(s, bs);	if (e) return e;	gf_bs_write_u32(bs, entryCount);	for (i = 0; i < entryCount; i++ ) {		p = (GF_EdtsEntry*)gf_list_get(ptr->entryList, i);		if (ptr->version == 1) {			gf_bs_write_u64(bs, p->segmentDuration);			gf_bs_write_u64(bs, p->mediaTime);		} else {			gf_bs_write_u32(bs, (u32) p->segmentDuration);			gf_bs_write_u32(bs, (s32) p->mediaTime);		}		gf_bs_write_u32(bs, p->mediaRate);	}	return GF_OK;}GF_Err elst_Size(GF_Box *s){	GF_Err e;	u32 durtimebytes;	u32 i, entryCount;	GF_EditListBox *ptr = (GF_EditListBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	//entry count	ptr->size += 4;	entryCount = gf_list_count(ptr->entryList);	ptr->version = 0;	for (i=0; i<entryCount; i++) {		GF_EdtsEntry *p = (GF_EdtsEntry*)gf_list_get(ptr->entryList, i);		if ((p->segmentDuration>0xFFFFFFFF) || (p->mediaTime>0xFFFFFFFF)) {			ptr->version = 1;			break;		}	}	durtimebytes = (ptr->version == 1 ? 16 : 8) + 4;	ptr->size += (entryCount * durtimebytes);	return GF_OK;}#endif //GPAC_READ_ONLYvoid esds_del(GF_Box *s){	GF_ESDBox *ptr = (GF_ESDBox *)s;	if (ptr == NULL)	return;	if (ptr->desc) gf_odf_desc_del((GF_Descriptor *)ptr->desc);	free(ptr);}GF_Err esds_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 descSize;	char *enc_desc;	u32 SLIsPredefined(GF_SLConfig *sl);	GF_ESDBox *ptr = (GF_ESDBox *)s;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	descSize = (u32) (ptr->size);	if (descSize) {		enc_desc = (char*)malloc(sizeof(char) * descSize);		if (!enc_desc) return GF_OUT_OF_MEM;		//get the payload		gf_bs_read_data(bs, enc_desc, descSize);		//send it to the OD Codec		e = gf_odf_desc_read(enc_desc, descSize, (GF_Descriptor **) &ptr->desc);		//OK, free our desc		free(enc_desc);		//we do not abbort on error, but skip the descritpor		if (e) {			ptr->desc = NULL;		} else {			/*fix broken files*/			if (!ptr->desc->URLString) {				if (!ptr->desc->slConfig) {					ptr->desc->slConfig = (GF_SLConfig *) gf_odf_desc_new(GF_ODF_SLC_TAG);					ptr->desc->slConfig->predefined = SLPredef_MP4;				} else if (ptr->desc->slConfig->predefined != SLPredef_MP4) {					ptr->desc->slConfig->predefined = SLPredef_MP4;					gf_odf_slc_set_pref(ptr->desc->slConfig);				}			}		}	}	return GF_OK;}GF_Box *esds_New(){	GF_ESDBox *tmp = (GF_ESDBox *) malloc(sizeof(GF_ESDBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_ESDBox));	gf_isom_full_box_init((GF_Box *) tmp);	tmp->type = GF_ISOM_BOX_TYPE_ESDS;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err esds_Write(GF_Box *s, GF_BitStream *bs)

⌨️ 快捷键说明

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