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

📄 stream_decoder.c

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(decoder->protected_->state != OggFLAC__STREAM_DECODER_UNINITIALIZED)		return false;	return FLAC__stream_decoder_set_metadata_respond_all(decoder->private_->FLAC_stream_decoder);}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != OggFLAC__STREAM_DECODER_UNINITIALIZED)		return false;	return FLAC__stream_decoder_set_metadata_ignore(decoder->private_->FLAC_stream_decoder, type);}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != OggFLAC__STREAM_DECODER_UNINITIALIZED)		return false;	return FLAC__stream_decoder_set_metadata_ignore_application(decoder->private_->FLAC_stream_decoder, id);}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_all(OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(decoder->protected_->state != OggFLAC__STREAM_DECODER_UNINITIALIZED)		return false;	return FLAC__stream_decoder_set_metadata_ignore_all(decoder->private_->FLAC_stream_decoder);}OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_get_state(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->protected_);	return decoder->protected_->state;}OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_state(decoder->private_->FLAC_stream_decoder);}OggFLAC_API const char *OggFLAC__stream_decoder_get_resolved_state_string(const OggFLAC__StreamDecoder *decoder){	if(decoder->protected_->state != OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR)		return OggFLAC__StreamDecoderStateString[decoder->protected_->state];	else		return FLAC__stream_decoder_get_resolved_state_string(decoder->private_->FLAC_stream_decoder);}OggFLAC_API unsigned OggFLAC__stream_decoder_get_channels(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_channels(decoder->private_->FLAC_stream_decoder);}OggFLAC_API FLAC__ChannelAssignment OggFLAC__stream_decoder_get_channel_assignment(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_channel_assignment(decoder->private_->FLAC_stream_decoder);}OggFLAC_API unsigned OggFLAC__stream_decoder_get_bits_per_sample(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_bits_per_sample(decoder->private_->FLAC_stream_decoder);}OggFLAC_API unsigned OggFLAC__stream_decoder_get_sample_rate(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_sample_rate(decoder->private_->FLAC_stream_decoder);}OggFLAC_API unsigned OggFLAC__stream_decoder_get_blocksize(const OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	return FLAC__stream_decoder_get_blocksize(decoder->private_->FLAC_stream_decoder);}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_flush(OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	OggFLAC__ogg_decoder_aspect_flush(&decoder->protected_->ogg_decoder_aspect);	if(!FLAC__stream_decoder_flush(decoder->private_->FLAC_stream_decoder)) {		decoder->protected_->state = OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR;		return false;	}	decoder->protected_->state = OggFLAC__STREAM_DECODER_OK;	return true;}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_reset(OggFLAC__StreamDecoder *decoder){	FLAC__ASSERT(0 != decoder);	FLAC__ASSERT(0 != decoder->private_);	FLAC__ASSERT(0 != decoder->protected_);	if(!OggFLAC__stream_decoder_flush(decoder)) {		decoder->protected_->state = OggFLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;		return false;	}	OggFLAC__ogg_decoder_aspect_reset(&decoder->protected_->ogg_decoder_aspect);	if(!FLAC__stream_decoder_reset(decoder->private_->FLAC_stream_decoder)) {		decoder->protected_->state = OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR;		return false;	}	decoder->protected_->state = OggFLAC__STREAM_DECODER_OK;	return true;}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_single(OggFLAC__StreamDecoder *decoder){	FLAC__bool ret;	FLAC__ASSERT(0 != decoder);	if(FLAC__stream_decoder_get_state(decoder->private_->FLAC_stream_decoder) == FLAC__STREAM_DECODER_END_OF_STREAM)		decoder->protected_->state = OggFLAC__STREAM_DECODER_END_OF_STREAM;	if(decoder->protected_->state == OggFLAC__STREAM_DECODER_END_OF_STREAM)		return true;	FLAC__ASSERT(decoder->protected_->state == OggFLAC__STREAM_DECODER_OK);	ret = FLAC__stream_decoder_process_single(decoder->private_->FLAC_stream_decoder);	if(!ret)		decoder->protected_->state = OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR;	return ret;}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_metadata(OggFLAC__StreamDecoder *decoder){	FLAC__bool ret;	FLAC__ASSERT(0 != decoder);	if(FLAC__stream_decoder_get_state(decoder->private_->FLAC_stream_decoder) == FLAC__STREAM_DECODER_END_OF_STREAM)		decoder->protected_->state = OggFLAC__STREAM_DECODER_END_OF_STREAM;	if(decoder->protected_->state == OggFLAC__STREAM_DECODER_END_OF_STREAM)		return true;	FLAC__ASSERT(decoder->protected_->state == OggFLAC__STREAM_DECODER_OK);	ret = FLAC__stream_decoder_process_until_end_of_metadata(decoder->private_->FLAC_stream_decoder);	if(!ret)		decoder->protected_->state = OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR;	return ret;}OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_stream(OggFLAC__StreamDecoder *decoder){	FLAC__bool ret;	FLAC__ASSERT(0 != decoder);	if(FLAC__stream_decoder_get_state(decoder->private_->FLAC_stream_decoder) == FLAC__STREAM_DECODER_END_OF_STREAM)		decoder->protected_->state = OggFLAC__STREAM_DECODER_END_OF_STREAM;	if(decoder->protected_->state == OggFLAC__STREAM_DECODER_END_OF_STREAM)		return true;	FLAC__ASSERT(decoder->protected_->state == OggFLAC__STREAM_DECODER_OK);	ret = FLAC__stream_decoder_process_until_end_of_stream(decoder->private_->FLAC_stream_decoder);	if(!ret)		decoder->protected_->state = OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR;	return ret;}/*********************************************************************** * * Private class methods * ***********************************************************************/void set_defaults_(OggFLAC__StreamDecoder *decoder){	decoder->private_->read_callback = 0;	decoder->private_->write_callback = 0;	decoder->private_->metadata_callback = 0;	decoder->private_->error_callback = 0;	decoder->private_->client_data = 0;	OggFLAC__ogg_decoder_aspect_set_defaults(&decoder->protected_->ogg_decoder_aspect);}FLAC__StreamDecoderReadStatus read_callback_(const FLAC__StreamDecoder *unused, FLAC__byte buffer[], unsigned *bytes, void *client_data){	OggFLAC__StreamDecoder *decoder = (OggFLAC__StreamDecoder*)client_data;	(void)unused;	switch(OggFLAC__ogg_decoder_aspect_read_callback_wrapper(&decoder->protected_->ogg_decoder_aspect, buffer, bytes, read_callback_proxy_, decoder, decoder->private_->client_data)) {		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_OK:			return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;		/* we don't really have a way to handle lost sync via read		 * callback so we'll let it pass and let the underlying		 * FLAC decoder catch the error		 */		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC:			return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM:			return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC:		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION:		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT:		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR:			decoder->protected_->state = OggFLAC__STREAM_DECODER_READ_ERROR;			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;		case OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR:			decoder->protected_->state = OggFLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;		default:			FLAC__ASSERT(0);			/* double protection */			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;	}}FLAC__StreamDecoderWriteStatus write_callback_(const FLAC__StreamDecoder *unused, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data){	OggFLAC__StreamDecoder *decoder = (OggFLAC__StreamDecoder*)client_data;	(void)unused;	return decoder->private_->write_callback(decoder, frame, buffer, decoder->private_->client_data);}void metadata_callback_(const FLAC__StreamDecoder *unused, const FLAC__StreamMetadata *metadata, void *client_data){	OggFLAC__StreamDecoder *decoder = (OggFLAC__StreamDecoder*)client_data;	(void)unused;	decoder->private_->metadata_callback(decoder, metadata, decoder->private_->client_data);}void error_callback_(const FLAC__StreamDecoder *unused, FLAC__StreamDecoderErrorStatus status, void *client_data){	OggFLAC__StreamDecoder *decoder = (OggFLAC__StreamDecoder*)client_data;	(void)unused;	decoder->private_->error_callback(decoder, status, decoder->private_->client_data);}OggFLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data){	OggFLAC__StreamDecoder *decoder = (OggFLAC__StreamDecoder*)void_decoder;	switch(decoder->private_->read_callback(decoder, buffer, bytes, client_data)) {		case FLAC__STREAM_DECODER_READ_STATUS_CONTINUE:			return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_OK;		case FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM:			return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM;		case FLAC__STREAM_DECODER_READ_STATUS_ABORT:			return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;		default:			/* double protection: */			FLAC__ASSERT(0);			return OggFLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;	}}

⌨️ 快捷键说明

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