[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