From: Michael R. <mr...@us...> - 2006-01-18 19:23:58
|
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. > > demuxers do not have to be changed at all. > The fifos will change a bit because buffers will be managed by the > buffer/cache pool. Btw, the xine arch design picture shows only one > buffer pool, and that's what i would like to do. So there is still going to be a fifo between demuxer and decoder. I think I got it now. This should work unless demuxers do some strange locking (because they are called by two separate threads now). > I keep the 2 fifos and the 2 decoder threads. I propose to remove the > demuxer thread because IMHO the buffer/cache thread will make it > useless. Maybe we could design this in a threading-independent way, so that all components we write now can be reused with different threading policies. > Miguel's profiling showed that more than 90% (i don't remember the > exact number) of the time is inside decoders and really little time in > the demuxer, so moving the demuxing task to the decoder threads should > not have any impact. I too believe we will not see a performance impact here. Michael |