From: Thibaut M. <thi...@gm...> - 2006-01-19 17:18:19
|
On 1/19/06, James Courtier-Dutton <Jam...@lo...> wro= te: > Michael Roitzsch wrote: > > Hi Thibaut, > > > >>> But what if the audio decoder calls the demuxer, but the next block > >>> the demuxer emits is video data? Where do you store that? > >> > >> maybe some pseudo code would be clearer than my explanations. > >> audio decoder thread : > >> ------- > >> while (true) do > >> while audio fifo is empty do > >> call the demuxer > >> (the demuxer put data into the video fifo or into the audio fifo= ) > >> done > >> get a buffer from the audio fifo > >> decode this buffer > >> done > >> ------- > >> and the same algorithm for the video decoder loop. > >> > How about taking this one step further and use a stream callback approach= . > One thread for the audio_out callback. > One thread for the video_out callback. What if the next frame takes more time to decode than the current frame duration ? > If either of these threads need more data, they make callbacks along the > chain until they get to the input data. Or...Instead of a callback > chain, one could instead have a stream layer, and a separate > stream-control layer. The audio or video callback would then inform the > stream_control layer that it needs more data, and the stream-control > layer would then control the read-cache input plugins to retrieve the > required data. This stream-control layer would work particularly well > with DVD playing and seeking functions. > So, the stream layer would have input, demuxer, decoders, post and > output. The control layer would have links into every stream layer > module, controlling it. For example, there are two types of seek: > a) User just clicking on a slider. (Requires stream of be flushed each > time, and the buffers between input and output must be as short as possib= le) > b) Fast forward/Rewind. (Do not want the stream to be flushed, but > instead requires the input plugin to read X bytes, seek to position Y, > read X more bytes, seek to next position, read X more bytes etc. Buffers > between input and output can be long if needed.) > The stream-control-layer would then be able to finely control all the > different stream layers to achieve these two types of seek. I agree that we need a control layer, currently the "control" logic is a bit scattered everywhere. I guess you know this paper, i think there is some interesting ideas : http://www.le-hacker.org/papers/multimedia/multimedia.html i do not agree with everything like the one thread per node policy, but it shows well why our current dvd playback is not optimal. > James Thibaut |