Merge branch 'master' into pu/fb-setmode

Fix merge conflict
This commit is contained in:
M. Liebmann
2017-02-14 20:11:08 +01:00
9 changed files with 40 additions and 15 deletions

View File

@@ -131,6 +131,8 @@ class CFbAccelCSHD2
int scaleFont(int size);
bool fullHdAvailable();
void setOsdResolutions();
uint32_t getWidth4FB_HW_ACC(const uint32_t x, const uint32_t w, const bool max=true);
bool needAlign4Blit() { return true; };
};
class CFbAccelGLFB

View File

@@ -299,3 +299,20 @@ bool CFbAccelCSHD2::fullHdAvailable()
return true;
return false;
}
/* align for hw blit */
uint32_t CFbAccelCSHD2::getWidth4FB_HW_ACC(const uint32_t _x, const uint32_t _w, const bool max)
{
uint32_t ret = _w;
if ((_x + ret) >= xRes)
ret = xRes-_x-1;
if (ret%4 == 0)
return ret;
int add = (max) ? 3 : 0;
ret = ((ret + add) / 4) * 4;
if ((_x + ret) >= xRes)
ret -= 4;
return ret;
}

View File

@@ -48,7 +48,6 @@
#include <gui/color.h>
#include <gui/pictureviewer.h>
#include <system/debug.h>
#include <system/helpers.h>
#include <global.h>
#include <video.h>
#include <cs_api.h>
@@ -527,7 +526,7 @@ fb_pixel_t* CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, co
#ifdef BOXMODEL_CS_HD2
if (_dx%4 != 0) {
w_align = GetWidth4FB_HW_ACC(x, _dx, true);
w_align = getWidth4FB_HW_ACC(x, _dx, true);
if (w_align < _dx)
_dx = w_align;
offs_align = w_align - _dx;
@@ -1783,3 +1782,8 @@ bool CFrameBuffer::_checkFbArea(int _x, int _y, int _dx, int _dy, bool prev)
void CFrameBuffer::mark(int , int , int , int )
{
}
uint32_t CFrameBuffer::getWidth4FB_HW_ACC(const uint32_t /*x*/, const uint32_t w, const bool /*max*/)
{
return w;
}

View File

@@ -191,10 +191,10 @@ class CFrameBuffer : public sigc::trackable
bool getActive() const; // is framebuffer active?
void setActive(bool enable); // is framebuffer active?
#ifdef BOXMODEL_CS_HD1
virtual void setupGXA() {};
virtual void add_gxa_sync_marker() {};
#endif
virtual void setupGXA() { return; }; // reinitialize stuff
virtual void add_gxa_sync_marker() { return; };
virtual bool needAlign4Blit() { return false; };
virtual uint32_t getWidth4FB_HW_ACC(const uint32_t x, const uint32_t w, const bool max=true);
void setTransparency( int tr = 0 );
virtual void setBlendMode(uint8_t mode = 1);
@@ -274,7 +274,7 @@ class CFrameBuffer : public sigc::trackable
void* convertRGBA2FB(unsigned char *rgbbuff, unsigned long x, unsigned long y);
void displayRGB(unsigned char *rgbbuff, int x_size, int y_size, int x_pan, int y_pan, int x_offs, int y_offs, bool clearfb = true, int transp = 0xFF);
virtual void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp = 0, uint32_t yp = 0, bool transp = false);
void blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff);
virtual void blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff);
virtual void mark(int x, int y, int dx, int dy);
virtual int scaleFont(int size) { return size; };