我有一个视频解码器。使用openGL
我使用glfw
库在屏幕上渲染已解码的帧。我必须在解码器解码和渲染帧时显示FPS。我知道如何在屏幕上显示内容。
What i know:
我知道解码每个帧所花费的时间。即我在解码功能和显示功能之前和之后放了一个clock()函数。这就是我知道解码和显示每个帧所需的时间(比如x毫秒)。现在使用这些数据我需要计算视频的FPS并显示它。
What i tried:
Time taken to decode a 1 frame=x milli seconds
How many frames are decoded (y) in 1 second (this is the definition of FPS)
因此,FPS = 1 * 1 /(x * milli)
=> FPS = 1000 / X
因此,对于我使用上述公式计算的每一帧,并显示它。但在验证时我才知道它的错误。谁能告诉我上面的方法有什么问题?我如何实时计算FPS,而我知道解码每一帧的时间?
答案 0 :(得分:1)
一般来说,您使用的方法是正确的方法。它确实假设每个帧花费相同的时间来解码和显示,这可能导致精确的每帧定时的不准确性。解码部分的时间将告诉你解码帧需要多长时间,但除非你包含glFinish
,否则你的OpenGL时序可能不准确,这可以保证OpenGL完成所有OpenGL调用的提交和执行。你打电话给glFinish
。
如果您在解码部分的开头放置clock()
,然后在调用glFinish
后放置另一个,则应获得更准确的时序。每个帧可能需要不同的时间,因此您的FPS可能会波动。此外,如果您正在同步垂直回扫,您的FPS也可能会有所不同,因为您需要等待硬件更新并交换缓冲区。