diff options
author | gyunaev <gyunaev@svn> | 2010-12-31 23:31:12 +0000 |
---|---|---|
committer | gyunaev <gyunaev@svn> | 2010-12-31 23:31:12 +0000 |
commit | ae199c28cc7570fa78e48ada469a85f2258c56cc (patch) | |
tree | 85941d2e43687c81b3a121170fb7f4c1f27f4655 | |
parent | a7fbc32987f9ec0f34189be628b1f89c80c3ef31 (diff) |
Added scroll offsets (still unused) and screen initialization.
git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk@35722 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
-rw-r--r-- | xbmc/karaoke/karaokelyricscdg.cpp | 57 | ||||
-rw-r--r-- | xbmc/karaoke/karaokelyricscdg.h | 8 |
2 files changed, 41 insertions, 24 deletions
diff --git a/xbmc/karaoke/karaokelyricscdg.cpp b/xbmc/karaoke/karaokelyricscdg.cpp index f64fb64b32..261d05284c 100644 --- a/xbmc/karaoke/karaokelyricscdg.cpp +++ b/xbmc/karaoke/karaokelyricscdg.cpp @@ -38,6 +38,10 @@ CKaraokeLyricsCDG::CKaraokeLyricsCDG( const CStdString& cdgFile ) m_streamIdx = -1; m_bgAlpha = 0xff000000; m_fgAlpha = 0xff000000; + m_hOffset = 0; + m_vOffset = 0; + + memset( m_cdgScreen, 0, sizeof(m_cdgScreen) ); } CKaraokeLyricsCDG::~CKaraokeLyricsCDG() @@ -477,6 +481,8 @@ bool CKaraokeLyricsCDG::Load() m_colorTable[i] = 0; m_streamIdx = 0; + m_hOffset = 0; + m_vOffset = 0; if ( buggy_commands == 0 ) CLog::Log( LOGDEBUG, "CDG loader: CDG file %s has been loading successfully, %d useful packets, %dKb used", @@ -518,6 +524,9 @@ void CKaraokeLyricsCDG::cmdScroll( const char * data, bool isloop ) scrollUp( color); break; } + + m_hOffset = scroll->hScroll & 0x07; + m_vOffset = scroll->vScroll & 0x0F; } void CKaraokeLyricsCDG::scrollLeft( int color ) @@ -525,16 +534,16 @@ void CKaraokeLyricsCDG::scrollLeft( int color ) BYTE PixelTemp[CDG_FULL_HEIGHT][CDG_BORDER_WIDTH]; UINT i, j; - for (i = 0;i < CDG_BORDER_WIDTH;i++) - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = 0; i < CDG_BORDER_WIDTH; i++ ) + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) PixelTemp[j][i] = (color == -1 ? getPixel( j, i ) : color); - for (i = 0;i < CDG_FULL_WIDTH - CDG_BORDER_WIDTH;i++) //Fill scrolled area - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = 0; i < CDG_FULL_WIDTH - CDG_BORDER_WIDTH; i++ ) //Fill scrolled area + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, getPixel( j, i + CDG_BORDER_WIDTH ) ); - for (i = CDG_FULL_WIDTH - CDG_BORDER_WIDTH;i < CDG_FULL_WIDTH;i++) //Fill uncovered area - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = CDG_FULL_WIDTH - CDG_BORDER_WIDTH; i < CDG_FULL_WIDTH; i++ ) //Fill uncovered area + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, PixelTemp[j][i + CDG_BORDER_WIDTH - CDG_FULL_WIDTH] ); } @@ -543,16 +552,16 @@ void CKaraokeLyricsCDG::scrollRight( int color ) BYTE PixelTemp[CDG_FULL_HEIGHT][CDG_BORDER_WIDTH]; UINT i, j; - for (i = CDG_FULL_WIDTH - CDG_BORDER_WIDTH;i < CDG_FULL_WIDTH;i++) - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = CDG_FULL_WIDTH - CDG_BORDER_WIDTH; i < CDG_FULL_WIDTH; i++ ) + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) PixelTemp[j][CDG_BORDER_WIDTH - CDG_FULL_WIDTH + i] = (color == -1 ? getPixel( j, i ) : color); - for (i = CDG_BORDER_WIDTH ; i < CDG_FULL_WIDTH ; i++) //Fill scrolled area - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = CDG_BORDER_WIDTH ; i < CDG_FULL_WIDTH; i++ ) + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, getPixel( j, i - CDG_BORDER_WIDTH ) ); - for (i = 0;i < CDG_BORDER_WIDTH;i++) //Fill uncovered area - for (j = 0;j < CDG_FULL_HEIGHT;j++) + for ( i = 0; i < CDG_BORDER_WIDTH; i++ ) //Fill uncovered area + for ( j = 0; j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, PixelTemp[j][i] ); } @@ -561,16 +570,16 @@ void CKaraokeLyricsCDG::scrollUp( int color ) BYTE PixelTemp[CDG_BORDER_HEIGHT][CDG_FULL_WIDTH]; UINT i, j; - for (i = 0;i < CDG_FULL_WIDTH;i++) - for (j = 0 ; j < CDG_BORDER_HEIGHT ;j++) + for ( i = 0; i < CDG_FULL_WIDTH; i++ ) + for ( j = 0 ; j < CDG_BORDER_HEIGHT; j++ ) PixelTemp[j][i] = (color == -1 ? getPixel( j, i ) : color ); - for (i = 0;i < CDG_FULL_WIDTH;i++) //Fill scrolled area - for (j = 0;j < CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT;j++) + for ( i = 0; i < CDG_FULL_WIDTH; i++ ) //Fill scrolled area + for ( j = 0; j < CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT; j++ ) setPixel( j, i, getPixel( j + CDG_BORDER_HEIGHT, i ) ); - for (i = 0;i < CDG_FULL_WIDTH;i++) //Fill uncovered area - for (j = CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT;j < CDG_FULL_HEIGHT;j++) + for ( i = 0; i < CDG_FULL_WIDTH; i++ ) //Fill uncovered area + for ( j = CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT; j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, PixelTemp[CDG_BORDER_HEIGHT - CDG_FULL_HEIGHT + j][i] ); } @@ -579,15 +588,15 @@ void CKaraokeLyricsCDG::scrollDown( int color ) BYTE PixelTemp[CDG_BORDER_HEIGHT][CDG_FULL_WIDTH]; UINT i, j; - for (i = 0;i < CDG_FULL_WIDTH;i++) - for (j = CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT;j < CDG_FULL_HEIGHT;j++) + for ( i = 0; i < CDG_FULL_WIDTH; i++ ) + for ( j = CDG_FULL_HEIGHT - CDG_BORDER_HEIGHT;j < CDG_FULL_HEIGHT; j++ ) PixelTemp[CDG_BORDER_HEIGHT - CDG_FULL_HEIGHT + j][i] = (color == -1 ? getPixel( j, i ) : color ); - for (i = 0;i < CDG_FULL_WIDTH;i++) //Fill scrolled area - for (j = CDG_BORDER_HEIGHT;j < CDG_FULL_HEIGHT;j++) + for (i = 0; i < CDG_FULL_WIDTH; i++ ) //Fill scrolled area + for ( j = CDG_BORDER_HEIGHT;j < CDG_FULL_HEIGHT; j++ ) setPixel( j, i, getPixel( j - CDG_BORDER_HEIGHT, i ) ); - for (i = 0;i < CDG_FULL_WIDTH;i++) //Fill uncovered area - for (j = 0;j < CDG_BORDER_HEIGHT;j++) + for ( i = 0; i < CDG_FULL_WIDTH; i++ ) //Fill uncovered area + for ( j = 0; j < CDG_BORDER_HEIGHT; j++ ) setPixel( j, i, PixelTemp[j][i] ); } diff --git a/xbmc/karaoke/karaokelyricscdg.h b/xbmc/karaoke/karaokelyricscdg.h index fc1b7328ec..ac2bffb9ed 100644 --- a/xbmc/karaoke/karaokelyricscdg.h +++ b/xbmc/karaoke/karaokelyricscdg.h @@ -97,6 +97,14 @@ class CKaraokeLyricsCDG : public CKaraokeLyrics BYTE m_bgColor; //!< Background color index BYTE m_cdgScreen[CDG_FULL_WIDTH*CDG_FULL_HEIGHT]; //!< Image state for CD+G stream + // These values are used to implement screen shifting. The CDG specification allows the entire + // screen to be shifted, up to 5 pixels right and 11 pixels down. This shift is persistent + // until it is reset to a different value. In practice, this is used in conjunction with + // scrolling (which always jumps in integer blocks of 6x12 pixels) to perform + // one-pixel-at-a-time scrolls. + BYTE m_hOffset; + BYTE m_vOffset; + //! Rendering stuff CBaseTexture * m_pCdgTexture; color_t m_bgAlpha; //!< background alpha |