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

📄 box_code_base.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
{	GF_Err e;	char *enc_desc;	u32 descSize = 0;	GF_ESDBox *ptr = (GF_ESDBox *)s;		e = gf_isom_full_box_write(s, bs);	if (e) return e;	e = gf_odf_desc_write((GF_Descriptor *)ptr->desc, &enc_desc, &descSize);	if (e) return e;	gf_bs_write_data(bs, enc_desc, descSize);	//free our buffer	free(enc_desc);	return GF_OK;}GF_Err esds_Size(GF_Box *s){	GF_Err e;	u32 descSize = 0;	GF_ESDBox *ptr = (GF_ESDBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	descSize = gf_odf_desc_size((GF_Descriptor *)ptr->desc);	ptr->size += descSize;	return GF_OK;}#endif //GPAC_READ_ONLYvoid free_del(GF_Box *s){	GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Err free_Read(GF_Box *s, GF_BitStream *bs){	u32 bytesToRead;	GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s;	if (ptr->size > 0xFFFFFFFF) return GF_IO_ERR;		bytesToRead = (u32) (ptr->size);		if (bytesToRead) {		ptr->data = (char*)malloc(bytesToRead * sizeof(char));		gf_bs_read_data(bs, ptr->data, bytesToRead);		ptr->dataSize = bytesToRead;	}	return GF_OK;}GF_Box *free_New(){	GF_FreeSpaceBox *tmp = (GF_FreeSpaceBox *) malloc(sizeof(GF_FreeSpaceBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_FreeSpaceBox));	tmp->type = GF_ISOM_BOX_TYPE_FREE;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err free_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	if (ptr->dataSize)	gf_bs_write_data(bs, ptr->data, ptr->dataSize);	return GF_OK;}GF_Err free_Size(GF_Box *s){	GF_Err e;	GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	ptr->size += ptr->dataSize;	return GF_OK;}#endif //GPAC_READ_ONLYvoid ftyp_del(GF_Box *s){	GF_FileTypeBox *ptr = (GF_FileTypeBox *) s;	if (ptr->altBrand) free(ptr->altBrand);	free(ptr);}GF_Box *ftyp_New(){	GF_FileTypeBox *tmp;		tmp = (GF_FileTypeBox *) malloc(sizeof(GF_FileTypeBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_FileTypeBox));	tmp->type = GF_ISOM_BOX_TYPE_FTYP;	return (GF_Box *)tmp;}GF_Err ftyp_Read(GF_Box *s,GF_BitStream *bs){	u32 i;	GF_FileTypeBox *ptr = (GF_FileTypeBox *)s;	ptr->majorBrand = gf_bs_read_u32(bs);	ptr->minorVersion = gf_bs_read_u32(bs);	ptr->size -= 8;	ptr->altCount = ( (u32) (ptr->size)) / 4;	if (!ptr->altCount) return GF_OK;	if (ptr->altCount * 4 != (u32) (ptr->size)) return GF_ISOM_INVALID_FILE;	ptr->altBrand = (u32*)malloc(sizeof(u32)*ptr->altCount);	for (i = 0; i<ptr->altCount; i++) {		ptr->altBrand[i] = gf_bs_read_u32(bs);	}	return GF_OK;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err ftyp_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 i;	GF_FileTypeBox *ptr = (GF_FileTypeBox *) s;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->majorBrand);	gf_bs_write_u32(bs, ptr->minorVersion);	for (i=0; i<ptr->altCount; i++) {		gf_bs_write_u32(bs, ptr->altBrand[i]);	}	return GF_OK;}GF_Err ftyp_Size(GF_Box *s){	GF_Err e;	GF_FileTypeBox *ptr = (GF_FileTypeBox *)s;		e = gf_isom_box_get_size(s);	if (e) return e;	ptr->size += 8 + ptr->altCount * 4;	return GF_OK;}#endif //GPAC_READ_ONLYvoid gnrm_del(GF_Box *s){	GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Box *gnrm_New(){	GF_GenericSampleEntryBox *tmp = (GF_GenericSampleEntryBox *) malloc(sizeof(GF_GenericSampleEntryBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_GenericSampleEntryBox));	tmp->type = GF_ISOM_BOX_TYPE_GNRM;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnrm_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s;		//carefull we are not writing the box type but the entry type so switch for write	ptr->type = ptr->EntryType;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	ptr->type = GF_ISOM_BOX_TYPE_GNRM;	gf_bs_write_data(bs, ptr->reserved, 6);	gf_bs_write_u16(bs, ptr->dataReferenceIndex);	gf_bs_write_data(bs,  ptr->data, ptr->data_size);	return GF_OK;}GF_Err gnrm_Size(GF_Box *s){	GF_Err e;	GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s;	s->type = ptr->EntryType;	e = gf_isom_box_get_size(s);	s->type = GF_ISOM_BOX_TYPE_GNRM;	if (e) return e;	ptr->size += 8+ptr->data_size;	return GF_OK;}#endif //GPAC_READ_ONLYvoid gnrv_del(GF_Box *s){	GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Box *gnrv_New(){	GF_GenericVisualSampleEntryBox *tmp = (GF_GenericVisualSampleEntryBox *) malloc(sizeof(GF_GenericVisualSampleEntryBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_GenericVisualSampleEntryBox));	tmp->type = GF_ISOM_BOX_TYPE_GNRV;	gf_isom_video_sample_entry_init((GF_VisualSampleEntryBox*) tmp);	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnrv_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s;		//carefull we are not writing the box type but the entry type so switch for write	ptr->type = ptr->EntryType;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	ptr->type = GF_ISOM_BOX_TYPE_GNRV;	gf_isom_video_sample_entry_write((GF_VisualSampleEntryBox *)ptr, bs);	gf_bs_write_data(bs,  ptr->data, ptr->data_size);	return GF_OK;}GF_Err gnrv_Size(GF_Box *s){	GF_Err e;	GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s;	s->type = ptr->EntryType;	e = gf_isom_box_get_size(s);	s->type = GF_ISOM_BOX_TYPE_GNRV;	if (e) return e;	gf_isom_video_sample_entry_size((GF_VisualSampleEntryBox *)s);	ptr->size += ptr->data_size;	return GF_OK;}#endif //GPAC_READ_ONLYvoid gnra_del(GF_Box *s){	GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s;	if (ptr->data) free(ptr->data);	free(ptr);}GF_Box *gnra_New(){	GF_GenericAudioSampleEntryBox *tmp = (GF_GenericAudioSampleEntryBox *) malloc(sizeof(GF_GenericAudioSampleEntryBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_GenericAudioSampleEntryBox));	tmp->type = GF_ISOM_BOX_TYPE_GNRA;	gf_isom_audio_sample_entry_init((GF_AudioSampleEntryBox*) tmp);	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnra_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s;		//carefull we are not writing the box type but the entry type so switch for write	ptr->type = ptr->EntryType;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	ptr->type = GF_ISOM_BOX_TYPE_GNRA;	gf_isom_audio_sample_entry_write((GF_AudioSampleEntryBox *)ptr, bs);	gf_bs_write_data(bs,  ptr->data, ptr->data_size);	return GF_OK;}GF_Err gnra_Size(GF_Box *s){	GF_Err e;	GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s;	s->type = ptr->EntryType;	e = gf_isom_box_get_size(s);	s->type = GF_ISOM_BOX_TYPE_GNRA;	if (e) return e;	gf_isom_audio_sample_entry_size((GF_AudioSampleEntryBox *)s);	ptr->size += ptr->data_size;	return GF_OK;}#endif //GPAC_READ_ONLYvoid hdlr_del(GF_Box *s){	GF_HandlerBox *ptr = (GF_HandlerBox *)s;	if (ptr == NULL) return;	if (ptr->nameUTF8) free(ptr->nameUTF8);	free(ptr);}GF_Err hdlr_Read(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_HandlerBox *ptr = (GF_HandlerBox *)s;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	ptr->reserved1 = gf_bs_read_u32(bs);	ptr->handlerType = gf_bs_read_u32(bs);	gf_bs_read_data(bs, (char*)ptr->reserved2, 12);	ptr->size -= 20;	if (ptr->size) {		ptr->nameUTF8 = (char*)malloc((u32) ptr->size);		if (ptr->nameUTF8 == NULL) return GF_OUT_OF_MEM;		gf_bs_read_data(bs, ptr->nameUTF8, (u32) ptr->size);		/*safety check in case the string is not null-terminated*/		if (ptr->nameUTF8[ptr->size-1]) {			char *str = (char*)malloc((u32) ptr->size + 1);			memcpy(str, ptr->nameUTF8, (u32) ptr->size);			str[ptr->size] = 0;			free(ptr->nameUTF8);			ptr->nameUTF8 = str;		}	}	return GF_OK;}GF_Box *hdlr_New(){	GF_HandlerBox *tmp = (GF_HandlerBox *) malloc(sizeof(GF_HandlerBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_HandlerBox));	gf_isom_full_box_init((GF_Box *)tmp);	tmp->type = GF_ISOM_BOX_TYPE_HDLR;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err hdlr_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_HandlerBox *ptr = (GF_HandlerBox *)s;	e = gf_isom_full_box_write(s, bs);	if (e) return e;	gf_bs_write_u32(bs, ptr->reserved1);	gf_bs_write_u32(bs, ptr->handlerType);	gf_bs_write_data(bs, (char*)ptr->reserved2, 12);	if (ptr->nameUTF8) gf_bs_write_data(bs, ptr->nameUTF8, strlen(ptr->nameUTF8));	/*NULL-terminated string is written*/	gf_bs_write_u8(bs, 0);	return GF_OK;}GF_Err hdlr_Size(GF_Box *s){	GF_Err e;	GF_HandlerBox *ptr = (GF_HandlerBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	ptr->size += 20 + 1;	if (ptr->nameUTF8) ptr->size += strlen(ptr->nameUTF8);	return GF_OK;}#endif //GPAC_READ_ONLYvoid hinf_del(GF_Box *s){	GF_HintInfoBox *hinf = (GF_HintInfoBox *)s;	gf_isom_box_array_del(hinf->boxList);	gf_list_del(hinf->dataRates);	free(hinf);}GF_Box *hinf_New(){	GF_HintInfoBox *tmp = (GF_HintInfoBox *)malloc(sizeof(GF_HintInfoBox));	if (!tmp) return NULL;	memset(tmp, 0, sizeof(GF_HintInfoBox));	tmp->boxList = gf_list_new();	if (!tmp->boxList) {		free(tmp);		return NULL;	}	tmp->dataRates = gf_list_new();	if (!tmp->dataRates) {		gf_list_del(tmp->boxList);		free(tmp);		return NULL;	}	tmp->type = GF_ISOM_BOX_TYPE_HINF;	return (GF_Box *)tmp;}GF_Err hinf_AddBox(GF_Box *s, GF_Box *a){	GF_MAXRBox *maxR;	GF_HintInfoBox *hinf = (GF_HintInfoBox *)s;	u32 i;	switch (a->type) {	case GF_ISOM_BOX_TYPE_MAXR:		i=0;		while ((maxR = (GF_MAXRBox *)gf_list_enum(hinf->dataRates, &i))) {			if (maxR->granularity == ((GF_MAXRBox *)a)->granularity) return GF_ISOM_INVALID_FILE;		}		gf_list_add(hinf->dataRates, a);		break;	default:		break;	}	return gf_list_add(hinf->boxList, a);}GF_Err hinf_Read(GF_Box *s, GF_BitStream *bs){	return gf_isom_read_box_list(s, bs, hinf_AddBox);}#ifndef GPAC_READ_ONLYGF_Err hinf_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_HintInfoBox *ptr = (GF_HintInfoBox *)s;	if (!s) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	return gf_isom_box_array_write(s, ptr->boxList, bs);}GF_Err hinf_Size(GF_Box *s){	GF_Err e;	GF_HintInfoBox *ptr = (GF_HintInfoBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	return gf_isom_box_array_size(s, ptr->boxList);}#endif	void hmhd_del(GF_Box *s){	GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s;	if (ptr == NULL) return;	free(ptr);}GF_Err hmhd_Read(GF_Box *s,GF_BitStream *bs){	GF_Err e;	GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s;	e = gf_isom_full_box_read(s, bs);	if (e) return e;	ptr->maxPDUSize = gf_bs_read_u16(bs);	ptr->avgPDUSize = gf_bs_read_u16(bs);	ptr->maxBitrate = gf_bs_read_u32(bs);	ptr->avgBitrate = gf_bs_read_u32(bs);	ptr->slidingAverageBitrate = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *hmhd_New(){	GF_HintMediaHeaderBox *tmp = (GF_HintMediaHeaderBox *) malloc(sizeof(GF_HintMediaHeaderBox));	if (tmp == NULL) return NULL;	memset(tmp, 0, sizeof(GF_HintMediaHeaderBox));		gf_isom_full_box_init((GF_Box *)tmp);	tmp->type = GF_ISOM_BOX_TYPE_HMHD;	return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err hmhd_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s;		e = gf_isom_full_box_write(s, bs);	if (e) return e;	gf_bs_write_u16(bs, ptr->maxPDUSize);	gf_bs_write_u16(bs, ptr->avgPDUSize);	gf_bs_write_u32(bs, ptr->maxBitrate);	gf_bs_write_u32(bs, ptr->avgBitrate);	gf_bs_write_u32(bs, ptr->slidingAverageBitrate);	return GF_OK;}GF_Err hmhd_Size(GF_Box *s){	GF_Err e;	GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s;	e = gf_isom_full_box_get_size(s);	if (e) return e;	ptr->size += 16;	return GF_OK;}#endif //GPAC_READ_ONLYGF_Box *hnti_New(){	GF_HintTrackInfoBox *tmp = (GF_HintTrackInfoBox *)malloc(sizeof(GF_HintTrackInfoBox));	if (!tmp) return NULL;	memset(tmp, 0, sizeof(GF_HintTrackInfoBox));	tmp->boxList = gf_list_new();	if (!tmp->boxList) {		free(tmp);		return NULL;	}	tmp->type = GF_ISOM_BOX_TYPE_HNTI;	return (GF_Box *)tmp;}void hnti_del(GF_Box *a){	GF_Box *t;	GF_RTPBox *rtp;	GF_HintTrackInfoBox *ptr = (GF_HintTrackInfoBox *)a;	while (gf_list_count(ptr->boxList)) {		t = (GF_Box*)gf_list_get(ptr->boxList, 0);		if (t->type != GF_ISOM_BOX_TYPE_RTP) {			gf_isom_box_del(t);		} else {			rtp = (GF_RTPBox *)t;			if (rtp->sdpText) free(rtp->sdpText);			free(rtp);		}		gf_list_rem(ptr->boxList, 0);	}	gf_list_del(ptr->boxList);	free(ptr);}GF_Err hnti_AddBox(GF_HintTrackInfoBox *hnti, GF_Box *a){

⌨️ 快捷键说明

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