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

📄 box_code_base.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (!hnti || !a) return GF_BAD_PARAM;	switch (a->type) {	//this is the value for GF_RTPBox - same as HintSampleEntry for RTP !!!	case GF_ISOM_BOX_TYPE_RTP:	case GF_ISOM_BOX_TYPE_SDP:		if (hnti->SDP) return GF_BAD_PARAM;		hnti->SDP = a;		break;	default:		break;	}	return gf_list_add(hnti->boxList, a);}GF_Err hnti_Read(GF_Box *s, GF_BitStream *bs){	u32 type;	u32 length;	GF_Err e;	GF_Box *a;	GF_RTPBox *rtp;	GF_HintTrackInfoBox *ptr = (GF_HintTrackInfoBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	//WARNING: because of the HNTI at movie level, we cannot use the generic parsing scheme!	//this because the child SDP box at the movie level has a type of RTP, used for	//the HintSampleEntry !	while (ptr->size) {		//get the type of the box (4 bytes after our current position in the bitstream)		//before parsing...		type = gf_bs_peek_bits(bs, 32, 4);		if (type != GF_ISOM_BOX_TYPE_RTP) {			e = gf_isom_parse_box(&a, bs);			if (e) return e;			e = hnti_AddBox(ptr, a);			if (e) return e;			if (ptr->size<a->size) return GF_ISOM_INVALID_FILE;			ptr->size-=a->size;		} else {			u32 sr;			rtp = (GF_RTPBox*)malloc(sizeof(GF_RTPBox));			if (!rtp) return GF_OUT_OF_MEM;			rtp->size = gf_bs_read_u32(bs);			rtp->type = gf_bs_read_u32(bs);			sr = 8;			//"ITS LENGTH IS CALCULATED BY SUBSTRACTING 8 (or 12) from the box size" - QT specs			//this means that we don't have any NULL char as a delimiter in QT ...			if (rtp->size == 1) return GF_BAD_PARAM;			rtp->subType = gf_bs_read_u32(bs);			sr += 4;			if (rtp->subType != GF_ISOM_BOX_TYPE_SDP) return GF_NOT_SUPPORTED;			if (rtp->size < sr) return GF_ISOM_INVALID_FILE;			length = (u32) (rtp->size - sr);			rtp->sdpText = (char*)malloc(sizeof(char) * (length + 1));			if (!rtp->sdpText) {				free(rtp);				return GF_OUT_OF_MEM;			}			gf_bs_read_data(bs, rtp->sdpText, length);			rtp->sdpText[length] = 0;			sr += length;			e = hnti_AddBox(ptr, (GF_Box *)rtp);			if (e) return e;			if (ptr->size<rtp->size) return GF_ISOM_INVALID_FILE;			ptr->size -= rtp->size;		}	}	return GF_OK;}#ifndef GPAC_READ_ONLYGF_Err hnti_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	u32 i, count;	GF_Box *a;	GF_RTPBox *rtp;	GF_HintTrackInfoBox *ptr = (GF_HintTrackInfoBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	count = gf_list_count(ptr->boxList);	for (i = 0; i < count; i ++) {		a = (GF_Box*)gf_list_get(ptr->boxList, i);		if (a->type != GF_ISOM_BOX_TYPE_RTP) {			e = gf_isom_box_write(a, bs);			if (e) return e;		} else {			//write the GF_RTPBox by hand			rtp = (GF_RTPBox *)a;			e = gf_isom_box_write_header(a, bs);			if (e) return e;			gf_bs_write_u32(bs, rtp->subType);			//don't write the NULL char			gf_bs_write_data(bs, rtp->sdpText, strlen(rtp->sdpText));		}	}	return GF_OK;}GF_Err hnti_Size(GF_Box *s){	GF_Err e;	u32 i, count;	GF_Box *a;	GF_RTPBox *rtp;	GF_HintTrackInfoBox *ptr = (GF_HintTrackInfoBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_get_size(s);	if (e) return e;	count = gf_list_count(ptr->boxList);	for (i = 0; i < count; i ++) {		a = (GF_Box*)gf_list_get(ptr->boxList, i);		if (a->type != GF_ISOM_BOX_TYPE_RTP) {			e = gf_isom_box_size(a);			if (e) return e;		} else {			//get the GF_RTPBox size by hand			rtp = (GF_RTPBox *)a;			e = gf_isom_box_get_size(a);			if (e) return e;			//don't count the NULL char...			rtp->size += 4 + strlen(rtp->sdpText);		}		ptr->size += a->size;	}	return GF_OK;}#endif/**********************************************************		GF_SDPBox**********************************************************/void sdp_del(GF_Box *s){	GF_SDPBox *ptr = (GF_SDPBox *)s;	if (ptr->sdpText) free(ptr->sdpText);	free(ptr);}GF_Err sdp_Read(GF_Box *s, GF_BitStream *bs){	u32 length;	GF_SDPBox *ptr = (GF_SDPBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	length = (u32) (ptr->size);	//sdp text has no delimiter !!!	ptr->sdpText = (char*)malloc(sizeof(char) * (length+1));	if (!ptr->sdpText) return GF_OUT_OF_MEM;		gf_bs_read_data(bs, ptr->sdpText, length);	ptr->sdpText[length] = 0;	return GF_OK;}GF_Box *sdp_New(){	GF_SDPBox *tmp = (GF_SDPBox *) malloc(sizeof(GF_SDPBox));	if (!tmp) return NULL;	memset(tmp, 0, sizeof(GF_SDPBox));	tmp->type = GF_ISOM_BOX_TYPE_SDP;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err sdp_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_SDPBox *ptr = (GF_SDPBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	e = gf_isom_box_write_header(s, bs);	if (e) return e;	//don't write the NULL char!!!	gf_bs_write_data(bs, ptr->sdpText, strlen(ptr->sdpText));	return GF_OK;}GF_Err sdp_Size(GF_Box *s){	GF_Err e;	GF_SDPBox *ptr = (GF_SDPBox *)s;	e = gf_isom_box_get_size(s);	if (e) return e;	//don't count the NULL char!!!	ptr->size += strlen(ptr->sdpText);	return GF_OK;}#endif/**********************************************************		TRPY GF_Box**********************************************************/void trpy_del(GF_Box *s){	free((GF_TRPYBox *)s);}GF_Err trpy_Read(GF_Box *s, GF_BitStream *bs){	GF_TRPYBox *ptr = (GF_TRPYBox *)s;	ptr->nbBytes = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *trpy_New(){	GF_TRPYBox *tmp = (GF_TRPYBox *) malloc(sizeof(GF_TRPYBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TRPY;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err trpy_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_TRPYBox *ptr = (GF_TRPYBox *)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 trpy_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/**********************************************************		TOTL GF_Box**********************************************************/void totl_del(GF_Box *s){	free((GF_TRPYBox *)s);}GF_Err totl_Read(GF_Box *s, GF_BitStream *bs){	GF_TOTLBox *ptr = (GF_TOTLBox *)s;	ptr->nbBytes = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *totl_New(){	GF_TOTLBox *tmp = (GF_TOTLBox *) malloc(sizeof(GF_TOTLBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TOTL;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err totl_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_TOTLBox *ptr = (GF_TOTLBox *)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->nbBytes);	return GF_OK;}GF_Err totl_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/**********************************************************		NUMP GF_Box**********************************************************/void nump_del(GF_Box *s){	free((GF_NUMPBox *)s);}GF_Err nump_Read(GF_Box *s, GF_BitStream *bs){	GF_NUMPBox *ptr = (GF_NUMPBox *)s;	ptr->nbPackets = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *nump_New(){	GF_NUMPBox *tmp = (GF_NUMPBox *) malloc(sizeof(GF_NUMPBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_NUMP;	tmp->nbPackets = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err nump_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_NUMPBox *ptr = (GF_NUMPBox *)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->nbPackets);	return GF_OK;}GF_Err nump_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/**********************************************************		NPCK GF_Box**********************************************************/void npck_del(GF_Box *s){	free((GF_NPCKBox *)s);}GF_Err npck_Read(GF_Box *s, GF_BitStream *bs){	GF_NPCKBox *ptr = (GF_NPCKBox *)s;	ptr->nbPackets = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *npck_New(){	GF_NPCKBox *tmp = (GF_NPCKBox *) malloc(sizeof(GF_NPCKBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_NPCK;	tmp->nbPackets = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err npck_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_NPCKBox *ptr = (GF_NPCKBox *)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->nbPackets);	return GF_OK;}GF_Err npck_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/**********************************************************		TPYL GF_Box**********************************************************/void tpyl_del(GF_Box *s){	free((GF_NTYLBox *)s);}GF_Err tpyl_Read(GF_Box *s, GF_BitStream *bs){	GF_NTYLBox *ptr = (GF_NTYLBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	ptr->nbBytes = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *tpyl_New(){	GF_NTYLBox *tmp = (GF_NTYLBox *) malloc(sizeof(GF_NTYLBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TPYL;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tpyl_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_NTYLBox *ptr = (GF_NTYLBox *)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 tpyl_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/**********************************************************		TPAY GF_Box**********************************************************/void tpay_del(GF_Box *s){	free((GF_TPAYBox *)s);}GF_Err tpay_Read(GF_Box *s, GF_BitStream *bs){	GF_TPAYBox *ptr = (GF_TPAYBox *)s;	ptr->nbBytes = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *tpay_New(){	GF_TPAYBox *tmp = (GF_TPAYBox *) malloc(sizeof(GF_TPAYBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_TPAY;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tpay_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_TPAYBox *ptr = (GF_TPAYBox *)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->nbBytes);	return GF_OK;}GF_Err tpay_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/**********************************************************		MAXR GF_Box**********************************************************/void maxr_del(GF_Box *s){	free((GF_MAXRBox *)s);}GF_Err maxr_Read(GF_Box *s, GF_BitStream *bs){	GF_MAXRBox *ptr = (GF_MAXRBox *)s;	if (ptr == NULL) return GF_BAD_PARAM;	ptr->granularity = gf_bs_read_u32(bs);	ptr->maxDataRate = gf_bs_read_u32(bs);	return GF_OK;}GF_Box *maxr_New(){	GF_MAXRBox *tmp = (GF_MAXRBox *) malloc(sizeof(GF_MAXRBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_MAXR;	tmp->granularity = tmp->maxDataRate = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err maxr_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_MAXRBox *ptr = (GF_MAXRBox *)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->granularity);	gf_bs_write_u32(bs, ptr->maxDataRate);	return GF_OK;}GF_Err maxr_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/**********************************************************		DMED GF_Box**********************************************************/void dmed_del(GF_Box *s){	free((GF_DMEDBox *)s);}GF_Err dmed_Read(GF_Box *s, GF_BitStream *bs){	GF_DMEDBox *ptr = (GF_DMEDBox *)s;	ptr->nbBytes = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *dmed_New(){	GF_DMEDBox *tmp = (GF_DMEDBox *) malloc(sizeof(GF_DMEDBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_DMED;	tmp->nbBytes = 0;	return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err dmed_Write(GF_Box *s, GF_BitStream *bs){	GF_Err e;	GF_DMEDBox *ptr = (GF_DMEDBox *)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 dmed_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/**********************************************************		DIMM GF_Box**********************************************************/void dimm_del(GF_Box *s){	free((GF_DIMMBox *)s);}GF_Err dimm_Read(GF_Box *s, GF_BitStream *bs){	GF_DIMMBox *ptr = (GF_DIMMBox *)s;	ptr->nbBytes = gf_bs_read_u64(bs);	return GF_OK;}GF_Box *dimm_New(){	GF_DIMMBox *tmp = (GF_DIMMBox *) malloc(sizeof(GF_DIMMBox));	if (!tmp) return NULL;	tmp->type = GF_ISOM_BOX_TYPE_DIMM;	tmp->nbBytes = 0;	return (GF_Box *)tmp;

⌨️ 快捷键说明

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