<div>&nbsp;Hi Wim,<br><br>Now I trying to make this audio (even video later)working, and I find it does a lot of things in osssink using baseaudiosink, audiosink, ringbuffer things. Can I get a simple osssink working ?<br><br>I just tried "gst-launch-0.10 audiotestsrc ! filesink location="/dev/sound/dsp"  "  it's working and  somehow  better than the osssink, although still some silence fragment included. <br><br>And how to find where the bottlenecks are ?<br><br>BR<br>Joyious <br></div><div>&nbsp;</div><div>&nbsp;</div><div ></div><br>在2007-09-28,"Wim Taymans" &lt;wim.taymans@gmail.com&gt; 写道:<br> <blockquote id="isReplyContent" style="border-left: 1px solid rgb(204, 204, 204); margin: 0px 0px 0px 0.8ex; padding-left: 1ex;"><pre>On Fri, 2007-09-28 at 19:54 +0800, Joyious He wrote:
&gt;  
&gt;  Hi all,
&gt; 
&gt; Here I have some questions for gstreamer audiosink:
&gt; 
&gt; I'm using the osssink on my arm board, and no sound came out
&gt; command:gst-launch -v audiotestsrc ! audioconvert ! audioresample !
&gt; osssink
&gt; 
&gt; I checked the source code and the debug info, then find the ringbuffer
&gt; writer is some slower than the reader. 
&gt; see the debug info:
&gt; ......
&gt; 0:00:08.656034000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:848:gst_base_audio_sink_render:&lt;osssink0&gt; align
&gt; with prev sample, 25 &lt; 24000
&gt; 0:00:08.656789000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:880:gst_base_audio_sink_render:&lt;osssink0&gt; rendering
&gt; at 78822 1024/1024
&gt; 0:00:08.657666000 1491 0x3e030 DEBUG ringbuffer
&gt; gstringbuffer.c:1362:gst_ring_buffer_commit_full: pointer at 19, write
&gt; to 4-26572, diff -15, segtotal 3, segsize 32768
&gt; 0:00:08.658613000 1491 0x3e030 DEBUG ringbuffer
&gt; gstringbuffer.c:1394:gst_ring_buffer_commit_full:&lt;audiosinkringbuffer0&gt; write @0x4069e008 seg 1, sps 16384, off 26572, avail 2048
&gt; 0:00:08.659525000 1491 0x3e030 DEBUG ringbuffer
&gt; gstringbuffer.c:1398:gst_ring_buffer_commit_full: copy 2048 bytes
&gt; 0:00:08.660592000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:895:gst_base_audio_sink_render:&lt;osssink0&gt; wrote
&gt; 1024 of 1024
&gt; 0:00:08.661479000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:911:gst_base_audio_sink_render:&lt;osssink0&gt; next
&gt; sample expected at 79846
&gt; 0:00:08.738888000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:669:gst_base_audio_sink_render:&lt;osssink0&gt; time
&gt; 0:00:01.664000000, offset 79872, start 0:00:00.000000000, samples 1024
&gt; 0:00:08.740013000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:738:gst_base_audio_sink_render:&lt;osssink0&gt; running:
&gt; start 0:00:01.664000000 - stop 0:00:01.685333333
&gt; 0:00:08.741028000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:743:gst_base_audio_sink_render:&lt;osssink0&gt; base_time
&gt; 0:00:00.000000000
&gt; 0:00:08.741940000 1491 0x3e030 DEBUG baseaudiosink
&gt; gstbaseaudiosink.c:752:gst_base_audio_sink_render:&lt;osssink0&gt;
&gt; compensating for latency 0:00:00.000000000
&gt; ...... 
&gt; since the diff &lt; 0,so the data copying is skipped;
&gt; 
&gt; I change this behavior to copying the data anyway:
&gt; /* segment too far ahead, writer too slow, we need to drop, hopefully
&gt; UNLIKELY */
&gt; if (G_UNLIKELY (diff &lt; 0)) {
&gt; /* we need to drop one segment at a time, pretend we wrote a
&gt; * segment. */
&gt; // skip = TRUE;
&gt; skip = FALSE; //test
&gt; break;
&gt; }
&gt; 
&gt; Now the sound comes out,but it's not continous.
&gt; 
&gt; So I wonder the reason, is my hardware or the ringbuffer thread read
&gt; the data faster than my ringbuffer writer ? is this
&gt; gst_ring_buffer_prepare_read() keep running without waiting the buffer
&gt; writer to input some datas ?
&gt; 
&gt; As I also saw the design-audiosinks.txt, it says:
&gt; A write operation to the ringbuffer will put new samples in the
&gt; ringbuffer.
&gt; If there is not enough space in the ringbuffer, the write operation
&gt; will 
&gt; block. The playback of the buffer never stops, even if the buffer is 
&gt; empty. When the buffer is empty, silence is played by the device.
&gt; 
&gt; 
&gt; Now how can I solve this problem ? To make the playback wait for the
&gt; data writer ? Or to make the data write fast enough ? BTW, the
&gt; Gstreamer is taking up almost 99% CPU of my arm board.
&gt; 

You don't have enough CPU power to play this pipeline in real time. The
audiosink will by default not play audio that is too late. I would
suggest to optimize the decoders on the board or if it's not the
decoders, use a profiler to figure out where the bottlenecks are. 

Wim

&gt; Hope you can help me to answer these questions.
&gt; 
&gt; 
&gt; Many Thanks,
&gt; Joyious
&gt;  
&gt;  
&gt; 
&gt; 
&gt; 
&gt; ______________________________________________________________________
&gt; 杀70万种木马病毒,瑞星2008版免费
&gt; -------------------------------------------------------------------------
&gt; This SF.net email is sponsored by: Microsoft
&gt; Defy all challenges. Microsoft(R) Visual Studio 2005.
&gt; http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
&gt; _______________________________________________ gstreamer-devel mailing list gstreamer-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

</pre></blockquote><br><!-- footer --><br> 
<hr>
<font style="font-size:12px;line-height:15px;">杀70万种木马病毒,</font><a style="font-size:12px;line-height:15px; color:blue; text-decoration:underline;" href="http://pro.163.com/event.ng/Type=click&FlightID=96648&AdID=98138&TargetID=635&Values=31,43,51,60,72,82,91,100,110,312,330,332,499,587,702,733,734&Redirect=http://ad.cn.doubleclick.net/clk;134682177;20226578;k%3Fhttp://www.rising.com.cn/2008/trial/index.htm">瑞星2008版免费</a>