<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<pre>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.
</pre>
</body>
</html>