📄 ipmpx_code.c
字号:
{ 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 + -