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

📄 encode.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
		else {			if(0 != e->encoder.ogg.file) {				OggFLAC__file_encoder_delete(e->encoder.ogg.file);				e->encoder.ogg.file = 0;			}		}	}	else#endif	if(e->is_stdout) {		if(0 != e->encoder.flac.stream) {			FLAC__stream_encoder_delete(e->encoder.flac.stream);			e->encoder.flac.stream = 0;		}	}	else {		if(0 != e->encoder.flac.file) {			FLAC__file_encoder_delete(e->encoder.flac.file);			e->encoder.flac.file = 0;		}	}	if(0 != e->seek_table_template) {		FLAC__metadata_object_delete(e->seek_table_template);		e->seek_table_template = 0;	}}int EncoderSession_finish_ok(EncoderSession *e, int info_align_carry, int info_align_zero){	FLAC__StreamEncoderState fse_state = FLAC__STREAM_ENCODER_OK;	int ret = 0;#ifdef FLAC__HAS_OGG	if(e->use_ogg) {		if(e->is_stdout) {			if(e->encoder.ogg.stream) {				fse_state = OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg.stream);				OggFLAC__stream_encoder_finish(e->encoder.ogg.stream);			}		}		else {			if(e->encoder.ogg.file) {				fse_state = OggFLAC__file_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg.file);				OggFLAC__file_encoder_finish(e->encoder.ogg.file);			}		}	}	else#endif	if(e->is_stdout) {		if(e->encoder.flac.stream) {			fse_state = FLAC__stream_encoder_get_state(e->encoder.flac.stream);			FLAC__stream_encoder_finish(e->encoder.flac.stream);		}	}	else {		if(e->encoder.flac.file) {			fse_state = FLAC__file_encoder_get_stream_encoder_state(e->encoder.flac.file);			FLAC__file_encoder_finish(e->encoder.flac.file);		}	}	if(e->total_samples_to_encode > 0) {		print_stats(e);		flac__utils_printf(stderr, 2, "\n");	}	if(fse_state == FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA) {		print_verify_error(e);		ret = 1;	}	else {		if(info_align_carry >= 0) {			flac__utils_printf(stderr, 1, "%s: INFO: sector alignment causing %d samples to be carried over\n", e->inbasefilename, info_align_carry);		}		if(info_align_zero >= 0) {			flac__utils_printf(stderr, 1, "%s: INFO: sector alignment causing %d zero samples to be appended\n", e->inbasefilename, info_align_zero);		}	}	EncoderSession_destroy(e);	return ret;}int EncoderSession_finish_error(EncoderSession *e){	FLAC__StreamEncoderState fse_state;	if(e->total_samples_to_encode > 0)		flac__utils_printf(stderr, 2, "\n");#ifdef FLAC__HAS_OGG	if(e->use_ogg) {		if(e->is_stdout) {			fse_state = OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg.stream);		}		else {			fse_state = OggFLAC__file_encoder_get_FLAC_stream_encoder_state(e->encoder.ogg.file);		}	}	else#endif	if(e->is_stdout) {		fse_state = FLAC__stream_encoder_get_state(e->encoder.flac.stream);	}	else {		fse_state = FLAC__file_encoder_get_stream_encoder_state(e->encoder.flac.file);	}	if(fse_state == FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA)		print_verify_error(e);	else		unlink(e->outfilename);	EncoderSession_destroy(e);	return 1;}FLAC__bool EncoderSession_init_encoder(EncoderSession *e, encode_options_t options, unsigned channels, unsigned bps, unsigned sample_rate){	unsigned num_metadata;	FLAC__StreamMetadata padding, *cuesheet = 0;	FLAC__StreamMetadata *metadata[4];	const FLAC__bool is_cdda = (channels == 1 || channels == 2) && (bps == 16) && (sample_rate == 44100);	e->replay_gain = options.replay_gain;	e->channels = channels;	e->bits_per_sample = bps;	e->sample_rate = sample_rate;	if(e->replay_gain) {		if(channels != 1 && channels != 2) {			flac__utils_printf(stderr, 1, "%s: ERROR, number of channels (%u) must be 1 or 2 for --replay-gain\n", e->inbasefilename, channels);			return false;		}		if(!grabbag__replaygain_is_valid_sample_frequency(sample_rate)) {			flac__utils_printf(stderr, 1, "%s: ERROR, invalid sample rate (%u) for --replay-gain\n", e->inbasefilename, sample_rate);			return false;		}		if(options.is_first_file) {			if(!grabbag__replaygain_init(sample_rate)) {				flac__utils_printf(stderr, 1, "%s: ERROR initializing ReplayGain stage\n", e->inbasefilename);				return false;			}		}	}	if(channels != 2)		options.do_mid_side = options.loose_mid_side = false;	if(!parse_cuesheet_(&cuesheet, options.cuesheet_filename, e->inbasefilename, is_cdda, e->total_samples_to_encode))		return false;	if(!convert_to_seek_table_template(options.requested_seek_points, options.num_requested_seek_points, options.cued_seekpoints? cuesheet : 0, e)) {		flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for seek table\n", e->inbasefilename);		if(0 != cuesheet)			FLAC__metadata_object_delete(cuesheet);		return false;	}	num_metadata = 0;	if(e->seek_table_template->data.seek_table.num_points > 0) {		e->seek_table_template->is_last = false; /* the encoder will set this for us */		metadata[num_metadata++] = e->seek_table_template;	}	if(0 != cuesheet)		metadata[num_metadata++] = cuesheet;	metadata[num_metadata++] = options.vorbis_comment;	if(options.padding > 0) {		padding.is_last = false; /* the encoder will set this for us */		padding.type = FLAC__METADATA_TYPE_PADDING;		padding.length = (unsigned)options.padding;		metadata[num_metadata++] = &padding;	}	e->blocksize = options.blocksize;	e->stats_mask = (options.do_exhaustive_model_search || options.do_qlp_coeff_prec_search)? 0x0f : 0x3f;#ifdef FLAC__HAS_OGG	if(e->use_ogg) {		if(e->is_stdout) {			OggFLAC__stream_encoder_set_serial_number(e->encoder.ogg.stream, options.serial_number);			OggFLAC__stream_encoder_set_verify(e->encoder.ogg.stream, options.verify);			OggFLAC__stream_encoder_set_streamable_subset(e->encoder.ogg.stream, !options.lax);			OggFLAC__stream_encoder_set_do_mid_side_stereo(e->encoder.ogg.stream, options.do_mid_side);			OggFLAC__stream_encoder_set_loose_mid_side_stereo(e->encoder.ogg.stream, options.loose_mid_side);			OggFLAC__stream_encoder_set_channels(e->encoder.ogg.stream, channels);			OggFLAC__stream_encoder_set_bits_per_sample(e->encoder.ogg.stream, bps);			OggFLAC__stream_encoder_set_sample_rate(e->encoder.ogg.stream, sample_rate);			OggFLAC__stream_encoder_set_blocksize(e->encoder.ogg.stream, options.blocksize);			OggFLAC__stream_encoder_set_max_lpc_order(e->encoder.ogg.stream, options.max_lpc_order);			OggFLAC__stream_encoder_set_qlp_coeff_precision(e->encoder.ogg.stream, options.qlp_coeff_precision);			OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search(e->encoder.ogg.stream, options.do_qlp_coeff_prec_search);			OggFLAC__stream_encoder_set_do_escape_coding(e->encoder.ogg.stream, options.do_escape_coding);			OggFLAC__stream_encoder_set_do_exhaustive_model_search(e->encoder.ogg.stream, options.do_exhaustive_model_search);			OggFLAC__stream_encoder_set_min_residual_partition_order(e->encoder.ogg.stream, options.min_residual_partition_order);			OggFLAC__stream_encoder_set_max_residual_partition_order(e->encoder.ogg.stream, options.max_residual_partition_order);			OggFLAC__stream_encoder_set_rice_parameter_search_dist(e->encoder.ogg.stream, options.rice_parameter_search_dist);			OggFLAC__stream_encoder_set_total_samples_estimate(e->encoder.ogg.stream, e->total_samples_to_encode);			OggFLAC__stream_encoder_set_metadata(e->encoder.ogg.stream, (num_metadata > 0)? metadata : 0, num_metadata);			OggFLAC__stream_encoder_set_write_callback(e->encoder.ogg.stream, ogg_stream_encoder_write_callback);			OggFLAC__stream_encoder_set_metadata_callback(e->encoder.ogg.stream, ogg_stream_encoder_metadata_callback);			OggFLAC__stream_encoder_set_client_data(e->encoder.ogg.stream, e);			OggFLAC__stream_encoder_disable_constant_subframes(e->encoder.ogg.stream, options.debug.disable_constant_subframes);			OggFLAC__stream_encoder_disable_fixed_subframes(e->encoder.ogg.stream, options.debug.disable_fixed_subframes);			OggFLAC__stream_encoder_disable_verbatim_subframes(e->encoder.ogg.stream, options.debug.disable_verbatim_subframes);			if(OggFLAC__stream_encoder_init(e->encoder.ogg.stream) != FLAC__STREAM_ENCODER_OK) {				print_error_with_state(e, "ERROR initializing encoder");				if(0 != cuesheet)					FLAC__metadata_object_delete(cuesheet);				return false;			}		}		else {			OggFLAC__file_encoder_set_serial_number(e->encoder.ogg.file, options.serial_number);			OggFLAC__file_encoder_set_filename(e->encoder.ogg.file, e->outfilename);			OggFLAC__file_encoder_set_verify(e->encoder.ogg.file, options.verify);			OggFLAC__file_encoder_set_streamable_subset(e->encoder.ogg.file, !options.lax);			OggFLAC__file_encoder_set_do_mid_side_stereo(e->encoder.ogg.file, options.do_mid_side);			OggFLAC__file_encoder_set_loose_mid_side_stereo(e->encoder.ogg.file, options.loose_mid_side);			OggFLAC__file_encoder_set_channels(e->encoder.ogg.file, channels);			OggFLAC__file_encoder_set_bits_per_sample(e->encoder.ogg.file, bps);			OggFLAC__file_encoder_set_sample_rate(e->encoder.ogg.file, sample_rate);			OggFLAC__file_encoder_set_blocksize(e->encoder.ogg.file, options.blocksize);			OggFLAC__file_encoder_set_max_lpc_order(e->encoder.ogg.file, options.max_lpc_order);			OggFLAC__file_encoder_set_qlp_coeff_precision(e->encoder.ogg.file, options.qlp_coeff_precision);			OggFLAC__file_encoder_set_do_qlp_coeff_prec_search(e->encoder.ogg.file, options.do_qlp_coeff_prec_search);			OggFLAC__file_encoder_set_do_escape_coding(e->encoder.ogg.file, options.do_escape_coding);			OggFLAC__file_encoder_set_do_exhaustive_model_search(e->encoder.ogg.file, options.do_exhaustive_model_search);			OggFLAC__file_encoder_set_min_residual_partition_order(e->encoder.ogg.file, options.min_residual_partition_order);			OggFLAC__file_encoder_set_max_residual_partition_order(e->encoder.ogg.file, options.max_residual_partition_order);			OggFLAC__file_encoder_set_rice_parameter_search_dist(e->encoder.ogg.file, options.rice_parameter_search_dist);			OggFLAC__file_encoder_set_total_samples_estimate(e->encoder.ogg.file, e->total_samples_to_encode);			OggFLAC__file_encoder_set_metadata(e->encoder.ogg.file, (num_metadata > 0)? metadata : 0, num_metadata);			OggFLAC__file_encoder_set_progress_callback(e->encoder.ogg.file, ogg_file_encoder_progress_callback);			OggFLAC__file_encoder_set_client_data(e->encoder.ogg.file, e);			OggFLAC__file_encoder_disable_constant_subframes(e->encoder.ogg.file, options.debug.disable_constant_subframes);			OggFLAC__file_encoder_disable_fixed_subframes(e->encoder.ogg.file, options.debug.disable_fixed_subframes);			OggFLAC__file_encoder_disable_verbatim_subframes(e->encoder.ogg.file, options.debug.disable_verbatim_subframes);			if(OggFLAC__file_encoder_init(e->encoder.ogg.file) != OggFLAC__FILE_ENCODER_OK) {				print_error_with_state(e, "ERROR initializing encoder");				if(0 != cuesheet)					FLAC__metadata_object_delete(cuesheet);				return false;			}		}	}	else#endif	if(e->is_stdout) {		FLAC__stream_encoder_set_verify(e->encoder.flac.stream, options.verify);		FLAC__stream_encoder_set_streamable_subset(e->encoder.flac.stream, !options.lax);		FLAC__stream_encoder_set_do_mid_side_stereo(e->encoder.flac.stream, options.do_mid_side);		FLAC__stream_encoder_set_loose_mid_side_stereo(e->encoder.flac.stream, options.loose_mid_side);		FLAC__stream_encoder_set_channels(e->encoder.flac.stream, channels);		FLAC__stream_encoder_set_bits_per_sample(e->encoder.flac.stream, bps);		FLAC__stream_encoder_set_sample_rate(e->encoder.flac.stream, sample_rate);		FLAC__stream_encoder_set_blocksize(e->encoder.flac.stream, options.blocksize);		FLAC__stream_encoder_set_max_lpc_order(e->encoder.flac.stream, options.max_lpc_order);		FLAC__stream_encoder_set_qlp_coeff_precision(e->encoder.flac.stream, options.qlp_coeff_precision);		FLAC__stream_encoder_set_do_qlp_coeff_prec_search(e->encoder.flac.stream, options.do_qlp_coeff_prec_search);		FLAC__stream_encoder_set_do_escape_coding(e->encoder.flac.stream, options.do_escape_coding);		FLAC__stream_encoder_set_do_exhaustive_model_search(e->encoder.flac.stream, options.do_exhaustive_model_search);		FLAC__stream_encoder_set_min_residual_partition_order(e->encoder.flac.stream, options.min_residual_partition_order);		FLAC__stream_encoder_set_max_residual_partition_order(e->encoder.flac.stream, options.max_residual_partition_order);		FLAC__stream_encoder_set_rice_parameter_search_dist(e->encoder.flac.stream, options.rice_parameter_search_dist);		FLAC__stream_encoder_set_total_samples_estimate(e->encoder.flac.stream, e->total_samples_to_encode);		FLAC__stream_encoder_set_metadata(e->encoder.flac.stream, (num_metadata > 0)? metadata : 0, num_metadata);		FLAC__stream_encoder_set_write_callback(e->encoder.flac.stream, flac_stream_encoder_write_callback);		FLAC__stream_encoder_set_metadata_callback(e->encoder.flac.stream, flac_stream_encoder_metadata_callback);		FLAC__stream_encoder_set_client_data(e->encoder.flac.stream, e);		FLAC__stream_encoder_disable_constant_subframes(e->encoder.flac.stream, options.debug.disable_constant_subframes);		FLAC__stream_encoder_disable_fixed_subframes(e->encoder.flac.stream, options.debug.disable_fixed_subframes);		FLAC__stream_encoder_disable_verbatim_subframes(e->encoder.flac.stream, options.debug.disable_verbatim_subframes);		if(FLAC__stream_encoder_init(e->encoder.flac.stream) != FLAC__STREAM_ENCODER_OK) {			print_error_with_state(e, "ERROR initializing encoder");			if(0 != cuesheet)				FLAC__metadata_object_delete(cuesheet);			return false;		}	}	else {		FLAC__file_encoder_set_filename(e->encoder.flac.file, e->outfilename);		FLAC__file_encoder_set_verify(e->encoder.flac.file, options.verify);		FLAC__file_encoder_set_streamable_subset(e->encoder.flac.file, !options.lax);		FLAC__file_encoder_set_do_mid_side_stereo(e->encoder.flac.file, options.do_mid_side);		FLAC__file_encoder_set_loose_mid_side_stereo(e->encoder.flac.file, options.loose_mid_side);		FLAC__file_encoder_set_channels(e->encoder.flac.file, channels);		FLAC__file_encoder_set_bits_per_sample(e->encoder.flac.file, bps);		FLAC__file_encoder_set_sample_rate(e->encoder.flac.file, sample_rate);		FLAC__file_encoder_set_blocksize(e->encoder.flac.file, options.blocksize);		FLAC__file_encoder_set_max_lpc_order(e->encoder.flac.file, options.max_lpc_order);		FLAC__file_encoder_set_qlp_coeff_precision(e->encoder.flac.file, options.qlp_coeff_precision);		FLAC__file_encoder_set_do_qlp_coeff_prec_searc

⌨️ 快捷键说明

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