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

📄 metadata_object.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 4 页
字号:
			return compare_block_data_application_(&block1->data.application, &block2->data.application, block1->length);		case FLAC__METADATA_TYPE_SEEKTABLE:			return compare_block_data_seektable_(&block1->data.seek_table, &block2->data.seek_table);		case FLAC__METADATA_TYPE_VORBIS_COMMENT:			return compare_block_data_vorbiscomment_(&block1->data.vorbis_comment, &block2->data.vorbis_comment);		case FLAC__METADATA_TYPE_CUESHEET:			return compare_block_data_cuesheet_(&block1->data.cue_sheet, &block2->data.cue_sheet);		default:			return compare_block_data_unknown_(&block1->data.unknown, &block2->data.unknown, block1->length);	}}FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, unsigned length, FLAC__bool copy){	FLAC__byte *save;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_APPLICATION);	FLAC__ASSERT((0 != data && length > 0) || (0 == data && length == 0 && copy == false));	save = object->data.application.data;	/* do the copy first so that if we fail we leave the object untouched */	if(copy) {		if(!copy_bytes_(&object->data.application.data, data, length))			return false;	}	else {		object->data.application.data = data;	}	if(0 != save)		free(save);	object->length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8 + length;	return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, unsigned new_num_points){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	if(0 == object->data.seek_table.points) {		FLAC__ASSERT(object->data.seek_table.num_points == 0);		if(0 == new_num_points)			return true;		else if(0 == (object->data.seek_table.points = seekpoint_array_new_(new_num_points)))			return false;	}	else {		const unsigned old_size = object->data.seek_table.num_points * sizeof(FLAC__StreamMetadata_SeekPoint);		const unsigned new_size = new_num_points * sizeof(FLAC__StreamMetadata_SeekPoint);		FLAC__ASSERT(object->data.seek_table.num_points > 0);		if(new_size == 0) {			free(object->data.seek_table.points);			object->data.seek_table.points = 0;		}		else if(0 == (object->data.seek_table.points = (FLAC__StreamMetadata_SeekPoint*)realloc(object->data.seek_table.points, new_size)))			return false;		/* if growing, set new elements to placeholders */		if(new_size > old_size) {			unsigned i;			for(i = object->data.seek_table.num_points; i < new_num_points; i++) {				object->data.seek_table.points[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;				object->data.seek_table.points[i].stream_offset = 0;				object->data.seek_table.points[i].frame_samples = 0;			}		}	}	object->data.seek_table.num_points = new_num_points;	seektable_calculate_length_(object);	return true;}FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	FLAC__ASSERT(point_num < object->data.seek_table.num_points);	object->data.seek_table.points[point_num] = point;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point){	int i;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	FLAC__ASSERT(point_num <= object->data.seek_table.num_points);	if(!FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points+1))		return false;	/* move all points >= point_num forward one space */	for(i = (int)object->data.seek_table.num_points-1; i > (int)point_num; i--)		object->data.seek_table.points[i] = object->data.seek_table.points[i-1];	FLAC__metadata_object_seektable_set_point(object, point_num, point);	seektable_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, unsigned point_num){	unsigned i;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	FLAC__ASSERT(point_num < object->data.seek_table.num_points);	/* move all points > point_num backward one space */	for(i = point_num; i < object->data.seek_table.num_points-1; i++)		object->data.seek_table.points[i] = object->data.seek_table.points[i+1];	return FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points-1);}FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	return FLAC__format_seektable_is_legal(&object->data.seek_table);}FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, unsigned num){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	if(num > 0)		/* WATCHOUT: we rely on the fact that growing the array adds PLACEHOLDERS at the end */		return FLAC__metadata_object_seektable_resize_points(object, object->data.seek_table.num_points + num);	else		return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number){	FLAC__StreamMetadata_SeekTable *seek_table;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	seek_table = &object->data.seek_table;	if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + 1))		return false;	seek_table->points[seek_table->num_points - 1].sample_number = sample_number;	seek_table->points[seek_table->num_points - 1].stream_offset = 0;	seek_table->points[seek_table->num_points - 1].frame_samples = 0;	return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], unsigned num){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	FLAC__ASSERT(0 != sample_numbers || num == 0);	if(num > 0) {		FLAC__StreamMetadata_SeekTable *seek_table = &object->data.seek_table;		unsigned i, j;		i = seek_table->num_points;		if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + num))			return false;		for(j = 0; j < num; i++, j++) {			seek_table->points[i].sample_number = sample_numbers[j];			seek_table->points[i].stream_offset = 0;			seek_table->points[i].frame_samples = 0;		}	}	return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, unsigned num, FLAC__uint64 total_samples){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	FLAC__ASSERT(total_samples > 0);	if(num > 0) {		FLAC__StreamMetadata_SeekTable *seek_table = &object->data.seek_table;		unsigned i, j;		i = seek_table->num_points;		if(!FLAC__metadata_object_seektable_resize_points(object, seek_table->num_points + num))			return false;		for(j = 0; j < num; i++, j++) {			seek_table->points[i].sample_number = total_samples * (FLAC__uint64)j / (FLAC__uint64)num;			seek_table->points[i].stream_offset = 0;			seek_table->points[i].frame_samples = 0;		}	}	return true;}FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact){	unsigned unique;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_SEEKTABLE);	unique = FLAC__format_seektable_sort(&object->data.seek_table);	return !compact || FLAC__metadata_object_seektable_resize_points(object, unique);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy){	if(!FLAC__format_vorbiscomment_entry_value_is_legal(entry.entry, entry.length))		return false;	return vorbiscomment_set_entry_(object, &object->data.vorbis_comment.vendor_string, &entry, copy);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, unsigned new_num_comments){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	if(0 == object->data.vorbis_comment.comments) {		FLAC__ASSERT(object->data.vorbis_comment.num_comments == 0);		if(0 == new_num_comments)			return true;		else if(0 == (object->data.vorbis_comment.comments = vorbiscomment_entry_array_new_(new_num_comments)))			return false;	}	else {		const unsigned old_size = object->data.vorbis_comment.num_comments * sizeof(FLAC__StreamMetadata_VorbisComment_Entry);		const unsigned new_size = new_num_comments * sizeof(FLAC__StreamMetadata_VorbisComment_Entry);		FLAC__ASSERT(object->data.vorbis_comment.num_comments > 0);		/* if shrinking, free the truncated entries */		if(new_num_comments < object->data.vorbis_comment.num_comments) {			unsigned i;			for(i = new_num_comments; i < object->data.vorbis_comment.num_comments; i++)				if(0 != object->data.vorbis_comment.comments[i].entry)					free(object->data.vorbis_comment.comments[i].entry);		}		if(new_size == 0) {			free(object->data.vorbis_comment.comments);			object->data.vorbis_comment.comments = 0;		}		else if(0 == (object->data.vorbis_comment.comments = (FLAC__StreamMetadata_VorbisComment_Entry*)realloc(object->data.vorbis_comment.comments, new_size)))			return false;		/* if growing, zero all the length/pointers of new elements */		if(new_size > old_size)			memset(object->data.vorbis_comment.comments + object->data.vorbis_comment.num_comments, 0, new_size - old_size);	}	object->data.vorbis_comment.num_comments = new_num_comments;	vorbiscomment_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(comment_num < object->data.vorbis_comment.num_comments);	if(!FLAC__format_vorbiscomment_entry_is_legal(entry.entry, entry.length))		return false;	return vorbiscomment_set_entry_(object, &object->data.vorbis_comment.comments[comment_num], &entry, copy);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy){	FLAC__StreamMetadata_VorbisComment *vc;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	FLAC__ASSERT(comment_num <= object->data.vorbis_comment.num_comments);	if(!FLAC__format_vorbiscomment_entry_is_legal(entry.entry, entry.length))		return false;	vc = &object->data.vorbis_comment;	if(!FLAC__metadata_object_vorbiscomment_resize_comments(object, vc->num_comments+1))		return false;	/* move all comments >= comment_num forward one space */	memmove(&vc->comments[comment_num+1], &vc->comments[comment_num], sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*(vc->num_comments-1-comment_num));	vc->comments[comment_num].length = 0;	vc->comments[comment_num].entry = 0;	return FLAC__metadata_object_vorbiscomment_set_comment(object, comment_num, entry, copy);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	return FLAC__metadata_object_vorbiscomment_insert_comment(object, object->data.vorbis_comment.num_comments, entry, copy);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy){	FLAC__ASSERT(0 != entry.entry && entry.length > 0);	if(!FLAC__format_vorbiscomment_entry_is_legal(entry.entry, entry.length))		return false;	{		int i;		unsigned field_name_length;		const FLAC__byte *eq = (FLAC__byte*)memchr(entry.entry, '=', entry.length);		FLAC__ASSERT(0 != eq);		if(0 == eq)			return false; /* double protection */		field_name_length = eq-entry.entry;		if((i = vorbiscomment_find_entry_from_(object, 0, entry.entry, field_name_length)) >= 0) {			unsigned index = (unsigned)i;			if(!FLAC__metadata_object_vorbiscomment_set_comment(object, index, entry, copy))				return false;			if(all && (index+1 < object->data.vorbis_comment.num_comments)) {				for(i = vorbiscomment_find_entry_from_(object, index+1, entry.entry, field_name_length); i >= 0; ) {					if(!FLAC__metadata_object_vorbiscomment_delete_comment(object, (unsigned)i))						return false;					if((unsigned)i < object->data.vorbis_comment.num_comments)						i = vorbiscomment_find_entry_from_(object, (unsigned)i, entry.entry, field_name_length);					else						i = -1;				}			}			return true;		}		else			return FLAC__metadata_object_vorbiscomment_append_comment(object, entry, copy);	}}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, unsigned comment_num){	FLAC__StreamMetadata_VorbisComment *vc;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	FLAC__ASSERT(comment_num < object->data.vorbis_comment.num_comments);	vc = &object->data.vorbis_comment;	/* free the comment at comment_num */	if(0 != vc->comments[comment_num].entry)

⌨️ 快捷键说明

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