mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-20 19:21:46 +00:00
VIDEO: Prefer getBasePtr over direct Surface::pixels access.
This commit is contained in:
parent
b7706acb41
commit
6fce92b0ea
@ -298,7 +298,7 @@ Graphics::Surface *CDToonsDecoder::decodeImage(Common::SeekableReadStream *strea
|
||||
for (uint i = 0; i < actions.size(); i++) {
|
||||
CDToonsAction &action = actions[i];
|
||||
if (i == 0 && action.blockId == 0)
|
||||
memset(_surface->pixels, backgroundColor, _surface->w * _surface->h);
|
||||
memset(_surface->getBasePtr(0, 0), backgroundColor, _surface->w * _surface->h);
|
||||
if (!_blocks.contains(action.blockId))
|
||||
continue;
|
||||
if (!action.rect.right)
|
||||
|
@ -41,11 +41,11 @@ namespace Video {
|
||||
byte b = _clipTable[lum + (u << 1)]; \
|
||||
\
|
||||
if (_pixelFormat.bytesPerPixel == 2) \
|
||||
*((uint16 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
*((uint16 *)_curFrame.surface->getBasePtr(0, 0) + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
else \
|
||||
*((uint32 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
*((uint32 *)_curFrame.surface->getBasePtr(0, 0) + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
} else \
|
||||
*((byte *)_curFrame.surface->pixels + offset) = lum
|
||||
*((byte *)_curFrame.surface->getBasePtr(0, 0) + offset) = lum
|
||||
|
||||
CinepakDecoder::CinepakDecoder(int bitsPerPixel) : Codec() {
|
||||
_curFrame.surface = NULL;
|
||||
|
@ -53,7 +53,7 @@ void MSRLEDecoder::decode8(Common::SeekableReadStream *stream) {
|
||||
int x = 0;
|
||||
int y = _surface->h - 1;
|
||||
|
||||
byte *data = (byte *) _surface->pixels;
|
||||
byte *data = (byte *) _surface->getBasePtr(0, 0);
|
||||
uint16 width = _surface->w;
|
||||
uint16 height = _surface->h;
|
||||
|
||||
|
@ -48,7 +48,7 @@ MSVideo1Decoder::~MSVideo1Decoder() {
|
||||
|
||||
void MSVideo1Decoder::decode8(Common::SeekableReadStream *stream) {
|
||||
byte colors[8];
|
||||
byte *pixels = (byte *)_surface->pixels;
|
||||
byte *pixels = (byte *)_surface->getBasePtr(0, 0);
|
||||
uint16 stride = _surface->w;
|
||||
|
||||
int skipBlocks = 0;
|
||||
|
@ -61,7 +61,7 @@ QTRLEDecoder::QTRLEDecoder(uint16 width, uint16 height, byte bitsPerPixel) : Cod
|
||||
|
||||
void QTRLEDecoder::decode1(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange) {
|
||||
uint32 pixelPtr = 0;
|
||||
byte *rgb = (byte *)_surface->pixels;
|
||||
byte *rgb = (byte *)_surface->getBasePtr(0, 0);
|
||||
|
||||
while (linesToChange) {
|
||||
CHECK_STREAM_PTR(2);
|
||||
@ -105,7 +105,7 @@ void QTRLEDecoder::decode1(Common::SeekableReadStream *stream, uint32 rowPtr, ui
|
||||
|
||||
void QTRLEDecoder::decode2_4(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange, byte bpp) {
|
||||
uint32 pixelPtr = 0;
|
||||
byte *rgb = (byte *)_surface->pixels;
|
||||
byte *rgb = (byte *)_surface->getBasePtr(0, 0);
|
||||
byte numPixels = (bpp == 4) ? 8 : 16;
|
||||
|
||||
while (linesToChange--) {
|
||||
@ -165,7 +165,7 @@ void QTRLEDecoder::decode2_4(Common::SeekableReadStream *stream, uint32 rowPtr,
|
||||
|
||||
void QTRLEDecoder::decode8(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange) {
|
||||
uint32 pixelPtr = 0;
|
||||
byte *rgb = (byte *)_surface->pixels;
|
||||
byte *rgb = (byte *)_surface->getBasePtr(0, 0);
|
||||
|
||||
while (linesToChange--) {
|
||||
CHECK_STREAM_PTR(2);
|
||||
@ -210,7 +210,7 @@ void QTRLEDecoder::decode8(Common::SeekableReadStream *stream, uint32 rowPtr, ui
|
||||
|
||||
void QTRLEDecoder::decode16(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange) {
|
||||
uint32 pixelPtr = 0;
|
||||
uint16 *rgb = (uint16 *)_surface->pixels;
|
||||
uint16 *rgb = (uint16 *)_surface->getBasePtr(0, 0);
|
||||
|
||||
while (linesToChange--) {
|
||||
CHECK_STREAM_PTR(2);
|
||||
@ -248,7 +248,7 @@ void QTRLEDecoder::decode16(Common::SeekableReadStream *stream, uint32 rowPtr, u
|
||||
|
||||
void QTRLEDecoder::decode24(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange) {
|
||||
uint32 pixelPtr = 0;
|
||||
uint32 *rgb = (uint32 *)_surface->pixels;
|
||||
uint32 *rgb = (uint32 *)_surface->getBasePtr(0, 0);
|
||||
|
||||
while (linesToChange--) {
|
||||
CHECK_STREAM_PTR(2);
|
||||
@ -294,7 +294,7 @@ void QTRLEDecoder::decode24(Common::SeekableReadStream *stream, uint32 rowPtr, u
|
||||
|
||||
void QTRLEDecoder::decode32(Common::SeekableReadStream *stream, uint32 rowPtr, uint32 linesToChange) {
|
||||
uint32 pixelPtr = 0;
|
||||
uint32 *rgb = (uint32 *)_surface->pixels;
|
||||
uint32 *rgb = (uint32 *)_surface->getBasePtr(0, 0);
|
||||
|
||||
while (linesToChange--) {
|
||||
CHECK_STREAM_PTR(2);
|
||||
|
@ -58,7 +58,7 @@ RPZADecoder::~RPZADecoder() {
|
||||
|
||||
#define PUT_PIXEL(color) \
|
||||
if ((int32)blockPtr < _surface->w * _surface->h) \
|
||||
WRITE_UINT16((uint16 *)_surface->pixels + blockPtr, color); \
|
||||
WRITE_UINT16((uint16 *)_surface->getBasePtr(0, 0) + blockPtr, color); \
|
||||
blockPtr++
|
||||
|
||||
const Graphics::Surface *RPZADecoder::decodeImage(Common::SeekableReadStream *stream) {
|
||||
|
@ -56,7 +56,7 @@ SMCDecoder::~SMCDecoder() {
|
||||
}
|
||||
|
||||
const Graphics::Surface *SMCDecoder::decodeImage(Common::SeekableReadStream *stream) {
|
||||
byte *pixels = (byte *)_surface->pixels;
|
||||
byte *pixels = (byte *)_surface->getBasePtr(0, 0);
|
||||
|
||||
uint32 numBlocks = 0;
|
||||
uint32 colorFlags = 0;
|
||||
|
@ -122,7 +122,7 @@ const Graphics::Surface *CoktelDecoder::getSurface() const {
|
||||
}
|
||||
|
||||
bool CoktelDecoder::hasSurface() {
|
||||
return _surface.pixels != 0;
|
||||
return _surface.getBasePtr(0, 0);
|
||||
}
|
||||
|
||||
void CoktelDecoder::createSurface() {
|
||||
@ -473,7 +473,7 @@ void CoktelDecoder::renderBlockWhole(Graphics::Surface &dstSurf, const byte *src
|
||||
|
||||
rect.clip(dstSurf.w, dstSurf.h);
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left * dstSurf.format.bytesPerPixel;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
memcpy(dst, src, rect.width() * dstSurf.format.bytesPerPixel);
|
||||
|
||||
@ -488,7 +488,7 @@ void CoktelDecoder::renderBlockWhole4X(Graphics::Surface &dstSurf, const byte *s
|
||||
|
||||
rect.clip(dstSurf.w, dstSurf.h);
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
byte *dstRow = dst;
|
||||
const byte *srcRow = src;
|
||||
@ -515,7 +515,7 @@ void CoktelDecoder::renderBlockWhole2Y(Graphics::Surface &dstSurf, const byte *s
|
||||
|
||||
int16 height = rect.height();
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
while (height > 1) {
|
||||
memcpy(dst , src, rect.width());
|
||||
memcpy(dst + dstSurf.pitch, src, rect.width());
|
||||
@ -535,7 +535,7 @@ void CoktelDecoder::renderBlockSparse(Graphics::Surface &dstSurf, const byte *sr
|
||||
|
||||
rect.clip(dstSurf.w, dstSurf.h);
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
byte *dstRow = dst;
|
||||
int16 pixWritten = 0;
|
||||
@ -572,7 +572,7 @@ void CoktelDecoder::renderBlockSparse2Y(Graphics::Surface &dstSurf, const byte *
|
||||
|
||||
rect.clip(dstSurf.w, dstSurf.h);
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
for (int i = 0; i < rect.height(); i += 2) {
|
||||
byte *dstRow = dst;
|
||||
int16 pixWritten = 0;
|
||||
@ -604,7 +604,7 @@ void CoktelDecoder::renderBlockRLE(Graphics::Surface &dstSurf, const byte *src,
|
||||
|
||||
rect.clip(dstSurf.w, dstSurf.h);
|
||||
|
||||
byte *dst = (byte *)dstSurf.pixels + (rect.top * dstSurf.pitch) + rect.left;
|
||||
byte *dst = (byte *)dstSurf.getBasePtr(rect.left, rect.top);
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
byte *dstRow = dst;
|
||||
int16 pixWritten = 0;
|
||||
@ -865,7 +865,7 @@ void PreIMDDecoder::renderFrame() {
|
||||
uint16 h = CLIP<int32>(_surface.h - _y, 0, _height);
|
||||
|
||||
const byte *src = _videoBuffer;
|
||||
byte *dst = (byte *)_surface.pixels + (_y * _surface.pitch) + _x;
|
||||
byte *dst = (byte *)_surface.getBasePtr(_x, _y);
|
||||
|
||||
uint32 frameDataSize = _videoBufferSize;
|
||||
|
||||
@ -1458,7 +1458,7 @@ bool IMDDecoder::renderFrame(Common::Rect &rect) {
|
||||
const int offsetY = (_y + rect.top) * _surface.pitch;
|
||||
const int offset = offsetX + offsetY;
|
||||
|
||||
if (deLZ77((byte *)_surface.pixels + offset, dataPtr, dataSize,
|
||||
if (deLZ77((byte *)_surface.getBasePtr(0, 0) + offset, dataPtr, dataSize,
|
||||
_surface.w * _surface.h * _surface.format.bytesPerPixel - offset))
|
||||
return true;
|
||||
}
|
||||
@ -2277,7 +2277,7 @@ bool VMDDecoder::renderFrame(Common::Rect &rect) {
|
||||
rect = Common::Rect(_x, _y, _x + codecSurf->w, _y + codecSurf->h);
|
||||
rect.clip(Common::Rect(_x, _y, _x + _width, _y + _height));
|
||||
|
||||
renderBlockWhole(_surface, (const byte *) codecSurf->pixels, rect);
|
||||
renderBlockWhole(_surface, (const byte *)codecSurf->getBasePtr(0, 0), rect);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2298,7 +2298,7 @@ bool VMDDecoder::renderFrame(Common::Rect &rect) {
|
||||
const int offsetY = (_y + rect.top) * _surface.pitch;
|
||||
const int offset = offsetX + offsetY;
|
||||
|
||||
if (deLZ77((byte *)_surface.pixels + offset, dataPtr, dataSize,
|
||||
if (deLZ77((byte *)_surface.getBasePtr(0, 0) + offset, dataPtr, dataSize,
|
||||
_surface.w * _surface.h * _surface.format.bytesPerPixel - offset))
|
||||
return true;
|
||||
}
|
||||
@ -2406,10 +2406,8 @@ void VMDDecoder::blit16(const Graphics::Surface &srcSurf, Common::Rect &rect) {
|
||||
|
||||
Graphics::PixelFormat pixelFormat = getPixelFormat();
|
||||
|
||||
const byte *src = (byte *)srcSurf.pixels +
|
||||
(srcRect.top * srcSurf.pitch) + srcRect.left * _bytesPerPixel;
|
||||
byte *dst = (byte *)_surface.pixels +
|
||||
((_y + rect.top) * _surface.pitch) + (_x + rect.left) * _surface.format.bytesPerPixel;
|
||||
const byte *src = (const byte *)srcSurf.getBasePtr(srcRect.left, srcRect.top);
|
||||
byte *dst = (byte *)_surface.getBasePtr(_x + rect.left, _y + rect.top);
|
||||
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
const byte *srcRow = src;
|
||||
@ -2446,10 +2444,8 @@ void VMDDecoder::blit24(const Graphics::Surface &srcSurf, Common::Rect &rect) {
|
||||
|
||||
Graphics::PixelFormat pixelFormat = getPixelFormat();
|
||||
|
||||
const byte *src = (byte *)srcSurf.pixels +
|
||||
(srcRect.top * srcSurf.pitch) + srcRect.left * _bytesPerPixel;
|
||||
byte *dst = (byte *)_surface.pixels +
|
||||
((_y + rect.top) * _surface.pitch) + (_x + rect.left) * _surface.format.bytesPerPixel;
|
||||
const byte *src = (const byte *)srcSurf.getBasePtr(srcRect.left, srcRect.top);
|
||||
byte *dst = (byte *)_surface.getBasePtr(_x + rect.left, _y + rect.top);
|
||||
|
||||
for (int i = 0; i < rect.height(); i++) {
|
||||
const byte *srcRow = src;
|
||||
|
@ -244,7 +244,7 @@ void FlicDecoder::FlicVideoTrack::copyDirtyRectsToBuffer(uint8 *dst, uint pitch)
|
||||
for (Common::List<Common::Rect>::const_iterator it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
|
||||
for (int y = (*it).top; y < (*it).bottom; ++y) {
|
||||
const int x = (*it).left;
|
||||
memcpy(dst + y * pitch + x, (byte *)_surface->pixels + y * getWidth() + x, (*it).right - x);
|
||||
memcpy(dst + y * pitch + x, (byte *)_surface->getBasePtr(x, y), (*it).right - x);
|
||||
}
|
||||
}
|
||||
|
||||
@ -252,7 +252,7 @@ void FlicDecoder::FlicVideoTrack::copyDirtyRectsToBuffer(uint8 *dst, uint pitch)
|
||||
}
|
||||
|
||||
void FlicDecoder::FlicVideoTrack::copyFrame(uint8 *data) {
|
||||
memcpy((byte *)_surface->pixels, data, getWidth() * getHeight());
|
||||
memcpy((byte *)_surface->getBasePtr(0, 0), data, getWidth() * getHeight());
|
||||
|
||||
// Redraw
|
||||
_dirtyRects.clear();
|
||||
@ -260,8 +260,8 @@ void FlicDecoder::FlicVideoTrack::copyFrame(uint8 *data) {
|
||||
}
|
||||
|
||||
void FlicDecoder::FlicVideoTrack::decodeByteRun(uint8 *data) {
|
||||
byte *ptr = (byte *)_surface->pixels;
|
||||
while ((int32)(ptr - (byte *)_surface->pixels) < (getWidth() * getHeight())) {
|
||||
byte *ptr = (byte *)_surface->getBasePtr(0, 0);
|
||||
while ((int32)(ptr - (byte *)_surface->getBasePtr(0, 0)) < (getWidth() * getHeight())) {
|
||||
int chunks = *data++;
|
||||
while (chunks--) {
|
||||
int count = (int8)*data++;
|
||||
@ -305,7 +305,7 @@ void FlicDecoder::FlicVideoTrack::decodeDeltaFLC(uint8 *data) {
|
||||
case OP_UNDEFINED:
|
||||
break;
|
||||
case OP_LASTPIXEL:
|
||||
*((byte *)_surface->pixels + currentLine * getWidth() + getWidth() - 1) = (opcode & 0xFF);
|
||||
*((byte *)_surface->getBasePtr(getWidth() - 1, currentLine)) = (opcode & 0xFF);
|
||||
_dirtyRects.push_back(Common::Rect(getWidth() - 1, currentLine, getWidth(), currentLine + 1));
|
||||
break;
|
||||
case OP_LINESKIPCOUNT:
|
||||
@ -321,14 +321,14 @@ void FlicDecoder::FlicVideoTrack::decodeDeltaFLC(uint8 *data) {
|
||||
column += *data++;
|
||||
int rleCount = (int8)*data++;
|
||||
if (rleCount > 0) {
|
||||
memcpy((byte *)_surface->pixels + (currentLine * getWidth()) + column, data, rleCount * 2);
|
||||
memcpy((byte *)_surface->getBasePtr(column, currentLine), data, rleCount * 2);
|
||||
data += rleCount * 2;
|
||||
_dirtyRects.push_back(Common::Rect(column, currentLine, column + rleCount * 2, currentLine + 1));
|
||||
} else if (rleCount < 0) {
|
||||
rleCount = -rleCount;
|
||||
uint16 dataWord = READ_UINT16(data); data += 2;
|
||||
for (int i = 0; i < rleCount; ++i) {
|
||||
WRITE_UINT16((byte *)_surface->pixels + currentLine * getWidth() + column + i * 2, dataWord);
|
||||
WRITE_UINT16((byte *)_surface->getBasePtr(column + i * 2, currentLine), dataWord);
|
||||
}
|
||||
_dirtyRects.push_back(Common::Rect(column, currentLine, column + rleCount * 2, currentLine + 1));
|
||||
} else { // End of cutscene ?
|
||||
|
@ -580,7 +580,7 @@ void SmackerDecoder::SmackerVideoTrack::decodeFrame(Common::BitStream &bs) {
|
||||
while (run-- && block < blocks) {
|
||||
clr = _MClrTree->getCode(bs);
|
||||
map = _MMapTree->getCode(bs);
|
||||
out = (byte *)_surface->pixels + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
out = (byte *)_surface->getBasePtr(0, 0) + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
hi = clr >> 8;
|
||||
lo = clr & 0xff;
|
||||
for (i = 0; i < 4; i++) {
|
||||
@ -613,7 +613,7 @@ void SmackerDecoder::SmackerVideoTrack::decodeFrame(Common::BitStream &bs) {
|
||||
}
|
||||
|
||||
while (run-- && block < blocks) {
|
||||
out = (byte *)_surface->pixels + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
out = (byte *)_surface->getBasePtr(0, 0) + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
switch (mode) {
|
||||
case 0:
|
||||
for (i = 0; i < 4; ++i) {
|
||||
@ -679,7 +679,7 @@ void SmackerDecoder::SmackerVideoTrack::decodeFrame(Common::BitStream &bs) {
|
||||
uint32 col;
|
||||
mode = type >> 8;
|
||||
while (run-- && block < blocks) {
|
||||
out = (byte *)_surface->pixels + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
out = (byte *)_surface->getBasePtr(0, 0) + (block / bw) * (stride * 4 * doubleY) + (block % bw) * 4;
|
||||
col = mode * 0x01010101;
|
||||
for (i = 0; i < 4 * doubleY; ++i) {
|
||||
out[0] = out[1] = out[2] = out[3] = col;
|
||||
|
Loading…
x
Reference in New Issue
Block a user