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

📄 metadata_object.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 4 页
字号:
		free(vc->comments[comment_num].entry);	/* move all comments > comment_num backward one space */	memmove(&vc->comments[comment_num], &vc->comments[comment_num+1], sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*(vc->num_comments-comment_num-1));	vc->comments[vc->num_comments-1].length = 0;	vc->comments[vc->num_comments-1].entry = 0;	return FLAC__metadata_object_vorbiscomment_resize_comments(object, vc->num_comments-1);}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field_name, const char *field_value){	FLAC__ASSERT(0 != entry);	FLAC__ASSERT(0 != field_name);	FLAC__ASSERT(0 != field_value);	if(!FLAC__format_vorbiscomment_entry_name_is_legal(field_name))		return false;	if(!FLAC__format_vorbiscomment_entry_value_is_legal(field_value, (unsigned)(-1)))		return false;	{		const size_t nn = strlen(field_name);		const size_t nv = strlen(field_value);		entry->length = nn + 1 /*=*/ + nv;		if(0 == (entry->entry = (FLAC__byte*)malloc(entry->length+1)))			return false;		memcpy(entry->entry, field_name, nn);		entry->entry[nn] = '=';		memcpy(entry->entry+nn+1, field_value, nv);		entry->entry[entry->length] = '\0';	}		return true;}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(const FLAC__StreamMetadata_VorbisComment_Entry entry, char **field_name, char **field_value){	FLAC__ASSERT(0 != entry.entry && entry.length > 0);	FLAC__ASSERT(0 != field_name);	FLAC__ASSERT(0 != field_value);	if(!FLAC__format_vorbiscomment_entry_is_legal(entry.entry, entry.length))		return false;	{		const FLAC__byte *eq = (FLAC__byte*)memchr(entry.entry, '=', entry.length);		const size_t nn = eq-entry.entry;		const size_t nv = entry.length-nn-1; /* -1 for the '=' */		FLAC__ASSERT(0 != eq);		if(0 == eq)			return false; /* double protection */		if(0 == (*field_name = (char*)malloc(nn+1)))			return false;		if(0 == (*field_value = (char*)malloc(nv+1))) {			free(*field_name);			return false;		}		memcpy(*field_name, entry.entry, nn);		memcpy(*field_value, entry.entry+nn+1, nv);		(*field_name)[nn] = '\0';		(*field_value)[nv] = '\0';	}	return true;}FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_matches(const FLAC__StreamMetadata_VorbisComment_Entry entry, const char *field_name, unsigned field_name_length){	FLAC__ASSERT(0 != entry.entry && entry.length > 0);	{		const FLAC__byte *eq = (FLAC__byte*)memchr(entry.entry, '=', entry.length);#if defined _MSC_VER || defined __MINGW32__#define FLAC__STRNCASECMP _strnicmp#elif defined __palmos__#define FLAC__STRNCASECMP tcsnicmp#else#define FLAC__STRNCASECMP strncasecmp#endif		return (0 != eq && (unsigned)(eq-entry.entry) == field_name_length && 0 == FLAC__STRNCASECMP(field_name, (const char *)entry.entry, field_name_length));#undef FLAC__STRNCASECMP	}}FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name){	FLAC__ASSERT(0 != field_name);	return vorbiscomment_find_entry_from_(object, offset, field_name, strlen(field_name));}FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name){	const unsigned field_name_length = strlen(field_name);	unsigned i;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	for(i = 0; i < object->data.vorbis_comment.num_comments; i++) {		if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments[i], field_name, field_name_length)) {			if(!FLAC__metadata_object_vorbiscomment_delete_comment(object, i))				return -1;			else				return 1;		}	}	return 0;}FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name){	FLAC__bool ok = true;	unsigned matching = 0;	const unsigned field_name_length = strlen(field_name);	int i;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);	/* must delete from end to start otherwise it will interfere with our iteration */	for(i = (int)object->data.vorbis_comment.num_comments - 1; ok && i >= 0; i--) {		if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments[i], field_name, field_name_length)) {			matching++;			ok &= FLAC__metadata_object_vorbiscomment_delete_comment(object, (unsigned)i);		}	}	return ok? (int)matching : -1;}FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_new(){	return (FLAC__StreamMetadata_CueSheet_Track*)calloc(1, sizeof(FLAC__StreamMetadata_CueSheet_Track));}FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object){	FLAC__StreamMetadata_CueSheet_Track *to;	FLAC__ASSERT(0 != object);	if(0 != (to = FLAC__metadata_object_cuesheet_track_new())) {		if(!copy_track_(to, object)) {			FLAC__metadata_object_cuesheet_track_delete(to);			return 0;		}	}	return to;}void FLAC__metadata_object_cuesheet_track_delete_data(FLAC__StreamMetadata_CueSheet_Track *object){	FLAC__ASSERT(0 != object);	if(0 != object->indices) {		FLAC__ASSERT(object->num_indices > 0);		free(object->indices);	}}FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object){	FLAC__metadata_object_cuesheet_track_delete_data(object);	free(object);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, unsigned track_num, unsigned new_num_indices){	FLAC__StreamMetadata_CueSheet_Track *track;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);	track = &object->data.cue_sheet.tracks[track_num];	if(0 == track->indices) {		FLAC__ASSERT(track->num_indices == 0);		if(0 == new_num_indices)			return true;		else if(0 == (track->indices = cuesheet_track_index_array_new_(new_num_indices)))			return false;	}	else {		const unsigned old_size = track->num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index);		const unsigned new_size = new_num_indices * sizeof(FLAC__StreamMetadata_CueSheet_Index);		FLAC__ASSERT(track->num_indices > 0);		if(new_size == 0) {			free(track->indices);			track->indices = 0;		}		else if(0 == (track->indices = (FLAC__StreamMetadata_CueSheet_Index*)realloc(track->indices, new_size)))			return false;		/* if growing, zero all the lengths/pointers of new elements */		if(new_size > old_size)			memset(track->indices + track->num_indices, 0, new_size - old_size);	}	track->num_indices = new_num_indices;	cuesheet_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num, FLAC__StreamMetadata_CueSheet_Index index){	FLAC__StreamMetadata_CueSheet_Track *track;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);	FLAC__ASSERT(index_num <= object->data.cue_sheet.tracks[track_num].num_indices);	track = &object->data.cue_sheet.tracks[track_num];	if(!FLAC__metadata_object_cuesheet_track_resize_indices(object, track_num, track->num_indices+1))		return false;	/* move all indices >= index_num forward one space */	memmove(&track->indices[index_num+1], &track->indices[index_num], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(track->num_indices-1-index_num));	track->indices[index_num] = index;	cuesheet_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num){	FLAC__StreamMetadata_CueSheet_Index index;	memset(&index, 0, sizeof(index));	return FLAC__metadata_object_cuesheet_track_insert_index(object, track_num, index_num, index);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num){	FLAC__StreamMetadata_CueSheet_Track *track;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);	FLAC__ASSERT(index_num < object->data.cue_sheet.tracks[track_num].num_indices);	track = &object->data.cue_sheet.tracks[track_num];	/* move all indices > index_num backward one space */	memmove(&track->indices[index_num], &track->indices[index_num+1], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(track->num_indices-index_num-1));	FLAC__metadata_object_cuesheet_track_resize_indices(object, track_num, track->num_indices-1);	cuesheet_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, unsigned new_num_tracks){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	if(0 == object->data.cue_sheet.tracks) {		FLAC__ASSERT(object->data.cue_sheet.num_tracks == 0);		if(0 == new_num_tracks)			return true;		else if(0 == (object->data.cue_sheet.tracks = cuesheet_track_array_new_(new_num_tracks)))			return false;	}	else {		const unsigned old_size = object->data.cue_sheet.num_tracks * sizeof(FLAC__StreamMetadata_CueSheet_Track);		const unsigned new_size = new_num_tracks * sizeof(FLAC__StreamMetadata_CueSheet_Track);		FLAC__ASSERT(object->data.cue_sheet.num_tracks > 0);		/* if shrinking, free the truncated entries */		if(new_num_tracks < object->data.cue_sheet.num_tracks) {			unsigned i;			for(i = new_num_tracks; i < object->data.cue_sheet.num_tracks; i++)				if(0 != object->data.cue_sheet.tracks[i].indices)					free(object->data.cue_sheet.tracks[i].indices);		}		if(new_size == 0) {			free(object->data.cue_sheet.tracks);			object->data.cue_sheet.tracks = 0;		}		else if(0 == (object->data.cue_sheet.tracks = (FLAC__StreamMetadata_CueSheet_Track*)realloc(object->data.cue_sheet.tracks, new_size)))			return false;		/* if growing, zero all the lengths/pointers of new elements */		if(new_size > old_size)			memset(object->data.cue_sheet.tracks + object->data.cue_sheet.num_tracks, 0, new_size - old_size);	}	object->data.cue_sheet.num_tracks = new_num_tracks;	cuesheet_calculate_length_(object);	return true;}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);	return cuesheet_set_track_(object, object->data.cue_sheet.tracks + track_num, track, copy);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy){	FLAC__StreamMetadata_CueSheet *cs;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	FLAC__ASSERT(track_num <= object->data.cue_sheet.num_tracks);	cs = &object->data.cue_sheet;	if(!FLAC__metadata_object_cuesheet_resize_tracks(object, cs->num_tracks+1))		return false;	/* move all tracks >= track_num forward one space */	memmove(&cs->tracks[track_num+1], &cs->tracks[track_num], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(cs->num_tracks-1-track_num));	cs->tracks[track_num].num_indices = 0;	cs->tracks[track_num].indices = 0;	return FLAC__metadata_object_cuesheet_set_track(object, track_num, track, copy);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, unsigned track_num){	FLAC__StreamMetadata_CueSheet_Track track;	memset(&track, 0, sizeof(track));	return FLAC__metadata_object_cuesheet_insert_track(object, track_num, &track, /*copy=*/false);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, unsigned track_num){	FLAC__StreamMetadata_CueSheet *cs;	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	FLAC__ASSERT(track_num < object->data.cue_sheet.num_tracks);	cs = &object->data.cue_sheet;	/* free the track at track_num */	if(0 != cs->tracks[track_num].indices)		free(cs->tracks[track_num].indices);	/* move all tracks > track_num backward one space */	memmove(&cs->tracks[track_num], &cs->tracks[track_num+1], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(cs->num_tracks-track_num-1));	cs->tracks[cs->num_tracks-1].num_indices = 0;	cs->tracks[cs->num_tracks-1].indices = 0;	return FLAC__metadata_object_cuesheet_resize_tracks(object, cs->num_tracks-1);}FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation){	FLAC__ASSERT(0 != object);	FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_CUESHEET);	return FLAC__format_cuesheet_is_legal(&object->data.cue_sheet, check_cd_da_subset, violation);}

⌨️ 快捷键说明

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