Hi,<div>I have gathered other questions about spice and how it handles streaming video. I think you can help me:</div><div><br></div><div>1)File red_worker.c.</div><div>I would like to have more information about these members of the struct RedWorker :</div>
<div><ul><li>RedSurface surfaces[NUM_SURFACES], </li><li>Ring current_list, </li><li>_Drawable drawables[NUM_DRAWABLES]; </li><li>Stream streams_buf[NUM_STREAMS];</li></ul></div><div>2)Function red_worker_main(), what does <b>red_handle_streams_timout()</b> do?</div>
<div><br></div><div>3)When you run qemu with option <b>-streaming_video=off</b> for example, the function <b>spice_server_set_streaming_video() </b>in reds.c, calls <b>red_dispatcher_on_sv_change(). </b></div><div><b></b>In this function there is a while loop on RedDispatcher *now. Dispatcher is created in red_dispatcher_init_function, that it&#39;s called later, in this way <b>now </b>is NULL and it doesn&#39;t enter in the while loop. As a consequence of this, <meta http-equiv="content-type" content="text/html; charset=utf-8"> <b>red_dispatcher_on_sv_change() </b>doesn&#39;t send <meta http-equiv="content-type" content="text/html; charset=utf-8"> <b>RED_WORKER_MESSAGE_SET_STREAMING_VIDEO </b>message.</div>
<div><br></div><div>Did I make myself clear?</div><div>Thanks very much.<br><br><div class="gmail_quote">2011/4/21 Alon Levy <span dir="ltr">&lt;<a href="mailto:alevy@redhat.com">alevy@redhat.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Thu, Apr 21, 2011 at 10:22:15AM +0200, Andrea Celestino wrote:<br>
&gt; Thanks.<br>
&gt; Now I am trying to study the code I am interested in.<br>
&gt; Unfortunately, the file red_worker.c is very huge and there are not any<br>
&gt; comments that can help me.<br>
&gt;<br>
&gt; I would like to know:<br>
&gt; 1- which parts/functions of red_worker.c are video related stuff?<br>
</div>A lot. Seriously - this requires a little more checking then I can give you off<br>
the top of my head. Questions 2 and 3 are more specific, so easier to answer.<br>
I would seriously suggest trying systemtap or just adding some prints to see<br>
what is going on. Start from red_process_drawable.<br>
<div class="im"><br>
&gt; 2- You said:<br>
&gt;  &quot;determine if a given draw operation (has to be an opaque copy iirc) is<br>
&gt;  repeated to the same area.&quot;<br>
&gt; What do you mean with &quot;opaque copy iirc&quot;?<br>
<br>
</div>iirc - if I recall correctly, meaning I&#39;m not sure.<br>
opaque copy - an operation that copies a bitmap to a surface. The video streaming<br>
is done based on seeing repeated operations that copy a bitmap to the same<br>
surface, always surface 0 (that is the primary surface, we ignore repeated copies<br>
to non primary surfaces).<br>
opaque - meaning the destination bits are overwritten by the source bits, no binary<br>
operation is done (xor/and/or).<br>
<div class="im"><br>
&gt;<br>
&gt; 3- There are a red worker thread for each QXL device instance. How many QXL<br>
&gt; device instance are there?<br>
<br>
</div>One per device. But you can ignore the support for multiple devices for this,<br>
so just one if you run a single device (&quot;-vga qxl&quot;).<br>
<div class="im"><br>
&gt; 4- Which function does red_worker.c use to detect video streaming?<br>
&gt;<br>
</div>interesting functions are:<br>
__red_is_next_stream_frame<br>
anything with -&gt;stream<br>
red_attach_stream<br>
anything with mjpeg<br>
red_current_add, the bottom part (that checks for OPAQUE and calls red_use_stream_trace)<br>
<div class="im"><br>
&gt; Thanks for any helps you can give me<br>
</div>Sure, please take a look at the above points and try what I suggested.<br>
<font color="#888888"><br>
Alon<br>
</font><div><div></div><div class="h5"><br>
&gt;<br>
&gt; 2011/4/15 Alon Levy &lt;<a href="mailto:alevy@redhat.com">alevy@redhat.com</a>&gt;<br>
&gt;<br>
&gt; &gt; On Thu, Apr 14, 2011 at 03:20:40PM +0200, Andrea Celestino wrote:<br>
&gt; &gt; &gt; I would like to improve the streaming video performance in Spice, do you<br>
&gt; &gt; &gt; think that is possible to improve it? In what way?<br>
&gt; &gt; &gt; Are there documents that describes in detail how spice works with video?<br>
&gt; &gt;<br>
&gt; &gt; The best I can offer in terms of documentation is the pdfs in the documents<br>
&gt; &gt; section of <a href="http://spice-space.org" target="_blank">spice-space.org</a>, I imagine you are looking for something more,<br>
&gt; &gt; sorry to disappoint.<br>
&gt; &gt;<br>
&gt; &gt; The code you are interested in is server/red_worker.c, but that&#39;s not very<br>
&gt; &gt; helpful since that file is huge. Would be nice to split the video related<br>
&gt; &gt; stuff to a separate file.<br>
&gt; &gt;<br>
&gt; &gt; worker-&gt;streaming_video - determines how we handle streaming video<br>
&gt; &gt;<br>
&gt; &gt; git grep stream -- server/red_worker.c<br>
&gt; &gt;<br>
&gt; &gt; I can give you better pointers if you ask more specific questions, but<br>
&gt; &gt; doing<br>
&gt; &gt; the documentation myself right now.. too much work.<br>
&gt; &gt;<br>
&gt; &gt; overview of what spice does:<br>
&gt; &gt;  * determine if a given draw operation (has to be an opaque copy iirc) is<br>
&gt; &gt;  repeated to the same area.<br>
&gt; &gt;  * if so, starts a mjpeg encoder and sends the stream to the client<br>
&gt; &gt;<br>
&gt; &gt; how to improve this (some is on the Features page in spice-space):<br>
&gt; &gt;  * learn to do various video acceleration apis (windows has it, linux has<br>
&gt; &gt; it)<br>
&gt; &gt;  * this is by far the best way to go regarding performance, unless you are<br>
&gt; &gt;  willing to sacrifice cpu for bandwidth in which case I guess you would<br>
&gt; &gt; reencode.<br>
&gt; &gt;  * otoh this is a pretty large change to multiple parts of spice:<br>
&gt; &gt;   * you need to update the driver for each platform you choose to support,<br>
&gt; &gt; update the protocol, teach server and client<br>
&gt; &gt;  * it&#39;s definitely on the todo list, but no date set.<br>
&gt; &gt;  * replace mjpeg with a different encoder<br>
&gt; &gt;  * if it&#39;s just a better performing encoder, clear win.<br>
&gt; &gt;  * otherwise you get the usual cpu/bw tradeoff.<br>
&gt; &gt;  * or you could try to learn which encoder fits which stream (based on some<br>
&gt; &gt;  metric, could be the performance of the encoders themselves)<br>
&gt; &gt;   * just throwing an idea.<br>
&gt; &gt;<br>
&gt; &gt; Alon<br>
&gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2011/4/11 Alon Levy &lt;<a href="mailto:alevy@redhat.com">alevy@redhat.com</a>&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Mon, Apr 11, 2011 at 03:48:08PM +0200, Andrea Celestino wrote:<br>
&gt; &gt; &gt; &gt; &gt; Hi,<br>
&gt; &gt; &gt; &gt; &gt; I have installed Spice and now I&#39;m trying to use it. I&#39;m interested<br>
&gt; &gt; in<br>
&gt; &gt; &gt; &gt; how<br>
&gt; &gt; &gt; &gt; &gt; spice manage streaming video. I read that there is the option<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; -streaming-video=[all|off|filter]<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Can you explain me the difference between these three option?<br>
&gt; &gt; &gt; &gt; &gt; Which source file read the command line?<br>
&gt; &gt; &gt; &gt; &gt; Why I have tried to play a video in a player but i have not notice<br>
&gt; &gt; any<br>
&gt; &gt; &gt; &gt; &gt; difference between the two options &#39;off&#39; and &#39;filter&#39;?<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Look at<br>
&gt; &gt; <a href="http://cgit.freedesktop.org/spice/spice/tree/server/red_worker.c" target="_blank">http://cgit.freedesktop.org/spice/spice/tree/server/red_worker.c</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; search for STREAM_VIDEO_FILTER<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; The switch toggles modes for creating streams:<br>
&gt; &gt; &gt; &gt;  off - never create<br>
&gt; &gt; &gt; &gt;  all/filter - create either based on smallest size, or just based on<br>
&gt; &gt; &gt; &gt;  number of consecutive opaque copies to same area.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Thanks very much for the help.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; &gt; Spice-devel mailing list<br>
&gt; &gt; &gt; &gt; &gt; <a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.org</a><br>
&gt; &gt; &gt; &gt; &gt; <a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; Spice-devel mailing list<br>
&gt; &gt; &gt; <a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.org</a><br>
&gt; &gt; &gt; <a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a><br>
&gt; &gt;<br>
&gt; &gt;<br>
</div></div></blockquote></div><br></div>