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

📄 metadata_object.c

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	tr = &block->data.cue_sheet.tracks[track_num];	FLAC__ASSERT(pos <= tr->num_indices);	tr_resize_(block, track_num, tr->num_indices+1);	memmove(&tr->indices[pos+1], &tr->indices[pos], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(tr->num_indices-1-pos));	tr_set_new_(block, track_num, pos, index);	cs_calc_len_(block);}static void tr_delete_(FLAC__StreamMetadata *block, unsigned track_num, unsigned pos){	FLAC__StreamMetadata_CueSheet_Track *tr;	FLAC__ASSERT(track_num < block->data.cue_sheet.num_tracks);	tr = &block->data.cue_sheet.tracks[track_num];	FLAC__ASSERT(pos <= tr->num_indices);	memmove(&tr->indices[pos], &tr->indices[pos+1], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(tr->num_indices-pos-1));	tr_resize_(block, track_num, tr->num_indices-1);	cs_calc_len_(block);}static void cs_resize_(FLAC__StreamMetadata *block, unsigned num){	FLAC__StreamMetadata_CueSheet *cs = &block->data.cue_sheet;	if(cs->num_tracks != 0) {		FLAC__ASSERT(0 != cs->tracks);		if(num < cs->num_tracks) {			unsigned i;			for(i = num; i < cs->num_tracks; i++) {				if(0 != cs->tracks[i].indices)					free(cs->tracks[i].indices);			}		}	}	if(num == 0) {		if(0 != cs->tracks) {			free(cs->tracks);			cs->tracks = 0;		}	}	else {		cs->tracks = (FLAC__StreamMetadata_CueSheet_Track*)realloc(cs->tracks, sizeof(FLAC__StreamMetadata_CueSheet_Track)*num);		FLAC__ASSERT(0 != cs->tracks);		if(num > cs->num_tracks)			memset(cs->tracks+cs->num_tracks, 0, sizeof(FLAC__StreamMetadata_CueSheet_Track)*(num-cs->num_tracks));	}	cs->num_tracks = num;	cs_calc_len_(block);}static void cs_set_new_(FLAC__StreamMetadata_CueSheet_Track *track, FLAC__StreamMetadata *block, unsigned pos, FLAC__uint64 offset, FLAC__byte number, const char *isrc, FLAC__bool data, FLAC__bool pre_em){	track_new_(track, offset, number, isrc, data, pre_em);	block->data.cue_sheet.tracks[pos] = *track;	cs_calc_len_(block);}static void cs_insert_new_(FLAC__StreamMetadata_CueSheet_Track *track, FLAC__StreamMetadata *block, unsigned pos, FLAC__uint64 offset, FLAC__byte number, const char *isrc, FLAC__bool data, FLAC__bool pre_em){	cs_resize_(block, block->data.cue_sheet.num_tracks+1);	memmove(&block->data.cue_sheet.tracks[pos+1], &block->data.cue_sheet.tracks[pos], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(block->data.cue_sheet.num_tracks-1-pos));	cs_set_new_(track, block, pos, offset, number, isrc, data, pre_em);	cs_calc_len_(block);}static void cs_delete_(FLAC__StreamMetadata *block, unsigned pos){	if(0 != block->data.cue_sheet.tracks[pos].indices)		free(block->data.cue_sheet.tracks[pos].indices);	memmove(&block->data.cue_sheet.tracks[pos], &block->data.cue_sheet.tracks[pos+1], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(block->data.cue_sheet.num_tracks-pos-1));	block->data.cue_sheet.tracks[block->data.cue_sheet.num_tracks-1].indices = 0;	block->data.cue_sheet.tracks[block->data.cue_sheet.num_tracks-1].num_indices = 0;	cs_resize_(block, block->data.cue_sheet.num_tracks-1);	cs_calc_len_(block);}FLAC__bool test_metadata_object(){	FLAC__StreamMetadata *block, *blockcopy, *vorbiscomment, *cuesheet;	FLAC__StreamMetadata_SeekPoint seekpoint_array[8];	FLAC__StreamMetadata_VorbisComment_Entry entry;	FLAC__StreamMetadata_CueSheet_Index index;	FLAC__StreamMetadata_CueSheet_Track track;	unsigned i, expected_length, seekpoints;	int j;	static FLAC__byte dummydata[4] = { 'a', 'b', 'c', 'd' };	printf("\n+++ libFLAC unit test: metadata objects\n\n");	printf("testing STREAMINFO\n");	printf("testing FLAC__metadata_object_new()... ");	block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_STREAMINFO);	if(0 == block) {		printf("FAILED, returned NULL\n");		return false;	}	expected_length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;	if(block->length != expected_length) {		printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);		return false;	}	printf("OK\n");	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	FLAC__metadata_object_delete(block);	printf("OK\n");	printf("testing PADDING\n");	printf("testing FLAC__metadata_object_new()... ");	block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);	if(0 == block) {		printf("FAILED, returned NULL\n");		return false;	}	expected_length = 0;	if(block->length != expected_length) {		printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);		return false;	}	printf("OK\n");	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	FLAC__metadata_object_delete(block);	printf("OK\n");	printf("testing APPLICATION\n");	printf("testing FLAC__metadata_object_new()... ");	block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_APPLICATION);	if(0 == block) {		printf("FAILED, returned NULL\n");		return false;	}	expected_length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8;	if(block->length != expected_length) {		printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);		return false;	}	printf("OK\n");	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	printf("OK\n");	printf("testing FLAC__metadata_object_application_set_data(copy)... ");	if(!FLAC__metadata_object_application_set_data(block, dummydata, sizeof(dummydata), true/*copy*/)) {		printf("FAILED, returned false\n");		return false;	}	expected_length = (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8) + sizeof(dummydata);	if(block->length != expected_length) {		printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);		return false;	}	if(0 != memcmp(block->data.application.data, dummydata, sizeof(dummydata))) {		printf("FAILED, data mismatch\n");		return false;	}	printf("OK\n");	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	printf("OK\n");	printf("testing FLAC__metadata_object_application_set_data(own)... ");	if(!FLAC__metadata_object_application_set_data(block, make_dummydata_(dummydata, sizeof(dummydata)), sizeof(dummydata), false/*own*/)) {		printf("FAILED, returned false\n");		return false;	}	expected_length = (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8) + sizeof(dummydata);	if(block->length != expected_length) {		printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);		return false;	}	if(0 != memcmp(block->data.application.data, dummydata, sizeof(dummydata))) {		printf("FAILED, data mismatch\n");		return false;	}	printf("OK\n");	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	FLAC__metadata_object_delete(block);	printf("OK\n");	printf("testing SEEKTABLE\n");	for(i = 0; i < sizeof(seekpoint_array) / sizeof(FLAC__StreamMetadata_SeekPoint); i++) {		seekpoint_array[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;		seekpoint_array[i].stream_offset = 0;		seekpoint_array[i].frame_samples = 0;	}	seekpoints = 0;	printf("testing FLAC__metadata_object_new()... ");	block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE);	if(0 == block) {		printf("FAILED, returned NULL\n");		return false;	}	if(!check_seektable_(block, seekpoints, 0))		return false;	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	printf("OK\n");	seekpoints = 2;	printf("testing FLAC__metadata_object_seektable_resize_points(grow to %u)...", seekpoints);	if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	seekpoints = 1;	printf("testing FLAC__metadata_object_seektable_resize_points(shrink to %u)...", seekpoints);	if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	printf("testing FLAC__metadata_object_seektable_is_legal()...");	if(!FLAC__metadata_object_seektable_is_legal(block)) {		printf("FAILED, returned false\n");		return false;	}	printf("OK\n");	seekpoints = 0;	printf("testing FLAC__metadata_object_seektable_resize_points(shrink to %u)...", seekpoints);	if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, 0))		return false;	seekpoints++;	printf("testing FLAC__metadata_object_seektable_insert_point() on empty array...");	if(!FLAC__metadata_object_seektable_insert_point(block, 0, seekpoint_array[0])) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	seekpoint_array[0].sample_number = 1;	seekpoints++;	printf("testing FLAC__metadata_object_seektable_insert_point() on beginning of non-empty array...");	if(!FLAC__metadata_object_seektable_insert_point(block, 0, seekpoint_array[0])) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	seekpoint_array[1].sample_number = 2;	seekpoints++;	printf("testing FLAC__metadata_object_seektable_insert_point() on middle of non-empty array...");	if(!FLAC__metadata_object_seektable_insert_point(block, 1, seekpoint_array[1])) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	seekpoint_array[3].sample_number = 3;	seekpoints++;	printf("testing FLAC__metadata_object_seektable_insert_point() on end of non-empty array...");	if(!FLAC__metadata_object_seektable_insert_point(block, 3, seekpoint_array[3])) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;	printf("testing FLAC__metadata_object_clone()... ");	blockcopy = FLAC__metadata_object_clone(block);	if(0 == blockcopy) {		printf("FAILED, returned NULL\n");		return false;	}	if(!mutils__compare_block(block, blockcopy))		return false;	printf("OK\n");	printf("testing FLAC__metadata_object_delete()... ");	FLAC__metadata_object_delete(blockcopy);	printf("OK\n");	seekpoint_array[2].sample_number = seekpoint_array[3].sample_number;	seekpoints--;	printf("testing FLAC__metadata_object_seektable_delete_point() on middle of array...");	if(!FLAC__metadata_object_seektable_delete_point(block, 2)) {		printf("FAILED, returned false\n");		return false;	}	if(!check_seektable_(block, seekpoints, seekpoint_array))		return false;

⌨️ 快捷键说明

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