aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgyunaev <gyunaev@svn>2010-12-31 23:31:12 +0000
committergyunaev <gyunaev@svn>2010-12-31 23:31:12 +0000
commitae199c28cc7570fa78e48ada469a85f2258c56cc (patch)
tree85941d2e43687c81b3a121170fb7f4c1f27f4655
parenta7fbc32987f9ec0f34189be628b1f89c80c3ef31 (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.cpp57
-rw-r--r--xbmc/karaoke/karaokelyricscdg.h8
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