From: <onu...@ya...> - 2004-07-05 07:09:12
|
Thanks a lot for the mail. Yes it answers my question. Is there any statistical data on how much time is taken by audio and video decoders (libmad and libmpeg2) for decoding. regards, -onup --- Michael Roitzsch <mr...@us...> wrote: > Hi, > > > I am trying to develop an mpeg application similar > to > > xine. I have basic doubt in the xine design. After > > going through the code I understand that XINE has > 5 > > threads. > > 1. Demultiplexer Thread DMX_THREAD > > 2. Audio Decoder Thread AD_THREAD > > 3. Video Decoder Thread VD_THREAD > > 4. Audio Output Thread AO_THREAD > > 5. Video Output Thread VO_THREAD > > > > DMX_THREAD demultiplexes audio and video contents > and > > buffers it in respective fifos. Audio contents are > > decoded by AD_THREAD and buffered again. Now > AO_THREAD > > takes it and plays it based vpts. Similar is the > case > > for video content. > > > > I want to know what is the necessity of having two > > threads - one for decoding and the other for > ouput. I > > think after decoding, in the decoding thread`s > context > > output can be done based on vpts. > > But someone has to schedule the output. The video > frames have to be sent to > X11 at the exact time they should be displayed. This > is a real time task, > which is already a nightmare on a non-realtime OS > like Linux. But when you > try to do such a thing in the decoder thread, you > will end up with even more > problems, because the decoding time needed per frame > varies significantly > throughout the stream, especially with modern > predictive codecs. Therefore > the logical solution to me is to insert buffering > between decoder and output > to smooth out the varation in the timing of the > decoder's output. Once you > decide that this buffer is necessary, it comes > naturally to have one thread > feeding the buffer (the decoder) and one thread > consuming from the buffer > (the output loop). The output loop can take the data > from the buffer and > convert it into a periodic request stream for the > underlying driver (X11, > alsa, ...). > > Additionally, decoding and output "feel" like two > separate tasks to me, so I > think having two threads also gives a better design > and code which is easier > to maintain. And with kernel 2.6, scheduling > overhead between threads is > quite low. > > Does that answer your question? > > Michael > > -- > /* > * Should be panic but... (Why are BSD people > panic obsessed ??) > */ > 2.0.38 /usr/src/linux/net/ipv4/ip_fw.c > > > ------------------------------------------------------- > This SF.Net email sponsored by Black Hat Briefings & > Training. > Attend Black Hat Briefings & Training, Las Vegas > July 24-29 - > digital self defense, top technical experts, no > vendor pitches, > unmatched networking opportunities. Visit > www.blackhat.com > _______________________________________________ > xine-devel mailing list > xin...@li... > https://lists.sourceforge.net/lists/listinfo/xine-devel ________________________________________________________________________ Yahoo! India Careers: Over 50,000 jobs online Go to: http://yahoo.naukri.com/ |