From: James Courtier-D. <Ja...@su...> - 2002-11-30 04:09:05
|
Heiko Schaefer wrote: > > >>What i said is that we need to adjust *either* the audio (resample) or >>the video (framerate) to keep a good playback. >> >> > >uhm - wouldn't resample lead to a change of pitch ? >i think at least in some cases that is even less acceptable than >interruption in audio... (concert videos, music, ...) > >and ac3/dts audio (with passthrough) can't really be resampled, i guess. > > >regards, > >Heiko > > Here is a quick description of what I mean by the "resampling" method. We have the unix system clock (sc) and the audio hardware clock (hc). The sc is always more accurate than the hc. So the aim is to somehow correct the hc so that it matches the sc. When one sends samples to the audio hardware, it plays them out using the hc. Here is an example: - Start both sc and hc clock together. sc hc 0 0 1 1 2 2 (some period of time) 33 34 34 35 35 36 So, after some period of time, the xine audio_out loop will gradually get a "diff" value that increases, until finally xine trys some sort of correction, drops samples, clock feedback corrections etc. The way to correct these slowly diverging clocks is to somehow insert of remove a single extra sample. E.g sc counts 90000 samples time. hc counts 89999 sample time, over this period, we need to resample the samples so that although the sc counts 90000 samples, we only output 89999 samples. So, in this way, the ear cannot tell the difference, but the sound coming out of the speakers is now in sync with the sc and not the hc. The advantage of this method is that video output will then stay accurate, and the audio hardware is just forced to comply without any audible side-effects. This method will help considerably if someone is using TV out, that cannot change the video frame duration at all. I thought of this method some time ago, and I even emailed a patch to the xine-devel list demonstrating it. From a conceptual point of view, I never liked the idea of the Global System clock in xine-lib beign adjusted at all during play. Now, with multiple streams all using the same global system clock, the current feedback method is doomed to failure. So, in summary, the resampling method is only used for very small "diff" values, otherwise the listener will notice big changes in audio frequency. Cheers James |