Beispiel #1
0
GF_Err gf_odf_size_ipmp_update(GF_IPMPUpdate *ipmpUp, u32 *outSize)
{
	GF_Descriptor *tmp;
	u32 i, tmpSize;
	if (!ipmpUp) return GF_BAD_PARAM;

	*outSize = 0;
	i = 0;
	while ((tmp = (GF_Descriptor *)gf_list_enum(ipmpUp->IPMPDescList, &i))) {
		gf_odf_size_descriptor(tmp, &tmpSize);
		*outSize += tmpSize + gf_odf_size_field_size(tmpSize);
	}
	return GF_OK;
}
Beispiel #2
0
GF_Err gf_odf_size_od_update(GF_ODUpdate *odUp, u32 *outSize)
{
	GF_Descriptor *tmp;
	u32 i, tmpSize;
	if (!odUp) return GF_BAD_PARAM;

	*outSize = 0;
	i = 0;
	while ((tmp = (GF_Descriptor *)gf_list_enum(odUp->objectDescriptors, &i))) {
		gf_odf_size_descriptor(tmp, &tmpSize);
		*outSize += tmpSize + gf_odf_size_field_size(tmpSize);
	}
	return GF_OK;
}
Beispiel #3
0
//use this function to get the size of a standalone descriptor
GF_EXPORT
u32 gf_odf_desc_size(GF_Descriptor *desc)
{
	u32 descSize;
	GF_Err e;

	if (!desc) return GF_BAD_PARAM;
	//get the descriptor length
	e = gf_odf_size_descriptor(desc, &descSize);
	if (e) return 0;
	//add the header length
	descSize += gf_odf_size_field_size(descSize);
	return descSize;

}
Beispiel #4
0
GF_Err gf_odf_size_descriptor_list(GF_List *descList, u32 *outSize)
{
	GF_Err e;
	GF_Descriptor *tmp;
	u32 tmpSize, count, i;
	if (! descList) return GF_OK;

	count = gf_list_count(descList);
	for ( i = 0; i < count; i++ ) {
		tmp = (GF_Descriptor*)gf_list_get(descList, i);
		if (tmp) {
			e = gf_odf_size_descriptor(tmp, &tmpSize);
			if (e) return e;
			if (tmpSize) *outSize += tmpSize + gf_odf_size_field_size(tmpSize);
		}
	}
	return GF_OK;
}
Beispiel #5
0
GF_Err gf_odf_size_esd_update(GF_ESDUpdate *esdUp, u32 *outSize)
{
	u32 i, BitSize, tmpSize;
	GF_Descriptor *tmp;
	if (!esdUp) return GF_BAD_PARAM;

	*outSize = 0;
	BitSize = 10;
	i = 0;
	while ((tmp = (GF_Descriptor *)gf_list_enum(esdUp->ESDescriptors, &i))) {
		gf_odf_size_descriptor(tmp, &tmpSize);
		BitSize += (tmpSize + gf_odf_size_field_size(tmpSize)) * 8;
	}
	while ((s32)BitSize > 0) {
		BitSize -= 8;
		*outSize += 1;
	}
	return GF_OK;
}
Beispiel #6
0
//
//	Writer
//
GF_Err gf_odf_write_slc(GF_BitStream *bs, GF_SLConfig *sl)
{
	GF_Err e;
	u32 size;
	if (! sl) return GF_BAD_PARAM;

	e = gf_odf_size_descriptor((GF_Descriptor *)sl, &size);
	e = gf_odf_write_base_descriptor(bs, sl->tag, size);

	gf_bs_write_int(bs, sl->predefined, 8);
	if (! sl->predefined) {
		gf_bs_write_int(bs, sl->useAccessUnitStartFlag, 1);
		gf_bs_write_int(bs, sl->useAccessUnitEndFlag, 1);
		gf_bs_write_int(bs, sl->useRandomAccessPointFlag, 1);
		gf_bs_write_int(bs, sl->hasRandomAccessUnitsOnlyFlag, 1);
		gf_bs_write_int(bs, sl->usePaddingFlag, 1);
		gf_bs_write_int(bs, sl->useTimestampsFlag, 1);
		gf_bs_write_int(bs, sl->useIdleFlag, 1);
		gf_bs_write_int(bs, sl->durationFlag, 1);
		gf_bs_write_int(bs, sl->timestampResolution, 32);
		gf_bs_write_int(bs, sl->OCRResolution, 32);
		gf_bs_write_int(bs, sl->timestampLength, 8);
		gf_bs_write_int(bs, sl->OCRLength, 8);
		gf_bs_write_int(bs, sl->AULength, 8);
		gf_bs_write_int(bs, sl->instantBitrateLength, 8);
		gf_bs_write_int(bs, sl->degradationPriorityLength, 4);
		gf_bs_write_int(bs, sl->AUSeqNumLength, 5);
		gf_bs_write_int(bs, sl->packetSeqNumLength, 5);
		gf_bs_write_int(bs, 3, 2);	//reserved: 0b11 == 3
	}
	if (sl->durationFlag) {
		gf_bs_write_int(bs, sl->timeScale, 32);
		gf_bs_write_int(bs, sl->AUDuration, 16);
		gf_bs_write_int(bs, sl->CUDuration, 16);
	}
	if (! sl->useTimestampsFlag) {
		gf_bs_write_long_int(bs, sl->startDTS, sl->timestampLength);
		gf_bs_write_long_int(bs, sl->startCTS, sl->timestampLength);
	}
	
	return GF_OK;
}
Beispiel #7
0
//
//		Writer
//
GF_Err gf_odf_write_qos(GF_BitStream *bs, GF_QoS_Descriptor *qos)
{
	GF_Err e;
	u32 size, i;
	GF_QoS_Default *tmp;
	if (!qos) return GF_BAD_PARAM;

	e = gf_odf_size_descriptor((GF_Descriptor *)qos, &size);
	if (e) return e;
	e = gf_odf_write_base_descriptor(bs, qos->tag, size);
	if (e) return e;

	gf_bs_write_int(bs, qos->predefined, 8);

	if (! qos->predefined) {
		i=0;
		while ((tmp = (GF_QoS_Default *)gf_list_enum(qos->QoS_Qualifiers, &i))) {
			e = gf_odf_write_qos_qual(bs, tmp);
			if (e) return e;
		}
	}
	return GF_OK;
}