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

📄 metadata_manip.cpp

📁 这是著名的TCPMP播放器在WINDWOWS,和WINCE下编译通过的源程序.笔者对其中的LIBMAD库做了针对ARM MPU的优化. 并增加了词幕功能.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		printf("PASSED.  iterator.set_block() returned false like it should\n");
	else
		return die_("iterator.set_block() returned true but shouldn't have");
	delete streaminfo;
	}

	/************************************************************/
	{
	printf("simple iterator on writable file\n");

	if(!change_stats_(flacfile_, /*read-only=*/false))
		return false;

	printf("creating APPLICATION block\n");

	if(0 == (app = new FLAC::Metadata::Application()))
		return die_("new FLAC::Metadata::Application()");
	app->set_id((const unsigned char *)"duh");

	printf("creating PADDING block\n");

	if(0 == (padding = new FLAC::Metadata::Padding()))
		return die_("new FLAC::Metadata::Padding()");
	padding->set_length(20);

	FLAC::Metadata::SimpleIterator iterator;

	if(!iterator.is_valid())
		return die_("iterator.is_valid() returned false");

	if(!iterator.init(flacfile_, /*read_only=*/false, /*preserve_file_stats=*/false))
		return die_("iterator.init() returned false");
	our_current_position = 0;

	printf("is writable = %u\n", (unsigned)iterator.is_writable());

	printf("[S]VP\ttry to write over STREAMINFO block...\n");
	if(!iterator.set_block(app, false))
		printf("\titerator.set_block() returned false like it should\n");
	else
		return die_("iterator.set_block() returned true but shouldn't have");

	printf("[S]VP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("S[V]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SV[P]\tinsert PADDING after, don't expand into padding\n");
	padding->set_length(25);
	if(!iterator.insert_block_after(padding, false))
		return die_ss_("iterator.insert_block_after(padding, false)", iterator);
	if(!insert_to_our_metadata_(padding, ++our_current_position, /*copy=*/true))
		return false;

	printf("SVP[P]\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("SV[P]P\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("S[V]PP\tinsert PADDING after, don't expand into padding\n");
	padding->set_length(30);
	if(!iterator.insert_block_after(padding, false))
		return die_ss_("iterator.insert_block_after(padding, false)", iterator);
	if(!insert_to_our_metadata_(padding, ++our_current_position, /*copy=*/true))
		return false;

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[P]PP\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("S[V]PPP\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("[S]VPPP\tdelete (STREAMINFO block), must fail\n");
	if(iterator.delete_block(false))
		return die_ss_("iterator.delete_block(false) should have returned false", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("[S]VPPP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("S[V]PPP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SV[P]PP\tdelete (middle block), replace with padding\n");
	if(!iterator.delete_block(true))
		return die_ss_("iterator.delete_block(true)", iterator);
	our_current_position--;

	printf("S[V]PPP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SV[P]PP\tdelete (middle block), don't replace with padding\n");
	if(!iterator.delete_block(false))
		return die_ss_("iterator.delete_block(false)", iterator);
	delete_from_our_metadata_(our_current_position--);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("S[V]PP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SV[P]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVP[P]\tdelete (last block), replace with padding\n");
	if(!iterator.delete_block(true))
		return die_ss_("iterator.delete_block(false)", iterator);
	our_current_position--;

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[P]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVP[P]\tdelete (last block), don't replace with padding\n");
	if(!iterator.delete_block(false))
		return die_ss_("iterator.delete_block(false)", iterator);
	delete_from_our_metadata_(our_current_position--);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[P]\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("S[V]P\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("[S]VP\tset STREAMINFO (change sample rate)\n");
	FLAC__ASSERT(our_current_position == 0);
	block = iterator.get_block();
	streaminfo = dynamic_cast<FLAC::Metadata::StreamInfo *>(block);
	FLAC__ASSERT(0 != streaminfo);
	streaminfo->set_sample_rate(32000);
	if(!replace_in_our_metadata_(block, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(block, false))
		return die_ss_("iterator.set_block(block, false)", iterator);
	delete block;

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("[S]VP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("S[V]P\tinsert APPLICATION after, expand into padding of exceeding size\n");
	app->set_id((const unsigned char *)"euh"); /* twiddle the id so that our comparison doesn't miss transposition */
	if(!iterator.insert_block_after(app, true))
		return die_ss_("iterator.insert_block_after(app, true)", iterator);
	if(!insert_to_our_metadata_(app, ++our_current_position, /*copy=*/true))
		return false;
	add_to_padding_length_(our_current_position+1, -((int)(FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) + (int)app->get_length()));

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[A]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVA[P]\tset APPLICATION, expand into padding of exceeding size\n");
	app->set_id((const unsigned char *)"fuh"); /* twiddle the id */
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);
	if(!insert_to_our_metadata_(app, our_current_position, /*copy=*/true))
		return false;
	add_to_padding_length_(our_current_position+1, -((int)(FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) + (int)app->get_length()));

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]P\tset APPLICATION (grow), don't expand into padding\n");
	app->set_id((const unsigned char *)"guh"); /* twiddle the id */
	if(!app->set_data(data, sizeof(data), true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(app, false))
		return die_ss_("iterator.set_block(app, false)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]P\tset APPLICATION (shrink), don't fill in with padding\n");
	app->set_id((const unsigned char *)"huh"); /* twiddle the id */
	if(!app->set_data(data, 12, true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(app, false))
		return die_ss_("iterator.set_block(app, false)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]P\tset APPLICATION (grow), expand into padding of exceeding size\n");
	app->set_id((const unsigned char *)"iuh"); /* twiddle the id */
	if(!app->set_data(data, sizeof(data), true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	add_to_padding_length_(our_current_position+1, -((int)sizeof(data) - 12));
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]P\tset APPLICATION (shrink), fill in with padding\n");
	app->set_id((const unsigned char *)"juh"); /* twiddle the id */
	if(!app->set_data(data, 23, true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!insert_to_our_metadata_(padding, our_current_position+1, /*copy=*/true))
		return die_("copying object");
	dynamic_cast<FLAC::Metadata::Padding *>(our_metadata_.blocks[our_current_position+1])->set_length(sizeof(data) - 23 - FLAC__STREAM_METADATA_HEADER_LENGTH);
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]PP\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVAA[P]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVAAP[P]\tset PADDING (shrink), don't fill in with padding\n");
	padding->set_length(5);
	if(!replace_in_our_metadata_(padding, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(padding, false))
		return die_ss_("iterator.set_block(padding, false)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVAAP[P]\tset APPLICATION (grow)\n");
	app->set_id((const unsigned char *)"kuh"); /* twiddle the id */
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(app, false))
		return die_ss_("iterator.set_block(app, false)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVAAP[A]\tset PADDING (equal)\n");
	padding->set_length(27);
	if(!replace_in_our_metadata_(padding, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(padding, false))
		return die_ss_("iterator.set_block(padding, false)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVAAP[P]\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("SVAA[P]P\tdelete (middle block), don't replace with padding\n");
	if(!iterator.delete_block(false))
		return die_ss_("iterator.delete_block(false)", iterator);
	delete_from_our_metadata_(our_current_position--);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVA[A]P\tdelete (middle block), don't replace with padding\n");
	if(!iterator.delete_block(false))
		return die_ss_("iterator.delete_block(false)", iterator);
	delete_from_our_metadata_(our_current_position--);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[A]P\tnext\n");
	if(!iterator.next())
		return die_("iterator ended early\n");
	our_current_position++;

	printf("SVA[P]\tinsert PADDING after\n");
	padding->set_length(5);
	if(!iterator.insert_block_after(padding, false))
		return die_ss_("iterator.insert_block_after(padding, false)", iterator);
	if(!insert_to_our_metadata_(padding, ++our_current_position, /*copy=*/true))
		return false;

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SVAP[P]\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("SVA[P]P\tprev\n");
	if(!iterator.prev())
		return die_("iterator ended early\n");
	our_current_position--;

	printf("SV[A]PP\tset APPLICATION (grow), try to expand into padding which is too small\n");
	if(!app->set_data(data, 32, true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[A]PP\tset APPLICATION (grow), try to expand into padding which is 'close' but still too small\n");
	if(!app->set_data(data, 60, true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);

	if(!test_file_(flacfile_, /*ignore_metadata=*/false))
		return false;

	printf("SV[A]PP\tset APPLICATION (grow), expand into padding which will leave 0-length pad\n");
	if(!app->set_data(data, 87, true))
		return die_("setting APPLICATION data");
	if(!replace_in_our_metadata_(app, our_current_position, /*copy=*/true))
		return die_("copying object");
	dynamic_cast<FLAC::Metadata::Padding *>(our_metadata_.blocks[our_current_position+1])->set_length(0);
	if(!iterator.set_block(app, true))
		return die_ss_("iterator.set_block(app, true)", iterator);

⌨️ 快捷键说明

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