I have two questions:

> size_t pa_memblockq_get_length(pa_memblockq *bq) {
>     pa_assert(bq);
> 
>     if (bq->write_index <= bq->read_index)
>         return 0;
> 
>     return (size_t) (bq->write_index - bq->read_index);
> }
> 
> So to return 0, the write_index and the read_index are likely equal.

1. Why can the read_index exceed the write index? Does it mean if the sink 
input cannot feed data fast enough (queue underflow), the sink keeps reading 
forward and the "read_index" exceed the "write_index"? This means invalid data 
will be read by the sink.

2. Who can trigger the "Requesting rewind due to rewrite"? The sink or the 
application?
I traced code and found it was triggered by a "SINK_INPUT_MESSAGE_SEEK" 
message, and so the sink input keep seeking forward. But I'm lost in function " 
pstream_memblock_callback" that posts the message? Who can call 
"pstream_memblock_callback" and when?

 static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t 
offset, pa_seek_mode_t seek, const pa_memchunk *chunk, void *userdata) {
       
        if (chunk->memblock) {
            if (seek != PA_SEEK_RELATIVE || offset != 0)
                pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, 
PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_SEEK, PA_UINT_TO_PTR(seek), 
offset, chunk, NULL);
             ...  

Thanks
Amanda
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to