Hi Tanu, the first diagram should look like this: DIAGRAM FOR HARDWARE SINK 1 BEFORE STARTING THE MOVE +---------------------------------------------------------------------------------+----- | client stream memblockq | +---------------------------------------------------------------------------------+----- ^ read index +------------------------------------------------------------+--------------------+----- | client history_queue | queue length | +------------------------------------------------------------+--------------------+----- ^ read index ^write index +------------------------------+ | data in the client resampler | +------------------------------+ +--------------------------------------------------+ | client render_memblockq | queue length | +--------------------------------------------------+ ^ read index ^ write index ----------------------------+ | dma buffer | ----------------------------+ ^ hardware playback position, can't rewind beyond this point This is why I do not need to take the render memblockq length into account when rewinding the history queue. (When rewinding during a volume change, the history queue is also rewound by the same amount as the render memblockq plus the data in the resampler. Then the resampler bit is fed back into the resampler.) The third diagram is correct again, before finishing the move, the read pointers are out of sync and will be re-synchronized when pa_sink_input_drop() is called the next time during FINISH_MOVE. |
_______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss