-
Martin Storsjö authored
The structure of the decode functions are like this: Decode() { if (got output buffer) { consume output buffer; } wait for input buffer; if (got input buffer) { fill input buffer and send to the codec; } } This makes the functions prone to deadlock, if all input buffers have been consumed and won't be returned by the codec until we consume some of the output buffers (and we don't get the output buffers until we already are waiting for an input buffer). By using a timeout in the wait for input buffers, we get out of the deadlock and can consume an output buffer, allowing the codec to proceed. By making the timeout relatively large, it won't trigger during normal decoding, but gets us out of possible deadlocks (noticed at startup with qualcomm audio decoders). The alternative to timeouts would be to push dummy/sentinel buffers into the fifo (as we already do at reconfiguration) each time we receive an output buffer. This would add quite a bit of overhead though, having to process (and skip) one item in the input buffer fifo for each received output buffer. Signed-off-by: Martin Storsjö <martin@martin.st>
bbf8c217