<br><br><div class="gmail_quote">On 16 July 2011 04:53, Siarhei Siamashka <span dir="ltr">&lt;<a href="mailto:siarhei.siamashka@gmail.com">siarhei.siamashka@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

On Sat, Jul 16, 2011 at 12:50 AM, Tristan Schmelcher<br>
<div class="im">&lt;<a href="mailto:tschmelcher@google.com">tschmelcher@google.com</a>&gt; wrote:<br>
&gt; On 15 July 2011 14:08, Siarhei Siamashka &lt;<a href="mailto:siarhei.siamashka@gmail.com">siarhei.siamashka@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Jul 15, 2011 at 9:53 PM, Tristan Schmelcher<br>
&gt;&gt; &lt;<a href="mailto:tschmelcher@google.com">tschmelcher@google.com</a>&gt; wrote:<br>
&gt;&gt; &gt; I have a Cairo application that is using Pixman to composite a<br>
&gt;&gt; &gt; semantically opaque image by scaling a bunch of source images in RGB24<br>
&gt;&gt; &gt; format. If the target surface is also RGB24 format, then it is very<br>
&gt;&gt; &gt; fast and uses fast_composite_scaled_nearest_8888_8888_cover_SRC. But<br>
&gt;&gt; &gt; if the target surface is the ARGB32 format, then it takes almost three<br>
&gt;&gt; &gt; times as long and uses just fast_composite_scaled_nearest.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If I had a choice, I would always make the destination surface in<br>
&gt;&gt; &gt; RGB24 format, but unfortunately it is being created as ARGB32 by<br>
&gt;&gt; &gt; another library which I don&#39;t control, so my application is taking the<br>
&gt;&gt; &gt; slow path. I want to improve it so that the performance in the RGB24<br>
&gt;&gt; &gt; -&gt; ARGB32 case is approximately as good as the RGB24 -&gt; RGB24 case, if<br>
&gt;&gt; &gt; possible.<br>
&gt;&gt;<br>
&gt;&gt; Have you tried alternatively converting your opaque source images to<br>
&gt;&gt; ARGB32 format? This approach may have some advantages.<br>
&gt;<br>
&gt; The source images come from the output of a video decoder. Converting them<br>
&gt; would mean touching all the memory an extra time for every frame, so also<br>
&gt; not very efficient.<br>
<br>
</div>OK, I just thought that these might have been some static images.<br>
<br>
But does this video decoder provide images directly in RGB24 format<br>
with no intermediate pass performing YUV to RGB conversion? Because a<br>
better place to set alpha channel to 0xFF and effectively get ARGB32<br>
images might be YUV-&gt;RGB converter code.</blockquote><div><br></div><div>Yeah, that was something else I considered, but it would have required a fair amount of refactoring. This patch was way simpler.</div><div> </div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">There is also a stalled work<br>
providing adequate native YUV support in cairo/pixman, which might be<br>
the best solution for you.<br></blockquote><div><br></div><div>Cool. If that work were to be completed we would probably use it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


<div class="im"><br>
&gt;&gt; &gt; My idea for how to go about this is to add a x888_8888 fast-path to<br>
&gt;&gt; &gt; Pixman for RGB24 -&gt; ARGB32 that does the same thing as the 8888_8888<br>
&gt;&gt; &gt; path but sets all the destination alpha bytes to 0xFF. But before I<br>
&gt;&gt; &gt; try coding it I wanted to ask here if anyone has any other suggestions<br>
&gt;&gt; &gt; or knows of any &quot;gotchas&quot; with this approach.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Comments?<br>
&gt;&gt;<br>
&gt;&gt; Yes, this is how pixman development is done at the moment. One finds<br>
&gt;&gt; something that is slow and adds new special fast paths for it. I have<br>
&gt;&gt; also attached a patch which should add the needed entries to the fast<br>
&gt;&gt; path tables. Probably this is what you are intending to get.<br>
&gt;<br>
&gt; Heh, I coded up nearly the same thing moments ago. :)<br>
<br>
</div>Yeah, it&#39;s indeed not difficult at all. There is just one pitfall<br>
handling NONE repeat, which is a bit tricky because the pixels fetched<br>
from outside the source image have to be transparent even though RGB24<br>
image is itself fully opaque.<br></blockquote><div><br></div><div>Ahh, I see.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
&gt; I tested your patch and it works great. The performance is indistinguishable<br>
&gt; from RGB24 -&gt; RGB24.<br>
&gt; Thanks!<br>
<br>
</div>OK, then I&#39;ll push it to pixman git master in a few days if nobody<br>
complains. If you encounter any other cases of taking slow path in<br>
pixman on your workload, feel free to post bugreports or patches.<br></blockquote><div><br></div><div>Great, thanks again!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


<br>
--<br>
Best regards,<br>
<font color="#888888">Siarhei Siamashka<br>
</font></blockquote></div><br>