22 #include "common/scummsys.h" 26 #ifndef VIDEO_HNM_DECODER_H 27 #define VIDEO_HNM_DECODER_H 29 #include "audio/audiostream.h" 30 #include "common/rational.h" 31 #include "graphics/palette.h" 32 #include "graphics/surface.h" 33 #include "video/video_decoder.h" 41 class SeekableReadStream;
57 class HNMDecoder :
public VideoDecoder {
60 ~HNMDecoder()
override;
62 void readNextPacket()
override;
63 void close()
override;
65 void setRegularFrameDelay(uint32 regularFrameDelay) { _regularFrameDelayMs = regularFrameDelay; }
68 class HNMVideoTrack :
public VideoTrack {
70 HNMVideoTrack(uint32 frameCount, uint32 regularFrameDelayMs, uint32 audioSampleRate);
73 bool endOfTrack()
const override {
return (_frameCount == 0) ? false : VideoTrack::endOfTrack(); }
74 int getCurFrame()
const override {
return _curFrame; }
75 int getFrameCount()
const override {
return _frameCount; }
76 uint32 getNextFrameStartTime()
const override {
return _nextFrameStartTime.msecs(); }
78 void restart() { _lastFrameDelaySamps = 0; }
80 virtual void newFrame(uint32 frameDelay) = 0;
81 virtual void decodeChunk(byte *data, uint32 size,
82 uint16 chunkType, uint16 flags) = 0;
85 uint32 _regularFrameDelayMs;
86 uint32 _lastFrameDelaySamps;
93 class HNM45VideoTrack :
public HNMVideoTrack {
96 uint16 getWidth()
const override {
return _surface.w; }
97 uint16 getHeight()
const override {
return _surface.h; }
100 const byte *getPalette()
const override { _dirtyPalette =
false;
return _palette.data(); }
101 bool hasDirtyPalette()
const override {
return _dirtyPalette; }
103 virtual void newFrame(uint32 frameDelay)
override;
106 HNM45VideoTrack(uint32 width, uint32 height, uint32 frameSize, uint32 frameCount,
107 uint32 regularFrameDelayMs, uint32 audioSampleRate,
108 const byte *initialPalette =
nullptr);
109 ~HNM45VideoTrack()
override;
112 void decodePalette(byte *data, uint32 size);
117 mutable bool _dirtyPalette;
123 class HNM4VideoTrack :
public HNM45VideoTrack {
125 HNM4VideoTrack(uint32 width, uint32 height, uint32 frameSize, uint32 frameCount,
126 uint32 regularFrameDelayMs, uint32 audioSampleRate,
127 const byte *initialPalette =
nullptr);
128 ~HNM4VideoTrack()
override;
131 void decodeChunk(byte *data, uint32 size,
132 uint16 chunkType, uint16 flags)
override;
136 void decodeInterframe(byte *data, uint32 size);
137 void decodeInterframeA(byte *data, uint32 size);
138 void decodeIntraframe(byte *data, uint32 size);
139 void presentFrame(uint16 flags);
144 class HNM5VideoTrack :
public HNM45VideoTrack {
146 HNM5VideoTrack(uint32 width, uint32 height, uint32 frameSize, uint32 frameCount,
147 uint32 regularFrameDelayMs, uint32 audioSampleRate,
148 const byte *initialPalette =
nullptr) :
149 HNM45VideoTrack(width, height, frameSize, frameCount, regularFrameDelayMs, audioSampleRate,
152 void decodeChunk(byte *data, uint32 size,
153 uint16 chunkType, uint16 flags)
override;
157 void decodeFrame(byte *data, uint32 size);
160 class HNM6VideoTrack :
public HNMVideoTrack {
162 HNM6VideoTrack(uint32 width, uint32 height, uint32 frameSize, uint32 frameCount,
163 uint32 regularFrameDelayMs, uint32 audioSampleRate,
165 ~HNM6VideoTrack()
override;
167 uint16 getWidth()
const override;
168 uint16 getHeight()
const override;
173 virtual void newFrame(uint32 frameDelay)
override;
175 void decodeChunk(byte *data, uint32 size,
176 uint16 chunkType, uint16 flags)
override;
182 class HNMAudioTrack :
public AudioTrack {
186 virtual uint32 decodeSound(uint16 chunkType, byte *data, uint32 size) = 0;
189 class DPCMAudioTrack :
public HNMAudioTrack {
191 DPCMAudioTrack(uint16 format, uint16 bits, uint sampleRate,
bool stereo,
193 ~DPCMAudioTrack()
override;
195 uint32 decodeSound(uint16 chunkType, byte *data, uint32 size)
override;
208 class APCAudioTrack :
public HNMAudioTrack {
210 APCAudioTrack(uint sampleRate, byte stereo,
212 ~APCAudioTrack()
override;
214 uint32 decodeSound(uint16 chunkType, byte *data, uint32 size)
override;
223 byte *_initialPalette;
225 uint32 _regularFrameDelayMs;
227 HNMVideoTrack *_videoTrack;
228 HNMAudioTrack *_audioTrack;
233 uint32 _dataBufferAlloc;
Definition: timestamp.h:83
SoundType
Definition: mixer.h:62
Definition: algorithm.h:29
Definition: audiostream.h:50
Definition: audiostream.h:370
Simple class for handling a palette data.
Definition: palette.h:51
Definition: avi_frames.h:36
Definition: movie_decoder.h:32