# HG changeset patch # User chainsaw # Date 1142204718 28800 # Node ID 6812adf5ff2e85f92885b8f687828350843adbe0 # Parent e143cbba4819bb8d50bc21073e655b74d0f6e34d [svn] Okay, we need to pinch more playback code to avoid false positives. diff -r e143cbba4819 -r 6812adf5ff2e Plugins/Input/flac/plugin.c --- a/Plugins/Input/flac/plugin.c Sun Mar 12 14:49:19 2006 -0800 +++ b/Plugins/Input/flac/plugin.c Sun Mar 12 15:05:18 2006 -0800 @@ -288,9 +288,50 @@ int FLAC_XMMS__is_our_file(char *filename) { - if (source_to_decoder_type (filename) == DECODER_FILE) - return 1; - return 0; + FILE *f; + file_info_.has_replaygain = false; + + if (source_to_decoder_type (filename) == DECODER_FILE) { + if(0 == (f = fopen(filename, "r"))) + return 0; + fclose(f); + } + + if(decoder_ == 0) + return 0; + + if(!safe_decoder_init_(filename, &decoder_, &decoder_func_table_)) + return 0; + + if(file_info_.has_replaygain && flac_cfg.output.replaygain.enable) { + if(flac_cfg.output.resolution.replaygain.bps_out == 8) { + file_info_.sample_format = FMT_U8; + file_info_.sample_format_bytes_per_sample = 1; + } + else if(flac_cfg.output.resolution.replaygain.bps_out == 16) { + file_info_.sample_format = (is_big_endian_host_) ? FMT_S16_BE : FMT_S16_LE; + file_info_.sample_format_bytes_per_sample = 2; + } + else { + decoder_func_table_ -> safe_decoder_finish(decoder_); + return 0; + } + } + else { + if(file_info_.bits_per_sample == 8) { + file_info_.sample_format = FMT_U8; + file_info_.sample_format_bytes_per_sample = 1; + } + else if(file_info_.bits_per_sample == 16 || (file_info_.bits_per_sample == 24 && flac_cfg.output.resolution.normal.dither_24_to_16)) { + file_info_.sample_format = (is_big_endian_host_) ? FMT_S16_BE : FMT_S16_LE; + file_info_.sample_format_bytes_per_sample = 2; + } + else { + decoder_func_table_ -> safe_decoder_finish(decoder_); + return 0; + } + } + return 1; } void FLAC_XMMS__play_file(char *filename)