[Scummvm-git-logs] scummvm master -> 748a7f2fcf95582ce84fa88ca01b6a6c7a099ffb
bluegr
noreply at scummvm.org
Sun Mar 9 15:29:28 UTC 2025
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
95f4741f93 VIDEO: Use palette class in AVI decoder
22c34f1f72 VIDEO: Use palette class in QuickTIme decoder
29e2b1017c VIDEO: Use palette class in Smacker decoder
748a7f2fcf VIDEO: Use palette class in HNM decoder
Commit: 95f4741f93239dbf5e60f9efa9096dc2334c1c15
https://github.com/scummvm/scummvm/commit/95f4741f93239dbf5e60f9efa9096dc2334c1c15
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-03-09T17:29:24+02:00
Commit Message:
VIDEO: Use palette class in AVI decoder
Changed paths:
video/avi_decoder.cpp
video/avi_decoder.h
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index 61d4c1595ed..fe1616c1b99 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -951,7 +951,7 @@ VideoDecoder::AudioTrack *AVIDecoder::getAudioTrack(int index) {
}
AVIDecoder::AVIVideoTrack::AVIVideoTrack(int frameCount, const AVIStreamHeader &streamHeader, const BitmapInfoHeader &bitmapInfoHeader, byte *initialPalette, Image::CodecAccuracy accuracy)
- : _frameCount(frameCount), _vidsHeader(streamHeader), _bmInfo(bitmapInfoHeader), _initialPalette(initialPalette), _accuracy(accuracy) {
+ : _frameCount(frameCount), _vidsHeader(streamHeader), _bmInfo(bitmapInfoHeader), _palette(256), _initialPalette(initialPalette), _accuracy(accuracy) {
_videoCodec = createCodec();
_lastFrame = 0;
_curFrame = -1;
@@ -1002,9 +1002,10 @@ void AVIDecoder::AVIVideoTrack::loadPaletteFromChunkRaw(Common::SeekableReadStre
assert(firstEntry >= 0);
assert(numEntries > 0);
for (uint16 i = firstEntry; i < numEntries + firstEntry; i++) {
- _palette[i * 3] = chunk->readByte();
- _palette[i * 3 + 1] = chunk->readByte();
- _palette[i * 3 + 2] = chunk->readByte();
+ byte r = chunk->readByte();
+ byte g = chunk->readByte();
+ byte b = chunk->readByte();
+ _palette.set(i, r, g, b);
chunk->readByte(); // Flags that don't serve us any purpose
}
_dirtyPalette = true;
@@ -1030,7 +1031,7 @@ void AVIDecoder::AVIVideoTrack::useInitialPalette() {
_dirtyPalette = false;
if (_initialPalette) {
- memcpy(_palette, _initialPalette, sizeof(_palette));
+ _palette.set(_initialPalette, 0, 256);
_dirtyPalette = true;
}
}
@@ -1073,7 +1074,7 @@ const byte *AVIDecoder::AVIVideoTrack::getPalette() const {
return _videoCodec->getPalette();
_dirtyPalette = false;
- return _palette;
+ return _palette.data();
}
bool AVIDecoder::AVIVideoTrack::hasDirtyPalette() const {
diff --git a/video/avi_decoder.h b/video/avi_decoder.h
index b564cd4e678..6ce648e37ba 100644
--- a/video/avi_decoder.h
+++ b/video/avi_decoder.h
@@ -26,6 +26,7 @@
#include "common/rational.h"
#include "common/rect.h"
#include "common/str.h"
+#include "graphics/palette.h"
#include "video/video_decoder.h"
#include "audio/mixer.h"
@@ -270,7 +271,7 @@ protected:
private:
AVIStreamHeader _vidsHeader;
BitmapInfoHeader _bmInfo;
- byte _palette[3 * 256];
+ Graphics::Palette _palette;
byte *_initialPalette;
mutable bool _dirtyPalette;
int _frameCount, _curFrame;
Commit: 22c34f1f72655ec60c6a5229190a9368b6be7191
https://github.com/scummvm/scummvm/commit/22c34f1f72655ec60c6a5229190a9368b6be7191
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-03-09T17:29:24+02:00
Commit Message:
VIDEO: Use palette class in QuickTIme decoder
Changed paths:
video/qt_decoder.cpp
video/qt_decoder.h
diff --git a/video/qt_decoder.cpp b/video/qt_decoder.cpp
index ca9239ae28e..917474b4436 100644
--- a/video/qt_decoder.cpp
+++ b/video/qt_decoder.cpp
@@ -165,7 +165,7 @@ Common::QuickTimeParser::SampleDesc *QuickTimeDecoder::readSampleDesc(Common::Qu
// if the depth is 2, 4, or 8 bpp, file is palettized
if (colorDepth == 2 || colorDepth == 4 || colorDepth == 8) {
// Initialize the palette
- entry->_palette = new byte[256 * 3]();
+ entry->_palette.resize(256, false);
if (colorGreyscale) {
debugC(0, kDebugLevelGVideo, "Greyscale palette");
@@ -175,7 +175,7 @@ Common::QuickTimeParser::SampleDesc *QuickTimeDecoder::readSampleDesc(Common::Qu
int16 colorIndex = 255;
byte colorDec = 256 / (colorCount - 1);
for (uint16 j = 0; j < colorCount; j++) {
- entry->_palette[j * 3] = entry->_palette[j * 3 + 1] = entry->_palette[j * 3 + 2] = colorIndex;
+ entry->_palette.set(j, colorIndex, colorIndex, colorIndex);
colorIndex -= colorDec;
if (colorIndex < 0)
colorIndex = 0;
@@ -186,11 +186,11 @@ Common::QuickTimeParser::SampleDesc *QuickTimeDecoder::readSampleDesc(Common::Qu
debugC(0, kDebugLevelGVideo, "Predefined palette! %dbpp", colorDepth);
if (colorDepth == 2)
- memcpy(entry->_palette, quickTimeDefaultPalette4, 4 * 3);
+ entry->_palette.set(quickTimeDefaultPalette4, 0, 4);
else if (colorDepth == 4)
- memcpy(entry->_palette, quickTimeDefaultPalette16, 16 * 3);
+ entry->_palette.set(quickTimeDefaultPalette16, 0, 16);
else if (colorDepth == 8)
- memcpy(entry->_palette, quickTimeDefaultPalette256, 256 * 3);
+ entry->_palette.set(quickTimeDefaultPalette256, 0, 256);
} else {
debugC(0, kDebugLevelGVideo, "Palette from file");
@@ -204,12 +204,13 @@ Common::QuickTimeParser::SampleDesc *QuickTimeDecoder::readSampleDesc(Common::Qu
// up front
_fd->readByte();
_fd->readByte();
- entry->_palette[j * 3] = _fd->readByte();
+ byte r = _fd->readByte();
_fd->readByte();
- entry->_palette[j * 3 + 1] = _fd->readByte();
+ byte g = _fd->readByte();
_fd->readByte();
- entry->_palette[j * 3 + 2] = _fd->readByte();
+ byte b = _fd->readByte();
_fd->readByte();
+ entry->_palette.set(j, r, g, b);
}
}
@@ -292,16 +293,14 @@ void QuickTimeDecoder::scaleSurface(const Graphics::Surface *src, Graphics::Surf
memcpy(dst->getBasePtr(k, j), src->getBasePtr((k * scaleFactorX).toInt() , (j * scaleFactorY).toInt()), src->format.bytesPerPixel);
}
-QuickTimeDecoder::VideoSampleDesc::VideoSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag) : Common::QuickTimeParser::SampleDesc(parentTrack, codecTag) {
+QuickTimeDecoder::VideoSampleDesc::VideoSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag) : Common::QuickTimeParser::SampleDesc(parentTrack, codecTag), _palette(0) {
memset(_codecName, 0, 32);
_colorTableId = 0;
- _palette = 0;
_videoCodec = 0;
_bitsPerSample = 0;
}
QuickTimeDecoder::VideoSampleDesc::~VideoSampleDesc() {
- delete[] _palette;
delete _videoCodec;
}
@@ -326,7 +325,7 @@ Audio::SeekableAudioStream *QuickTimeDecoder::AudioTrackHandler::getSeekableAudi
return _audioTrack;
}
-QuickTimeDecoder::VideoTrackHandler::VideoTrackHandler(QuickTimeDecoder *decoder, Common::QuickTimeParser::Track *parent) : _decoder(decoder), _parent(parent) {
+QuickTimeDecoder::VideoTrackHandler::VideoTrackHandler(QuickTimeDecoder *decoder, Common::QuickTimeParser::Track *parent) : _decoder(decoder), _parent(parent), _forcedDitherPalette(0) {
if (decoder->_enableEditListBoundsCheckQuirk) {
checkEditListBounds();
}
@@ -344,7 +343,6 @@ QuickTimeDecoder::VideoTrackHandler::VideoTrackHandler(QuickTimeDecoder *decoder
_curPalette = 0;
_dirtyPalette = false;
_reversed = false;
- _forcedDitherPalette = 0;
_ditherTable = 0;
_ditherFrame = 0;
}
@@ -392,7 +390,6 @@ QuickTimeDecoder::VideoTrackHandler::~VideoTrackHandler() {
delete _scaledSurface;
}
- delete[] _forcedDitherPalette;
delete[] _ditherTable;
if (_ditherFrame) {
@@ -495,7 +492,7 @@ uint16 QuickTimeDecoder::VideoTrackHandler::getHeight() const {
}
Graphics::PixelFormat QuickTimeDecoder::VideoTrackHandler::getPixelFormat() const {
- if (_forcedDitherPalette)
+ if (_forcedDitherPalette.size() > 0)
return Graphics::PixelFormat::createFormatCLUT8();
// TODO: What should happen if there are multiple codecs with different formats?
@@ -503,7 +500,7 @@ Graphics::PixelFormat QuickTimeDecoder::VideoTrackHandler::getPixelFormat() cons
}
bool QuickTimeDecoder::VideoTrackHandler::setOutputPixelFormat(const Graphics::PixelFormat &format) {
- if (_forcedDitherPalette)
+ if (_forcedDitherPalette.size() > 0)
return false;
bool success = true;
@@ -601,7 +598,7 @@ const Graphics::Surface *QuickTimeDecoder::VideoTrackHandler::decodeNextFrame()
}
// Handle forced dithering
- if (frame && _forcedDitherPalette)
+ if (frame && _forcedDitherPalette.size() > 0)
frame = forceDither(*frame);
if (frame && (_parent->scaleFactorX != 1 || _parent->scaleFactorY != 1)) {
@@ -644,7 +641,7 @@ Audio::Timestamp QuickTimeDecoder::VideoTrackHandler::getFrameTime(uint frame) c
const byte *QuickTimeDecoder::VideoTrackHandler::getPalette() const {
_dirtyPalette = false;
- return _forcedDitherPalette ? _forcedDitherPalette : _curPalette;
+ return _forcedDitherPalette.size() > 0 ? _forcedDitherPalette.data() : _curPalette;
}
bool QuickTimeDecoder::VideoTrackHandler::setReverse(bool reverse) {
@@ -896,7 +893,7 @@ const Graphics::Surface *QuickTimeDecoder::VideoTrackHandler::bufferNextFrame()
}
} else {
// Check if the video description has been updated
- byte *palette = entry->_palette;
+ const byte *palette = entry->_palette.data();
if (palette != _curPalette) {
_curPalette = palette;
@@ -979,9 +976,9 @@ void QuickTimeDecoder::VideoTrackHandler::setDither(const byte *palette) {
desc->_videoCodec->setDither(Image::Codec::kDitherTypeQT, palette);
} else {
// Forced dither
- _forcedDitherPalette = new byte[256 * 3];
- memcpy(_forcedDitherPalette, palette, 256 * 3);
- _ditherTable = Image::Codec::createQuickTimeDitherTable(_forcedDitherPalette, 256);
+ _forcedDitherPalette.resize(256, false);
+ _forcedDitherPalette.set(palette, 0, 256);
+ _ditherTable = Image::Codec::createQuickTimeDitherTable(_forcedDitherPalette.data(), 256);
_dirtyPalette = true;
}
}
@@ -1034,7 +1031,7 @@ const Graphics::Surface *QuickTimeDecoder::VideoTrackHandler::forceDither(const
return &frame;
// If the palettes match, bail out
- if (memcmp(_forcedDitherPalette, _curPalette, 256 * 3) == 0)
+ if (memcmp(_forcedDitherPalette.data(), _curPalette, 256 * 3) == 0)
return &frame;
}
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 941e6ac2cbc..024d1af7581 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -34,6 +34,7 @@
#include "common/keyboard.h"
#include "common/scummsys.h"
+#include "graphics/palette.h"
#include "graphics/transform_tools.h"
#include "video/video_decoder.h"
@@ -253,7 +254,7 @@ private:
uint16 _bitsPerSample;
char _codecName[32];
uint16 _colorTableId;
- byte *_palette;
+ Graphics::Palette _palette;
Image::Codec *_videoCodec;
};
@@ -361,7 +362,7 @@ private:
bool _reversed;
// Forced dithering of frames
- byte *_forcedDitherPalette;
+ Graphics::Palette _forcedDitherPalette;
byte *_ditherTable;
Graphics::Surface *_ditherFrame;
const Graphics::Surface *forceDither(const Graphics::Surface &frame);
Commit: 29e2b1017c3988503f85538ad568f98acbc7633e
https://github.com/scummvm/scummvm/commit/29e2b1017c3988503f85538ad568f98acbc7633e
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-03-09T17:29:24+02:00
Commit Message:
VIDEO: Use palette class in Smacker decoder
Changed paths:
video/smk_decoder.cpp
video/smk_decoder.h
diff --git a/video/smk_decoder.cpp b/video/smk_decoder.cpp
index 6b8b041470b..dcda37f957e 100644
--- a/video/smk_decoder.cpp
+++ b/video/smk_decoder.cpp
@@ -600,7 +600,7 @@ VideoDecoder::AudioTrack *SmackerDecoder::getAudioTrack(int index) {
return (AudioTrack *)track;
}
-SmackerDecoder::SmackerVideoTrack::SmackerVideoTrack(uint32 width, uint32 height, uint32 frameCount, const Common::Rational &frameRate, uint32 flags, uint32 version) {
+SmackerDecoder::SmackerVideoTrack::SmackerVideoTrack(uint32 width, uint32 height, uint32 frameCount, const Common::Rational &frameRate, uint32 flags, uint32 version) : _palette(256) {
_surface = new Graphics::Surface();
_surface->create(width, height * ((flags & 6) ? 2 : 1), Graphics::PixelFormat::createFormatCLUT8());
_dirtyBlocks.set_size(width * height / 16);
@@ -611,7 +611,6 @@ SmackerDecoder::SmackerVideoTrack::SmackerVideoTrack(uint32 width, uint32 height
_curFrame = -1;
_dirtyPalette = false;
_MMapTree = _MClrTree = _FullTree = _TypeTree = 0;
- memset(_palette, 0, 3 * 256);
}
SmackerDecoder::SmackerVideoTrack::~SmackerVideoTrack() {
@@ -800,10 +799,11 @@ void SmackerDecoder::SmackerVideoTrack::unpackPalette(Common::SeekableReadStream
stream->read(chunk, len);
byte *p = chunk;
- byte oldPalette[3 * 256];
- memcpy(oldPalette, _palette, 3 * 256);
+ const byte *oldPalette = _palette.data();
- byte *pal = _palette;
+ byte newPalette[3 * 256];
+ _palette.grab(newPalette, 0, 256);
+ byte *pal = newPalette;
int sz = 0;
byte b0;
@@ -837,10 +837,10 @@ void SmackerDecoder::SmackerVideoTrack::unpackPalette(Common::SeekableReadStream
*pal++ = (b * 4 + b / 16);
}
}
-
stream->seek(startPos + len);
free(chunk);
+ _palette.set(newPalette, 0, 256);
_dirtyPalette = true;
}
diff --git a/video/smk_decoder.h b/video/smk_decoder.h
index e95b02ba4cd..5b0ccdd8d90 100644
--- a/video/smk_decoder.h
+++ b/video/smk_decoder.h
@@ -33,6 +33,7 @@
#include "common/bitstream.h"
#include "common/rational.h"
#include "common/rect.h"
+#include "graphics/palette.h"
#include "graphics/pixelformat.h"
#include "graphics/surface.h"
#include "video/video_decoder.h"
@@ -110,7 +111,7 @@ protected:
int getCurFrame() const { return _curFrame; }
int getFrameCount() const { return _frameCount; }
const Graphics::Surface *decodeNextFrame() { return _surface; }
- const byte *getPalette() const { _dirtyPalette = false; return _palette; }
+ const byte *getPalette() const { _dirtyPalette = false; return _palette.data(); }
bool hasDirtyPalette() const { return _dirtyPalette; }
void readTrees(SmackerBitStream &bs, uint32 mMapSize, uint32 mClrSize, uint32 fullSize, uint32 typeSize);
@@ -129,7 +130,7 @@ protected:
Common::Rational _frameRate;
uint32 _flags, _version;
- byte _palette[3 * 256];
+ Graphics::Palette _palette;
mutable bool _dirtyPalette;
int _curFrame;
Commit: 748a7f2fcf95582ce84fa88ca01b6a6c7a099ffb
https://github.com/scummvm/scummvm/commit/748a7f2fcf95582ce84fa88ca01b6a6c7a099ffb
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-03-09T17:29:24+02:00
Commit Message:
VIDEO: Use palette class in HNM decoder
Changed paths:
video/hnm_decoder.cpp
video/hnm_decoder.h
diff --git a/video/hnm_decoder.cpp b/video/hnm_decoder.cpp
index ebb789da054..bc13084603e 100644
--- a/video/hnm_decoder.cpp
+++ b/video/hnm_decoder.cpp
@@ -277,13 +277,11 @@ HNMDecoder::HNMVideoTrack::HNMVideoTrack(uint32 frameCount,
HNMDecoder::HNM45VideoTrack::HNM45VideoTrack(uint32 width, uint32 height, uint32 frameSize,
uint32 frameCount, uint32 regularFrameDelayMs, uint32 audioSampleRate,
const byte *initialPalette) :
- HNMVideoTrack(frameCount, regularFrameDelayMs, audioSampleRate) {
+ HNMVideoTrack(frameCount, regularFrameDelayMs, audioSampleRate), _palette(256) {
// Get the currently loaded palette for undefined colors
if (initialPalette) {
- memcpy(_palette, initialPalette, 256 * 3);
- } else {
- memset(_palette, 0, 256 * 3);
+ _palette.set(initialPalette, 0, 256);
}
_dirtyPalette = true;
@@ -355,14 +353,11 @@ void HNMDecoder::HNM45VideoTrack::decodePalette(byte *data, uint32 size) {
error("Not enough data for palette");
}
- byte *palette_ptr = &_palette[start * 3];
- for (; count > 0; count--) {
+ for (int i = start; count > 0; i++, count--) {
byte r = *(data++);
byte g = *(data++);
byte b = *(data++);
- *(palette_ptr++) = r * 4;
- *(palette_ptr++) = g * 4;
- *(palette_ptr++) = b * 4;
+ _palette.set(i, r * 4, g * 4, b * 4);
}
size -= count * 3;
}
diff --git a/video/hnm_decoder.h b/video/hnm_decoder.h
index af0735cf63a..51879263050 100644
--- a/video/hnm_decoder.h
+++ b/video/hnm_decoder.h
@@ -28,6 +28,7 @@
#include "audio/audiostream.h"
#include "common/rational.h"
+#include "graphics/palette.h"
#include "graphics/surface.h"
#include "video/video_decoder.h"
@@ -96,7 +97,7 @@ private:
uint16 getHeight() const override { return _surface.h; }
Graphics::PixelFormat getPixelFormat() const override { return _surface.format; }
const Graphics::Surface *decodeNextFrame() override { return &_surface; }
- const byte *getPalette() const override { _dirtyPalette = false; return _palette; }
+ const byte *getPalette() const override { _dirtyPalette = false; return _palette.data(); }
bool hasDirtyPalette() const override { return _dirtyPalette; }
virtual void newFrame(uint32 frameDelay) override;
@@ -112,7 +113,7 @@ private:
Graphics::Surface _surface;
- byte _palette[256 * 3];
+ Graphics::Palette _palette;
mutable bool _dirtyPalette;
byte *_frameBufferC;
More information about the Scummvm-git-logs
mailing list