Пример #1
0
GF_Err schi_AddBox(GF_Box *s, GF_Box *a)
{
	GF_SchemeInformationBox *ptr = (GF_SchemeInformationBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_IKMS:
		if (ptr->ikms) return GF_ISOM_INVALID_FILE;
		ptr->ikms = (GF_ISMAKMSBox*)a;
		return GF_OK;
	case GF_ISOM_BOX_TYPE_ISFM:
		if (ptr->isfm) return GF_ISOM_INVALID_FILE;
		ptr->isfm = (GF_ISMASampleFormatBox*)a;
		return GF_OK;
	case GF_ISOM_BOX_TYPE_ODKM:
		if (ptr->okms) return GF_ISOM_INVALID_FILE;
		ptr->okms = (GF_OMADRMKMSBox*)a;
		return GF_OK;
	case GF_ISOM_BOX_TYPE_TENC:
		if (ptr->tenc) return GF_ISOM_INVALID_FILE;
		ptr->tenc = (GF_TrackEncryptionBox *)a;
		return GF_OK;
	case GF_ISOM_BOX_TYPE_UUID:
		if (((GF_UUIDBox*)a)->internal_4cc==GF_ISOM_BOX_UUID_TENC) {
			if (ptr->piff_tenc) return GF_ISOM_INVALID_FILE;
			ptr->piff_tenc = (GF_PIFFTrackEncryptionBox *)a;
			return GF_OK;
		} else {
			return gf_isom_box_add_default(s, a);
		}
	default:
		return gf_isom_box_add_default(s, a);
	}
}
Пример #2
0
GF_Err ipro_AddBox(GF_Box *s, GF_Box *a)
{
	GF_ItemProtectionBox *ptr = (GF_ItemProtectionBox *)s;
	if (a->type == GF_ISOM_BOX_TYPE_SINF)
		return gf_list_add(ptr->protection_information, a);
	else
		return gf_isom_box_add_default(s, a);
}
Пример #3
0
GF_Err iinf_AddBox(GF_Box *s, GF_Box *a)
{
	GF_ItemInfoBox *ptr = (GF_ItemInfoBox *)s;

	if (a->type == GF_ISOM_BOX_TYPE_INFE) {
		return gf_list_add(ptr->item_infos, a);
	} else {
		return gf_isom_box_add_default(s, a);
	}
}
Пример #4
0
static GF_Err wvtt_Add(GF_Box *s, GF_Box *box)
{
	GF_WebVTTSampleEntryBox *wvtt = (GF_WebVTTSampleEntryBox *)s;
	switch(box->type) {
	case GF_ISOM_BOX_TYPE_VTTC:
		wvtt->config = (GF_StringBox *)box;
		break;
	default:
		return gf_isom_box_add_default(s, box);
	}
	return GF_OK;
}
Пример #5
0
GF_Err akey_AddBox(GF_Box *s, GF_Box *a)
{
	GF_AdobeKeyInfoBox *ptr = (GF_AdobeKeyInfoBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_FLXS:
		if (ptr->params) return GF_ISOM_INVALID_FILE;
		ptr->params = (GF_AdobeFlashAccessParamsBox *)a;
		break;
	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #6
0
GF_Err ahdr_AddBox(GF_Box *s, GF_Box *a)
{
	GF_AdobeDRMHeaderBox *ptr = (GF_AdobeDRMHeaderBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_APRM:
		if (ptr->std_enc_params) return GF_ISOM_INVALID_FILE;
		ptr->std_enc_params = (GF_AdobeStdEncryptionParamsBox *)a;
		break;

	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #7
0
GF_Err gf_isom_cenc_allocate_storage(GF_ISOFile *the_file, u32 trackNumber, u32 container_type, u32 AlgorithmID, u8 IV_size, bin128 KID)
{
	GF_SampleTableBox *stbl;
	GF_TrackBox *trak = gf_isom_get_track_from_file(the_file, trackNumber);
	if (!trak) return GF_BAD_PARAM;
	stbl = trak->Media->information->sampleTable;
	if (!stbl) return GF_BAD_PARAM;
	if (!stbl) return GF_BAD_PARAM;

	switch (container_type) {
	case GF_ISOM_BOX_UUID_PSEC:
		if (stbl->piff_psec) return GF_OK;
		stbl->piff_psec = (GF_Box *)gf_isom_create_piff_psec_box(1, 0, AlgorithmID, IV_size, KID);
		//senc will be written and destroyed with the other boxes
		return gf_isom_box_add_default((GF_Box *) stbl, stbl->piff_psec);

	case GF_ISOM_BOX_TYPE_SENC:
		if (stbl->senc) return GF_OK;
		stbl->senc = (GF_Box *)gf_isom_create_samp_enc_box(0, 0);
		//senc will be written and destroyed with the other boxes
		return gf_isom_box_add_default((GF_Box *) stbl, stbl->senc);
	}
	return GF_NOT_SUPPORTED;
}
Пример #8
0
GF_Err meta_AddBox(GF_Box *s, GF_Box *a)
{
	GF_MetaBox *ptr = (GF_MetaBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_HDLR:
		if (ptr->handler) return GF_ISOM_INVALID_FILE;
		ptr->handler = (GF_HandlerBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_PITM:
		if (ptr->primary_resource) return GF_ISOM_INVALID_FILE;
		ptr->primary_resource = (GF_PrimaryItemBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_DINF:
		if (ptr->file_locations) return GF_ISOM_INVALID_FILE;
		ptr->file_locations = (GF_DataInformationBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_ILOC:
		if (ptr->item_locations) return GF_ISOM_INVALID_FILE;
		ptr->item_locations = (GF_ItemLocationBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_IPRO:
		if (ptr->protections) return GF_ISOM_INVALID_FILE;
		ptr->protections = (GF_ItemProtectionBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_IINF:
		if (ptr->item_infos) return GF_ISOM_INVALID_FILE;
		ptr->item_infos = (GF_ItemInfoBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_IREF:
		if (ptr->item_refs) return GF_ISOM_INVALID_FILE;
		ptr->item_refs = (GF_ItemReferenceBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_IPRP:
		if (ptr->item_props) return GF_ISOM_INVALID_FILE;
		ptr->item_props = (GF_ItemPropertiesBox*)a;
		break;
	//case ???: ptr->IPMP_control = (???*)a; break;
	case GF_ISOM_BOX_TYPE_XML:
	case GF_ISOM_BOX_TYPE_BXML:
	case GF_ISOM_BOX_TYPE_ILST:
	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #9
0
GF_Err aprm_AddBox(GF_Box *s, GF_Box *a)
{
	GF_AdobeStdEncryptionParamsBox *ptr = (GF_AdobeStdEncryptionParamsBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_AEIB:
		if (ptr->enc_info) return GF_ISOM_INVALID_FILE;
		ptr->enc_info = (GF_AdobeEncryptionInfoBox *)a;
		break;
	case GF_ISOM_BOX_TYPE_AKEY:
		if (ptr->key_info) return GF_ISOM_INVALID_FILE;
		ptr->key_info = (GF_AdobeKeyInfoBox *)a;
		break;

	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #10
0
GF_Err adkm_AddBox(GF_Box *s, GF_Box *a)
{
	GF_AdobeDRMKeyManagementSystemBox *ptr = (GF_AdobeDRMKeyManagementSystemBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_AHDR:
		if (ptr->header) return GF_ISOM_INVALID_FILE;
		ptr->header = (GF_AdobeDRMHeaderBox *)a;
		break;
	case GF_ISOM_BOX_TYPE_ADAF:
		if (ptr->au_format) return GF_ISOM_INVALID_FILE;
		ptr->au_format = (GF_AdobeDRMAUFormatBox *)a;
		break;

	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #11
0
static GF_Err vtcu_Add(GF_Box *s, GF_Box *box)
{
	GF_VTTCueBox *cuebox = (GF_VTTCueBox *)s;
	switch(box->type) {
	case GF_ISOM_BOX_TYPE_CTIM:
		cuebox->time = (GF_StringBox *)box;
		break;
	case GF_ISOM_BOX_TYPE_IDEN:
		cuebox->id = (GF_StringBox *)box;
		break;
	case GF_ISOM_BOX_TYPE_STTG:
		cuebox->settings = (GF_StringBox *)box;
		break;
	case GF_ISOM_BOX_TYPE_PAYL:
		cuebox->payload = (GF_StringBox *)box;
		break;
	default:
		return gf_isom_box_add_default(s, box);
	}
	return GF_OK;
}
Пример #12
0
GF_Err sinf_AddBox(GF_Box *s, GF_Box *a)
{
	GF_ProtectionSchemeInfoBox *ptr = (GF_ProtectionSchemeInfoBox *)s;
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_FRMA:
		if (ptr->original_format) return GF_ISOM_INVALID_FILE;
		ptr->original_format = (GF_OriginalFormatBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_SCHM:
		if (ptr->scheme_type) return GF_ISOM_INVALID_FILE;
		ptr->scheme_type = (GF_SchemeTypeBox*)a;
		break;
	case GF_ISOM_BOX_TYPE_SCHI:
		if (ptr->info) return GF_ISOM_INVALID_FILE;
		ptr->info = (GF_SchemeInformationBox*)a;
		break;
	default:
		return gf_isom_box_add_default(s, a);
	}
	return GF_OK;
}
Пример #13
0
GF_Err tx3g_Read(GF_Box *s, GF_BitStream *bs)
{
	GF_Err e;
	GF_Box *a;
	GF_Tx3gSampleEntryBox *ptr = (GF_Tx3gSampleEntryBox*)s;

	if (ptr->size < 18 + GPP_BOX_SIZE + GPP_STYLE_SIZE) return GF_ISOM_INVALID_FILE;

	gf_bs_read_data(bs, ptr->reserved, 6);
	ptr->dataReferenceIndex = gf_bs_read_u16(bs);
	ptr->displayFlags = gf_bs_read_u32(bs);
	ptr->horizontal_justification = gf_bs_read_u8(bs);
	ptr->vertical_justification = gf_bs_read_u8(bs);
	ptr->back_color = gpp_read_rgba(bs);
	gpp_read_box(bs, &ptr->default_box);
	gpp_read_style(bs, &ptr->default_style);
	ptr->size -= 18 + GPP_BOX_SIZE + GPP_STYLE_SIZE;

	while (ptr->size >= 8) {
		e = gf_isom_parse_box(&a, bs);
		if (e) return e;
		if (ptr->size<a->size) {
			GF_LOG(GF_LOG_WARNING, GF_LOG_CONTAINER, ("[iso file] Box \"%s\" larger than remaining bytes in tx3g - ignoring box\n", gf_4cc_to_str(a->type)));
			ptr->size = 0;
			gf_isom_box_del(a);
			return GF_OK;
		}

		ptr->size -= a->size;
		if (a->type == GF_ISOM_BOX_TYPE_FTAB) {
			if (ptr->font_table) gf_isom_box_del((GF_Box *)ptr->font_table);
			ptr->font_table = (GF_FontTableBox *)a;
		}
		else {
			e = gf_isom_box_add_default(s, a);
			if (e) return e;
		}
	}
	return GF_OK;
}
Пример #14
0
GF_Err ohdr_AddBox(GF_Box *s, GF_Box *a)
{
	return gf_isom_box_add_default(s, a);
}