X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=doc%2Fdesign%2Ftiming.tex;h=6cd1ca6891c8dcd7126fd9a642e30b1c067014a0;hb=b0463c6c22d51f6297eea313b429348c3bec3971;hp=45252ea3633db95534a7df53011446d5dc1c194c;hpb=dad4da12a92ea74d340409140bb293441eed9e31;p=dcpomatic.git diff --git a/doc/design/timing.tex b/doc/design/timing.tex index 45252ea36..6cd1ca689 100644 --- a/doc/design/timing.tex +++ b/doc/design/timing.tex @@ -8,7 +8,8 @@ We are trying to implement full-ish playlist based content specification. The t Frame rates of things can vary a lot; content can be in pretty much anything, and DCP video and audio frame rates may change on a whim depending on what is best for a given set of content. This suggests -(albeit without strong justification) the need for a frame-rate-independent unit of time. +(albeit without strong justification) the need for a +frame-rate-independent unit of time. So far we've been using a time type called \texttt{Time} expressed in $\mathtt{TIME\_HZ}^{-1}$; e.g. \texttt{TIME\_HZ} units is 1 second. @@ -37,6 +38,12 @@ scaling video, resampling audio). The resampling is awkward, though, as you really need one resampler per source. So it might make more sense to put stuff in the decoder. But then, what's one map of resamplers between friends? +On the other hand, having the resampler in the player is confusing. Audio comes in +at a frame `position', but then it gets resampled and not all of it may emerge from +the resampler. This means that the position is meaningless, and we want a count +of samples out from the resampler (which can be done more elegantly by the decoder's +\texttt{\_audio\_position}. + \section{Options for what \texttt{Time} is a function of} @@ -55,7 +62,7 @@ I've been trying for a while with \texttt{Time} as a wall-clock I think this is the cause of content being overlapped in this case. -It is tempting to solve this by making Time a subdivsion of DCP video +It is tempting to solve this by making Time a subdivision of DCP video frame rate. This makes things nicer in many ways; you get a 1:1 mapping of content video frames to Time in most cases, but not when video frames are skipped to halve the frame rate, say. In this case @@ -68,4 +75,20 @@ will obviate the need for things to be recalculated when DCP rate changes. On the plus side, lengths in \texttt{Time} are computed on-demand from lengths kept as source frames. + +\section{More musings} + +In version 2 things we changed, and a problem appeared. We have / had +\texttt{ContentTime} which is a metric time type, and it is used to +describe video content length (amongst other things). However if we +load a set of TIFFs and then change the frame rate we don't have the +length in frames i order to work out the new rate. + +This suggests that the content lengths, at least, should be described +in frames. Then to get metric lengths you would need to specify a +timecode. + +I will probably have to try a frame-based ContentTime and see what +problems arise. + \end{document}