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

📄 stream_decoder.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	return decoder->protected_->state;}FLAC_API void FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder){	unsigned i;	FLAC__ASSERT(0 != decoder);	if(decoder->protected_->state == FLAC__STREAM_DECODER_UNINITIALIZED)		return;	if(0 != decoder->private_->seek_table.data.seek_table.points) {		free(decoder->private_->seek_table.data.seek_table.points);		decoder->private_->seek_table.data.seek_table.points = 0;		decoder->private_->has_seek_table = false;	}	FLAC__bitbuffer_free(decoder->private_->input);	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {		/* WATCHOUT:		 * FLAC__lpc_restore_signal_asm_ia32_mmx() requires that the		 * output arrays have a buffer of up to 3 zeroes in front		 * (at negative indices) for alignment purposes; we use 4		 * to keep the data well-aligned.		 */		if(0 != decoder->private_->output[i]) {			free(decoder->private_->output[i]-4);			decoder->private_->output[i] = 0;		}		if(0 != decoder->private_->residual_unaligned[i]) {			free(decoder->private_->residual_unaligned[i]);			decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0;		}	}	decoder->private_->output_capacity = 0;	decoder->private_->output_channels = 0;	set_defaults_(decoder);	decoder->protected_->state = FLAC__STREAM_DECODER_UNINITIALIZED;}FLAC_API FLAC__bool FLAC__stream_decoder_set_read_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderReadCallback value){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->read_callback = value;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_write_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderWriteCallback value){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->write_callback = value;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderMetadataCallback value){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->metadata_callback = value;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_error_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorCallback value){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->error_callback = value;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_client_data(FLAC__StreamDecoder *decoder, void *value){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->client_data = value;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE);	/* double protection */	if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE)		return false;	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->metadata_filter[type] = true;	if(type == FLAC__METADATA_TYPE_APPLICATION)		decoder->private_->metadata_filter_ids_count = 0;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	FLAC__ASSERT(0 != id);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	if(decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION])		return true;	FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids);	if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) {		if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*)realloc(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity * 2)))			return decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;		decoder->private_->metadata_filter_ids_capacity *= 2;	}	memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8));	decoder->private_->metadata_filter_ids_count++;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder){	unsigned i;	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	for(i = 0; i < sizeof(decoder->private_->metadata_filter) / sizeof(decoder->private_->metadata_filter[0]); i++)		decoder->private_->metadata_filter[i] = true;	decoder->private_->metadata_filter_ids_count = 0;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE);	/* double protection */	if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE)		return false;	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	decoder->private_->metadata_filter[type] = false;	if(type == FLAC__METADATA_TYPE_APPLICATION)		decoder->private_->metadata_filter_ids_count = 0;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	FLAC__ASSERT(0 != id);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	if(!decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION])		return true;	FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids);	if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) {		if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*)realloc(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity * 2)))			return decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;		decoder->private_->metadata_filter_ids_capacity *= 2;	}	memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8));	decoder->private_->metadata_filter_ids_count++;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)		return false;	memset(decoder->private_->metadata_filter, 0, sizeof(decoder->private_->metadata_filter));	decoder->private_->metadata_filter_ids_count = 0;	return true;}FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->state;}FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder){	return FLAC__StreamDecoderStateString[decoder->protected_->state];}FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->channels;}FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->channel_assignment;}FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->bits_per_sample;}FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->sample_rate;}FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->blocksize;}FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(!FLAC__bitbuffer_clear(decoder->private_->input)) {		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;		return false;	}	decoder->private_->last_frame_number = 0;	decoder->private_->last_block_size = 0;	decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(!FLAC__stream_decoder_flush(decoder)) {		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;		return false;	}	decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_METADATA;	decoder->private_->samples_decoded = 0;	return true;}FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder){	FLAC__bool got_a_frame;	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	while(1) {		switch(decoder->protected_->state) {			case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:				if(!find_metadata_(decoder))					return false; /* above function sets the status for us */				break;			case FLAC__STREAM_DECODER_READ_METADATA:				if(!read_metadata_(decoder))					return false; /* above function sets the status for us */				else					return true;			case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:				if(!frame_sync_(decoder))					return true; /* above function sets the status for us */				break;			case FLAC__STREAM_DECODER_READ_FRAME:				if(!read_frame_(decoder, &got_a_frame, /*do_full_decode=*/true))					return false; /* above function sets the status for us */				if(got_a_frame)					return true; /* above function sets the status for us */				break;			case FLAC__STREAM_DECODER_END_OF_STREAM:			case FLAC__STREAM_DECODER_ABORTED:				return true;			default:				FLAC__ASSERT(0);				return false;		}	}}FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	while(1) {		switch(decoder->protected_->state) {

⌨️ 快捷键说明

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