在CAOpenGLLayer渲染方法中给出CVTimeStamp的QTVisualContext的电影时间?

时间:2010-02-04 18:22:58

标签: core-animation quicktime core-video

我正在使用标准CoreVideo Display Link + QTVisualContext将QuickTime影片渲染到NSOpenGLView子类中。我现在想要将时间线视图与电影播放同步。时间轴视图实现为层托管视图,托管呈现时间轴的CAOpenGLLayer子类。我选择了这种架构,因为CAOpenGLLayer获得CVTimeStamp进行渲染。我以为我可以使用这个时间戳从QTVisualContext获取当前的电影时间。

我发现从CVTimeStamp获取电影时间的唯一方法是将QTVisualContext复制到CVImageBuffer(使用QTVisualContextCopyImageForTime),然后从CVImageBuffer的kCVBufferMovieTimeKey附件中检索电影时间。显然,这似乎有点矫枉过正,因为我不需要图像。此外,QTVisualContextCopyImageForTime的文档表明不允许在上一次呼叫之前要求一段时间。由于我不能保证CoreAnimation线程和CoreVideo显示链接线程之间的事件顺序,我已经陷入了死胡同。

似乎CVDisplayLinkTranslateTime应该能够将我在CAOpenGLLayer渲染方法中获得的CVTimeStamp转换为电影时间和电影时基,但我不知道如何将其与此相关联(显示链接)时间到QuickTime电影的时间。我不一定知道电影的时间0是否相对于Display Link电影时间。

那么,有没有办法直接从QTVisualContext(或QTMovie-> QTVisualContext-> Display Link-> ...)路径中的任何其他位置获取CVTimeStamp的电影时间?

0 个答案:

没有答案