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

📄 format.c

📁 在x86平台上运行不可信任代码的sandbox。
💻 C
📖 第 1 页 / 共 2 页
字号:
			if(!first) {				if(seek_table->points[i].sample_number == seek_table->points[j-1].sample_number)					continue;			}		}		first = false;		seek_table->points[j++] = seek_table->points[i];	}	for(i = j; i < seek_table->num_points; i++) {		seek_table->points[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;		seek_table->points[i].stream_offset = 0;		seek_table->points[i].frame_samples = 0;	}	return j;}static __inline unsigned utf8len_(const FLAC__byte *utf8){	FLAC__ASSERT(0 != utf8);	if ((utf8[0] & 0x80) == 0)		return 1;	else if ((utf8[0] & 0xE0) == 0xC0 && (utf8[1] & 0xC0) == 0x80)		return 2;	else if ((utf8[0] & 0xF0) == 0xE0 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80)		return 3;	else		return 0;}FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name){	char c;	for(c = *name; c; c = *(++name))		if(c < 0x20 || c == 0x3d || c > 0x7d)			return false;	return true;}FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length){	if(length == (unsigned)(-1)) {		while(*value) {			unsigned n = utf8len_(value);			if(n == 0)				return false;			value += n;		}	}	else {		const FLAC__byte *end = value + length;		while(value < end) {			unsigned n = utf8len_(value);			if(n == 0)				return false;			value += n;		}		if(value != end)			return false;	}	return true;}FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length){	const FLAC__byte *s, *end;	for(s = entry, end = s + length; s < end && *s != '='; s++) {		if(*s < 0x20 || *s > 0x7D)			return false;	}	if(s == end)		return false;	s++; /* skip '=' */	while(s < end) {		unsigned n = utf8len_(s);		if(n == 0)			return false;		s += n;	}	if(s != end)		return false;	return true;}FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation){	unsigned i, j;	if(check_cd_da_subset) {		if(cue_sheet->lead_in < 2 * 44100) {			if(violation) *violation = "CD-DA cue sheet must have a lead-in length of at least 2 seconds";			return false;		}		if(cue_sheet->lead_in % 588 != 0) {			if(violation) *violation = "CD-DA cue sheet lead-in length must be evenly divisible by 588 samples";			return false;		}	}	if(cue_sheet->num_tracks == 0) {		if(violation) *violation = "cue sheet must have at least one track (the lead-out)";		return false;	}	if(check_cd_da_subset && cue_sheet->tracks[cue_sheet->num_tracks-1].number != 170) {		if(violation) *violation = "CD-DA cue sheet must have a lead-out track number 170 (0xAA)";		return false;	}	for(i = 0; i < cue_sheet->num_tracks; i++) {		if(cue_sheet->tracks[i].number == 0) {			if(violation) *violation = "cue sheet may not have a track number 0";			return false;		}		if(check_cd_da_subset) {			if(!((cue_sheet->tracks[i].number >= 1 && cue_sheet->tracks[i].number <= 99) || cue_sheet->tracks[i].number == 170)) {				if(violation) *violation = "CD-DA cue sheet track number must be 1-99 or 170";				return false;			}		}		if(check_cd_da_subset && cue_sheet->tracks[i].offset % 588 != 0) {			if(violation) *violation = "CD-DA cue sheet track offset must be evenly divisible by 588 samples";			return false;		}		if(i < cue_sheet->num_tracks - 1) {			if(cue_sheet->tracks[i].num_indices == 0) {				if(violation) *violation = "cue sheet track must have at least one index point";				return false;			}			if(cue_sheet->tracks[i].indices[0].number > 1) {				if(violation) *violation = "cue sheet track's first index number must be 0 or 1";				return false;			}		}		for(j = 0; j < cue_sheet->tracks[i].num_indices; j++) {			if(check_cd_da_subset && cue_sheet->tracks[i].indices[j].offset % 588 != 0) {				if(violation) *violation = "CD-DA cue sheet track index offset must be evenly divisible by 588 samples";				return false;			}			if(j > 0) {				if(cue_sheet->tracks[i].indices[j].number != cue_sheet->tracks[i].indices[j-1].number + 1) {					if(violation) *violation = "cue sheet track index numbers must increase by 1";					return false;				}			}		}	}	return true;}/* * These routines are private to libFLAC */unsigned FLAC__format_get_max_rice_partition_order(unsigned blocksize, unsigned predictor_order){	return		FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(			FLAC__format_get_max_rice_partition_order_from_blocksize(blocksize),			blocksize,			predictor_order		);}unsigned FLAC__format_get_max_rice_partition_order_from_blocksize(unsigned blocksize){	unsigned max_rice_partition_order = 0;	while(!(blocksize & 1)) {		max_rice_partition_order++;		blocksize >>= 1;	}	return min(FLAC__MAX_RICE_PARTITION_ORDER, max_rice_partition_order);}unsigned FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(unsigned limit, unsigned blocksize, unsigned predictor_order){	unsigned max_rice_partition_order = limit;	while(max_rice_partition_order > 0 && (blocksize >> max_rice_partition_order) <= predictor_order)		max_rice_partition_order--;	FLAC__ASSERT(		(max_rice_partition_order == 0 && blocksize >= predictor_order) ||		(max_rice_partition_order > 0 && blocksize >> max_rice_partition_order > predictor_order)	);	return max_rice_partition_order;}void FLAC__format_entropy_coding_method_partitioned_rice_contents_init(FLAC__EntropyCodingMethod_PartitionedRiceContents *object){	FLAC__ASSERT(0 != object);	object->parameters = 0;	object->raw_bits = 0;	object->capacity_by_order = 0;}void FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(FLAC__EntropyCodingMethod_PartitionedRiceContents *object){	FLAC__ASSERT(0 != object);	if(0 != object->parameters)		free(object->parameters);	if(0 != object->raw_bits)		free(object->raw_bits);	FLAC__format_entropy_coding_method_partitioned_rice_contents_init(object);}FLAC__bool FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(FLAC__EntropyCodingMethod_PartitionedRiceContents *object, unsigned max_partition_order){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->capacity_by_order > 0 || (0 == object->parameters && 0 == object->raw_bits));	if(object->capacity_by_order < max_partition_order) {		if(0 == (object->parameters = (unsigned*)realloc(object->parameters, sizeof(unsigned)*(1 << max_partition_order))))			return false;		if(0 == (object->raw_bits = (unsigned*)realloc(object->raw_bits, sizeof(unsigned)*(1 << max_partition_order))))			return false;		object->capacity_by_order = max_partition_order;	}	return true;}

⌨️ 快捷键说明

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