From d9265b7b66f9759f72cdeec037e10b09cd44a25e Mon Sep 17 00:00:00 2001 From: Thomas Reufer Date: Thu, 15 Oct 2015 07:29:39 +0200 Subject: don't crop OSD images to pixmap size to allow scaled drawing --- HISTORY | 1 + ovgosd.c | 18 +++++------------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/HISTORY b/HISTORY index 0c887ec..994e370 100644 --- a/HISTORY +++ b/HISTORY @@ -7,6 +7,7 @@ VDR Plugin 'rpihddevice' Revision History - added French translations (thanks to Cyril Jaquier) - added plugin options to specify video and OSD layers - fixed: + - don't crop OSD images to pixmap size to allow scaled drawing - treat zero as valid PTS value - perform save / restore region direct on pixmaps for accelerated OSDs - wait for the OVG thread to be ready when creating an accelerated OSD diff --git a/ovgosd.c b/ovgosd.c index 97f8ab8..7d94a06 100644 --- a/ovgosd.c +++ b/ovgosd.c @@ -1578,14 +1578,8 @@ public: virtual bool Execute(cEgl *egl) { - int w = min((m_x < 0 ? m_w + m_x : m_w), m_target->width); - int h = min((m_y < 0 ? m_h + m_y : m_h), m_target->height); - - int x = m_x < 0 ? 0 : m_x; - int y = m_y < 0 ? 0 : m_y; - - w = min(w, m_target->width - x); - h = min(h, m_target->height - y); + int w = min(m_w, vgGeti(VG_MAX_IMAGE_WIDTH)); + int h = min(m_h, vgGeti(VG_MAX_IMAGE_HEIGHT)); if (w <= 0 || h <= 0) return true; @@ -1600,7 +1594,7 @@ public: vgLoadIdentity(); vgScale(1.0f, -1.0f); - vgTranslate(x, y - m_target->height); + vgTranslate(m_x, m_y - m_target->height); vgScale(m_scaleX, m_scaleY); VGImage image = vgCreateImage(VG_sARGB_8888, w, h, @@ -1612,11 +1606,9 @@ public: return false; } - int offsetX = m_x < 0 ? -m_x : 0; - int offsetY = m_y < 0 ? -m_y : 0; + vgImageSubData(image, m_argb, m_w * sizeof(tColor), + VG_sARGB_8888, 0, 0, w, h); - vgImageSubData(image, m_argb + offsetY * m_w + offsetX, - m_w * sizeof(tColor), VG_sARGB_8888, 0, 0, w, h); vgDrawImage(image); vgDestroyImage(image); -- cgit v1.2.3