<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 22, 2015 at 4:44 AM, Oded Gabbay <span dir="ltr"><<a href="mailto:oded.gabbay@gmail.com" target="_blank">oded.gabbay@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Sat, Dec 12, 2015 at 8:06 PM,  <<a href="mailto:spitzak@gmail.com">spitzak@gmail.com</a>> wrote:<br>
> From: Bill Spitzak <<a href="mailto:spitzak@gmail.com">spitzak@gmail.com</a>><br>
><br>
> If sample is IMPULSE and reconstruct is BOX or IMPULSE the sub-pixel<br>
> position of the sample is not relevant, so only one subsample is needed.<br>
</span>Why ?<br>
I mean why it is not relevant ? and why only one subsample is needed ?<br></blockquote><div><br></div><div>Because all the filters for all the subsample positions are the same (a single 1).<br><br></div><div>Actually though, the code is indicating this is happening by returning a width of zero. But I think that is not necessary: if the filter width is 1, and the filters are normalized so they sum to 1, then all the filters must be equal and be a single 1. So I think the filter_width function can return 1 and the caller treats all values <= 1 as an indication that subsampling is not needed.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Oded<br>
<div><div class="h5">> ---<br>
>  pixman/pixman-filter.c | 12 +++++++-----<br>
>  1 file changed, 7 insertions(+), 5 deletions(-)<br>
><br>
> diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c<br>
> index 64981cd..7e10108 100644<br>
> --- a/pixman/pixman-filter.c<br>
> +++ b/pixman/pixman-filter.c<br>
> @@ -230,6 +230,8 @@ filter_width (pixman_kernel_t reconstruct,<br>
>               pixman_kernel_t sample,<br>
>               double scale)<br>
>  {<br>
> +    if (reconstruct == PIXMAN_KERNEL_BOX && sample == PIXMAN_KERNEL_IMPULSE)<br>
> +       return 0;<br>
>      return ceil (scale * filters[sample].width + filters[reconstruct].width);<br>
>  }<br>
><br>
> @@ -323,13 +325,13 @@ pixman_filter_create_separable_convolution (int             *n_values,<br>
>      int subsample_x, subsample_y;<br>
>      int width, height;<br>
><br>
> -    subsample_x = (1 << subsample_bits_x);<br>
> -    subsample_y = (1 << subsample_bits_y);<br>
> -<br>
>      width = filter_width (reconstruct_x, sample_x, sx);<br>
> -    if (width < 1) width = 1;<br>
> +    if (width < 1) { width = 1; subsample_bits_x = 0; }<br>
>      height = filter_width (reconstruct_y, sample_y, sy);<br>
> -    if (height < 1) height = 1;<br>
> +    if (height < 1) { height = 1; subsample_bits_y = 0; }<br>
> +<br>
> +    subsample_x = (1 << subsample_bits_x);<br>
> +    subsample_y = (1 << subsample_bits_y);<br>
><br>
>      *n_values = 4 + width * subsample_x + height * subsample_y;<br>
><br>
> --<br>
> 1.9.1<br>
><br>
</div></div>> _______________________________________________<br>
> Pixman mailing list<br>
> <a href="mailto:Pixman@lists.freedesktop.org">Pixman@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/pixman" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/pixman</a><br>
</blockquote></div><br></div></div>