drm: make frame duration time calculation more precise
It is a bit more precise to compute the total number of pixels first and then divide, rather than multiplying the line pixel count by the already-rounded line duration. Signed-off-by: Daniel Kurtz <djkurtz@chromium.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
committed by
Dave Airlie
parent
dd66cc2e1f
commit
85a7ce67f3
@@ -505,6 +505,7 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc)
|
|||||||
|
|
||||||
/* Valid dotclock? */
|
/* Valid dotclock? */
|
||||||
if (dotclock > 0) {
|
if (dotclock > 0) {
|
||||||
|
int frame_size;
|
||||||
/* Convert scanline length in pixels and video dot clock to
|
/* Convert scanline length in pixels and video dot clock to
|
||||||
* line duration, frame duration and pixel duration in
|
* line duration, frame duration and pixel duration in
|
||||||
* nanoseconds:
|
* nanoseconds:
|
||||||
@@ -512,7 +513,10 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc)
|
|||||||
pixeldur_ns = (s64) div64_u64(1000000000, dotclock);
|
pixeldur_ns = (s64) div64_u64(1000000000, dotclock);
|
||||||
linedur_ns = (s64) div64_u64(((u64) crtc->hwmode.crtc_htotal *
|
linedur_ns = (s64) div64_u64(((u64) crtc->hwmode.crtc_htotal *
|
||||||
1000000000), dotclock);
|
1000000000), dotclock);
|
||||||
framedur_ns = (s64) crtc->hwmode.crtc_vtotal * linedur_ns;
|
frame_size = crtc->hwmode.crtc_htotal *
|
||||||
|
crtc->hwmode.crtc_vtotal;
|
||||||
|
framedur_ns = (s64) div64_u64((u64) frame_size * 1000000000,
|
||||||
|
dotclock);
|
||||||
} else
|
} else
|
||||||
DRM_ERROR("crtc %d: Can't calculate constants, dotclock = 0!\n",
|
DRM_ERROR("crtc %d: Can't calculate constants, dotclock = 0!\n",
|
||||||
crtc->base.id);
|
crtc->base.id);
|
||||||
|
Reference in New Issue
Block a user