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

📄 ipmpx_code.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
{	GF_IPMPX_CanProcess*p = (GF_IPMPX_CanProcess*)_p;	p->canProcess = gf_bs_read_int(bs, 1);	gf_bs_read_int(bs, 7);	return GF_OK;}static u32 SizeGF_IPMPX_CanProcess(GF_IPMPX_Data *_p){	return 1;}static GF_Err WriteGF_IPMPX_CanProcess(GF_BitStream *bs, GF_IPMPX_Data *_p){	GF_IPMPX_CanProcess*p = (GF_IPMPX_CanProcess*)_p;	gf_bs_write_int(bs, p->canProcess ? 1 : 0, 1);	gf_bs_write_int(bs, 0, 7);	return GF_OK;}static GF_IPMPX_Data *NewGF_IPMPX_OpaqueData(u8 tag){	GF_IPMPX_OpaqueData*ptr;	GF_IPMPX_DATA_ALLOC(ptr, GF_IPMPX_OpaqueData, tag);	return (GF_IPMPX_Data *) ptr;}static void DelGF_IPMPX_OpaqueData(GF_IPMPX_Data *_p){	GF_IPMPX_OpaqueData *p = (GF_IPMPX_OpaqueData*)_p;	GF_IPMPX_DELETE_ARRAY(p->opaqueData);	free(p);}static GF_Err ReadGF_IPMPX_OpaqueData(GF_BitStream *bs, GF_IPMPX_Data *_p, u32 size){	GF_IPMPX_OpaqueData*p = (GF_IPMPX_OpaqueData*)_p;	p->opaqueData = GF_IPMPX_GetByteArray(bs);	return GF_OK;}static u32 SizeGF_IPMPX_OpaqueData(GF_IPMPX_Data *_p){	GF_IPMPX_OpaqueData*p = (GF_IPMPX_OpaqueData*)_p;	return GF_IPMPX_GetByteArraySize(p->opaqueData);}static GF_Err WriteGF_IPMPX_OpaqueData(GF_BitStream *bs, GF_IPMPX_Data *_p){	GF_IPMPX_OpaqueData*p = (GF_IPMPX_OpaqueData*)_p;	GF_IPMPX_WriteByteArray(bs, p->opaqueData);	return GF_OK;}static GF_IPMPX_Data *NewGF_IPMPX_KeyData(){	GF_IPMPX_KeyData*ptr;	GF_IPMPX_DATA_ALLOC(ptr, GF_IPMPX_KeyData, GF_IPMPX_KEY_DATA_TAG);	return (GF_IPMPX_Data *) ptr;}static void DelGF_IPMPX_KeyData(GF_IPMPX_Data *_p){	GF_IPMPX_KeyData*p = (GF_IPMPX_KeyData*)_p;	GF_IPMPX_DELETE_ARRAY(p->keyBody);	GF_IPMPX_DELETE_ARRAY(p->OpaqueData);	free(p);}static GF_Err ReadGF_IPMPX_KeyData(GF_BitStream *bs, GF_IPMPX_Data *_p, u32 size){	GF_IPMPX_KeyData*p = (GF_IPMPX_KeyData*)_p;	p->keyBody = GF_IPMPX_GetByteArray(bs);	p->flags = 0;	if (gf_bs_read_int(bs, 1)) p->flags |= 1;	if (gf_bs_read_int(bs, 1)) p->flags |= 1<<1;	if (gf_bs_read_int(bs, 1)) p->flags |= 1<<2;	if (gf_bs_read_int(bs, 1)) p->flags |= 1<<3;	gf_bs_read_int(bs, 4);	if (p->flags & (1)) p->startDTS = gf_bs_read_long_int(bs, 64);	if (p->flags & (1<<1)) p->startPacketID = gf_bs_read_int(bs, 32);	if (p->flags & (1<<2)) p->expireDTS = gf_bs_read_long_int(bs, 64);	if (p->flags & (1<<3)) p->expirePacketID = gf_bs_read_int(bs, 32);	p->OpaqueData = GF_IPMPX_GetByteArray(bs);	return GF_OK;}static u32 SizeGF_IPMPX_KeyData(GF_IPMPX_Data *_p){	u32 size = 0;	GF_IPMPX_KeyData*p = (GF_IPMPX_KeyData*)_p;	size += GF_IPMPX_GetByteArraySize(p->keyBody);	size += 1;	if (p->flags & (1)) size += 8;	if (p->flags & (1<<1)) size += 4;	if (p->flags & (1<<2)) size += 8;	if (p->flags & (1<<3)) size += 4;	size += GF_IPMPX_GetByteArraySize(p->OpaqueData);	return size;}static GF_Err WriteGF_IPMPX_KeyData(GF_BitStream *bs, GF_IPMPX_Data *_p){	GF_IPMPX_KeyData*p = (GF_IPMPX_KeyData*)_p;	GF_IPMPX_WriteByteArray(bs, p->keyBody);	gf_bs_write_int(bs, (p->flags & (1)) ? 1 : 0, 1);	gf_bs_write_int(bs, (p->flags & (1<<1)) ? 1 : 0, 1);	gf_bs_write_int(bs, (p->flags & (1<<2)) ? 1 : 0, 1);	gf_bs_write_int(bs, (p->flags & (1<<3)) ? 1 : 0, 1);	gf_bs_write_int(bs, 0, 4);	if (p->flags & (1)) gf_bs_write_long_int(bs, p->startDTS, 64);	if (p->flags & (1<<1)) gf_bs_write_int(bs, p->startPacketID, 32);	if (p->flags & (1<<2)) gf_bs_write_long_int(bs, p->expireDTS, 64);	if (p->flags & (1<<3)) gf_bs_write_int(bs, p->expirePacketID, 32);	GF_IPMPX_WriteByteArray(bs, p->OpaqueData);	return GF_OK;}static GF_IPMPX_Data *NewGF_IPMPX_SelectiveDecryptionInit(){	GF_IPMPX_SelectiveDecryptionInit*ptr;	GF_IPMPX_DATA_ALLOC(ptr, GF_IPMPX_SelectiveDecryptionInit, GF_IPMPX_SEL_DEC_INIT_TAG);	ptr->SelEncBuffer = gf_list_new();	ptr->SelEncFields = gf_list_new();	return (GF_IPMPX_Data *) ptr;}static void DelGF_IPMPX_SelectiveDecryptionInit(GF_IPMPX_Data *_p){	GF_IPMPX_SelectiveDecryptionInit*p = (GF_IPMPX_SelectiveDecryptionInit*)_p;	while (gf_list_count(p->SelEncBuffer)) {		GF_IPMPX_SelEncBuffer *sb = (GF_IPMPX_SelEncBuffer *)gf_list_get(p->SelEncBuffer, 0);		gf_list_rem(p->SelEncBuffer, 0);		GF_IPMPX_DELETE_ARRAY(sb->Stream_Cipher_Specific_Init_Info);		free(sb);	}	gf_list_del(p->SelEncBuffer);	while (gf_list_count(p->SelEncFields)) {		GF_IPMPX_SelEncField*sf = (GF_IPMPX_SelEncField*)gf_list_get(p->SelEncFields, 0);		gf_list_rem(p->SelEncFields, 0);		GF_IPMPX_DELETE_ARRAY(sf->shuffleSpecificInfo);		if (sf->mappingTable) free(sf->mappingTable);		free(sf);	}	gf_list_del(p->SelEncFields);	if (p->RLE_Data) free(p->RLE_Data);	free(p);}static GF_Err ReadGF_IPMPX_SelectiveDecryptionInit(GF_BitStream *bs, GF_IPMPX_Data *_p, u32 size){	u32 count, i;	Bool is_spec;	GF_IPMPX_SelectiveDecryptionInit*p = (GF_IPMPX_SelectiveDecryptionInit*)_p;	p->mediaTypeExtension = gf_bs_read_int(bs, 8);	p->mediaTypeIndication = gf_bs_read_int(bs, 8);	p->profileLevelIndication = gf_bs_read_int(bs, 8);	p->compliance = gf_bs_read_int(bs, 8);	count = gf_bs_read_int(bs, 8);	while (count) {		Bool is_block;		GF_IPMPX_SelEncBuffer *sb;		GF_SAFEALLOC(sb, GF_IPMPX_SelEncBuffer);		gf_list_add(p->SelEncBuffer, sb);		count--;		gf_bs_read_data(bs, (char*)sb->cipher_Id, 16);		sb->syncBoundary = gf_bs_read_int(bs, 8);		is_block = gf_bs_read_int(bs, 1);		gf_bs_read_int(bs, 7);		if (is_block) {			sb->mode = gf_bs_read_int(bs, 8);			sb->blockSize = gf_bs_read_int(bs, 16);			sb->keySize = gf_bs_read_int(bs, 16);		} else {			sb->Stream_Cipher_Specific_Init_Info = GF_IPMPX_GetByteArray(bs);		}	}	is_spec = gf_bs_read_int(bs, 1);	gf_bs_read_int(bs, 7);	if (is_spec) {		Bool is_map;		count = gf_bs_read_int(bs, 8);		while (count) {			GF_IPMPX_SelEncField *sf;			GF_SAFEALLOC(sf, GF_IPMPX_SelEncField);			gf_list_add(p->SelEncFields, sf);			count--;			sf->field_Id = gf_bs_read_int(bs, 8);			sf->field_Scope = gf_bs_read_int(bs, 3);			gf_bs_read_int(bs, 5);			sf->buf = gf_bs_read_int(bs, 8);			is_map = gf_bs_read_int(bs, 1);			gf_bs_read_int(bs, 7);			if (is_map) {				Bool sendMapTable = gf_bs_read_int(bs, 1);				Bool isShuffled = gf_bs_read_int(bs, 1);				gf_bs_read_int(bs, 6);				if (sendMapTable) {					sf->mappingTableSize = gf_bs_read_int(bs, 16);					sf->mappingTable = (u16*)malloc(sizeof(u16) * sf->mappingTableSize);					for (i=0; i<sf->mappingTableSize; i++) sf->mappingTable[i] = gf_bs_read_int(bs, 16);				}				if (isShuffled) sf->shuffleSpecificInfo = GF_IPMPX_GetByteArray(bs);			}		}	} else {		p->RLE_DataLength = gf_bs_read_int(bs, 16);		p->RLE_Data = (u16*)malloc(sizeof(u16)*p->RLE_DataLength);		for (i=0; i<p->RLE_DataLength; i++) p->RLE_Data[i] = gf_bs_read_int(bs, 16);	}	return GF_OK;}static u32 SizeGF_IPMPX_SelectiveDecryptionInit(GF_IPMPX_Data *_p){	u32 size, i;	GF_IPMPX_SelectiveDecryptionInit*p = (GF_IPMPX_SelectiveDecryptionInit*)_p;	size = 5;	for (i=0; i<gf_list_count(p->SelEncBuffer); i++) {		GF_IPMPX_SelEncBuffer *sb = (GF_IPMPX_SelEncBuffer *)gf_list_get(p->SelEncBuffer, i);		size += 18;		if (sb->Stream_Cipher_Specific_Init_Info) {			size += GF_IPMPX_GetByteArraySize(sb->Stream_Cipher_Specific_Init_Info);		} else {			size += 5;		}	}	size += 1;	if (p->RLE_Data) {		size += 2 + 2*p->RLE_DataLength;	} else {		size += 1;		for (i=0; i<gf_list_count(p->SelEncFields); i++) {			GF_IPMPX_SelEncField *sf = (GF_IPMPX_SelEncField *)gf_list_get(p->SelEncFields, i);			size += 4;			if (sf->mappingTable || sf->shuffleSpecificInfo) {				size += 1;				if (sf->mappingTable) size += 2 + 2*sf->mappingTableSize;				if (sf->shuffleSpecificInfo) size += GF_IPMPX_GetByteArraySize(sf->shuffleSpecificInfo);			}		}	}	return size;}static GF_Err WriteGF_IPMPX_SelectiveDecryptionInit(GF_BitStream *bs, GF_IPMPX_Data *_p){	u32 count, i;	GF_IPMPX_SelectiveDecryptionInit*p = (GF_IPMPX_SelectiveDecryptionInit*)_p;	gf_bs_write_int(bs, p->mediaTypeExtension, 8);	gf_bs_write_int(bs, p->mediaTypeIndication, 8);	gf_bs_write_int(bs, p->profileLevelIndication, 8);	gf_bs_write_int(bs, p->compliance, 8);	count = gf_list_count(p->SelEncBuffer);	gf_bs_write_int(bs, count, 8);	for (i=0; i<count; i++) {		GF_IPMPX_SelEncBuffer *sb = (GF_IPMPX_SelEncBuffer *)gf_list_get(p->SelEncBuffer, i);		gf_bs_write_data(bs, (char*)sb->cipher_Id, 16);		gf_bs_write_int(bs, sb->syncBoundary, 8);		gf_bs_write_int(bs, sb->Stream_Cipher_Specific_Init_Info ? 0 : 1, 1);		gf_bs_write_int(bs, 0, 7);		if (sb->Stream_Cipher_Specific_Init_Info) {			GF_IPMPX_WriteByteArray(bs, sb->Stream_Cipher_Specific_Init_Info);		} else {			gf_bs_write_int(bs, sb->mode, 8);			gf_bs_write_int(bs, sb->blockSize, 16);			gf_bs_write_int(bs, sb->keySize, 16);		}	}	gf_bs_write_int(bs, p->RLE_Data ? 0 : 1, 1);	gf_bs_write_int(bs, 0, 7);	if (p->RLE_Data) {		gf_bs_write_int(bs, p->RLE_DataLength, 16);		for (i=0; i<p->RLE_DataLength; i++) gf_bs_write_int(bs, p->RLE_Data[i], 16);	} else {		count = gf_list_count(p->SelEncFields);		gf_bs_write_int(bs, count, 8);		for (i=0; i<count; i++) {			GF_IPMPX_SelEncField *sf = (GF_IPMPX_SelEncField *)gf_list_get(p->SelEncFields, i);			gf_bs_write_int(bs, sf->field_Id, 8);			gf_bs_write_int(bs, sf->field_Scope, 3);			gf_bs_write_int(bs, 0, 5);			gf_bs_write_int(bs, sf->buf, 8);			gf_bs_write_int(bs, (sf->mappingTable || sf->shuffleSpecificInfo) ? 1 : 0, 1);			gf_bs_write_int(bs, 0, 7);			if (sf->mappingTable || sf->shuffleSpecificInfo) {				gf_bs_write_int(bs, sf->mappingTable ? 1 : 0, 1);				gf_bs_write_int(bs, sf->shuffleSpecificInfo ? 1 : 0, 1);				gf_bs_write_int(bs, 0, 6);				if (sf->mappingTable) {					gf_bs_write_int(bs, sf->mappingTableSize, 16);					for (i=0; i<sf->mappingTableSize; i++) gf_bs_write_int(bs, sf->mappingTable[i], 16);				}				if (sf->shuffleSpecificInfo) GF_IPMPX_WriteByteArray(bs, sf->shuffleSpecificInfo);			}		}	}	return GF_OK;}static GF_IPMPX_Data *NewGF_IPMPX_WatermarkingInit(u8 tag){	GF_IPMPX_WatermarkingInit *ptr;	GF_IPMPX_DATA_ALLOC(ptr, GF_IPMPX_WatermarkingInit, tag);	return (GF_IPMPX_Data *) ptr;}static void DelGF_IPMPX_WatermarkingInit(GF_IPMPX_Data *_p){	GF_IPMPX_WatermarkingInit *p = (GF_IPMPX_WatermarkingInit*)_p;	if (p->wmPayload) free(p->wmPayload);	if (p->opaqueData) free(p->opaqueData);	free(p);}static GF_Err ReadGF_IPMPX_WatermarkingInit(GF_BitStream *bs, GF_IPMPX_Data *_p, u32 size){	Bool has_opaque_data;	GF_IPMPX_WatermarkingInit *p = (GF_IPMPX_WatermarkingInit*)_p;	p->inputFormat = gf_bs_read_int(bs, 8);	p->requiredOp = gf_bs_read_int(bs, 4);	has_opaque_data = gf_bs_read_int(bs, 1);	gf_bs_read_int(bs, 3);	if (p->inputFormat==0x01) {		if (p->tag == GF_IPMPX_AUDIO_WM_INIT_TAG) {			p->nChannels = gf_bs_read_int(bs, 8);			p->bitPerSample = gf_bs_read_int(bs, 8);			p->frequency = gf_bs_read_int(bs, 32);		} else {			p->frame_horizontal_size = gf_bs_read_int(bs, 16);			p->frame_vertical_size = gf_bs_read_int(bs, 16);			p->chroma_format = gf_bs_read_int(bs, 8);		}	}	switch (p->requiredOp) {	case GF_IPMPX_WM_INSERT:	case GF_IPMPX_WM_REMARK:		p->wmPayloadLen = gf_bs_read_int(bs, 16);		p->wmPayload = (char*)malloc(sizeof(u8) * p->wmPayloadLen);		gf_bs_read_data(bs, p->wmPayload, p->wmPayloadLen);		break;	case GF_IPMPX_WM_EXTRACT:	case GF_IPMPX_WM_DETECT_COMPRESSION:		p->wmRecipientId = gf_bs_read_int(bs, 16);		break;	}	if (has_opaque_data) {		p->opaqueDataSize = gf_bs_read_int(bs, 16);		p->opaqueData = (char*)malloc(sizeof(u8) * p->wmPayloadLen);		gf_bs_read_data(bs, p->opaqueData, p->opaqueDataSize);	}	return GF_OK;}static u32 SizeGF_IPMPX_WatermarkingInit(GF_IPMPX_Data *_p){	u32 size;	GF_IPMPX_WatermarkingInit *p = (GF_IPMPX_WatermarkingInit*)_p;	size = 2;	if (p->inputFormat==0x01) size += (p->tag == GF_IPMPX_AUDIO_WM_INIT_TAG) ? 6 : 5;	switch (p->requiredOp) {	case GF_IPMPX_WM_INSERT:	case GF_IPMPX_WM_REMARK:		size += 2+p->wmPayloadLen;		break;	case GF_IPMPX_WM_EXTRACT:	case GF_IPMPX_WM_DETECT_COMPRESSION:		size += 2;		break;	}	if (p->opaqueData) size += p->opaqueDataSize + 2;	return size;}static GF_Err WriteGF_IPMPX_WatermarkingInit(GF_BitStream *bs, GF_IPMPX_Data *_p){	GF_IPMPX_WatermarkingInit*p = (GF_IPMPX_WatermarkingInit*)_p;	gf_bs_write_int(bs, p->inputFormat, 8);	gf_bs_write_int(bs, p->requiredOp, 4);	gf_bs_write_int(bs, p->opaqueData ? 1 : 0, 1);	gf_bs_write_int(bs, 0, 3);	if (p->inputFormat==0x01) {		if (p->tag == GF_IPMPX_AUDIO_WM_INIT_TAG) {			gf_bs_write_int(bs, p->nChannels, 8);			gf_bs_write_int(bs, p->bitPerSample, 8);			gf_bs_write_int(bs, p->frequency, 32);		} else {			gf_bs_write_int(bs, p->frame_horizontal_size, 16);			gf_bs_write_int(bs, p->frame_vertical_size, 16);			gf_bs_write_int(bs, p->chroma_format, 8);		}	}	switch (p->requiredOp) {	case GF_IPMPX_WM_INSERT:	case GF_IPMPX_WM_REMARK:		gf_bs_write_int(bs, p->wmPayloadLen, 16);		gf_bs_write_data(bs, p->wmPayload, p->wmPayloadLen);		break;	case GF_IPMPX_WM_EXTRACT:	case GF_IPMPX_WM_DETECT_COMPRESSION:		gf_bs_write_int(bs, p->wmRecipientId, 16);		break;	}	if (p->opaqueData) {		gf_bs_write_int(bs, p->opaqueDataSize, 16);

⌨️ 快捷键说明

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