From dbb7480f12a96cf480e59fe0be4778e63c936739 Mon Sep 17 00:00:00 2001 From: Jorge Rodriguez Date: Thu, 24 Jul 2014 22:30:35 -0700 Subject: [PATCH] Fix nonuniform downsampling. --- stb_resample.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/stb_resample.h b/stb_resample.h index dcfe614..2d57c45 100644 --- a/stb_resample.h +++ b/stb_resample.h @@ -309,12 +309,10 @@ static void stbr__calculate_coefficients_upsample(stbr__info* stbr_info, int in_ coefficient_group[i] *= filter_scale; } -static void stbr__calculate_coefficients_downsample(stbr__info* stbr_info, int out_first_texel, int out_last_texel, float out_center_of_in, int n, stbr__contributors* contributor, float* coefficient_group) +static void stbr__calculate_coefficients_downsample(stbr__info* stbr_info, float scale_ratio, int out_first_texel, int out_last_texel, float out_center_of_in, int n, stbr__contributors* contributor, float* coefficient_group) { int i; - float scale_ratio = (float)stbr_info->output_w / stbr_info->input_w; - STBR_DEBUG_ASSERT(out_last_texel - out_first_texel <= stbr_info->kernel_texel_width); STBR_DEBUG_ASSERT(out_first_texel >= 0); STBR_DEBUG_ASSERT(out_last_texel < stbr_info->total_horizontal_contributors); @@ -365,7 +363,7 @@ static void stbr__calculate_horizontal_filters(stbr__info* stbr_info) stbr__calculate_sample_range_downsample(n, in_pixels_radius, scale_ratio, &out_first_texel, &out_last_texel, &out_center_of_in); - stbr__calculate_coefficients_downsample(stbr_info, out_first_texel, out_last_texel, out_center_of_in, n, stbr__get_contributor(stbr_info, n), stbr__get_coefficient(stbr_info, n, 0)); + stbr__calculate_coefficients_downsample(stbr_info, scale_ratio, out_first_texel, out_last_texel, out_center_of_in, n, stbr__get_contributor(stbr_info, n), stbr__get_coefficient(stbr_info, n, 0)); } } } @@ -633,7 +631,7 @@ static void stbr__resample_vertical_downsample(stbr__info* stbr_info, int n, int int ring_buffer_last_scanline = stbr_info->ring_buffer_last_scanline; int ring_buffer_length = stbr_info->ring_buffer_length; - stbr__calculate_coefficients_downsample(stbr_info, in_first_scanline, in_last_scanline, in_center_of_out, n, vertical_contributors, vertical_coefficients); + stbr__calculate_coefficients_downsample(stbr_info, (float)stbr_info->output_h / stbr_info->input_h, in_first_scanline, in_last_scanline, in_center_of_out, n, vertical_contributors, vertical_coefficients); int n0 = vertical_contributors->n0; int n1 = vertical_contributors->n1;