22#ifndef VIDEO_AVI_DECODER_H
23#define VIDEO_AVI_DECODER_H
25#include "common/array.h"
26#include "common/rational.h"
27#include "common/rect.h"
28#include "common/str.h"
29#include "graphics/palette.h"
31#include "video/video_decoder.h"
32#include "audio/mixer.h"
36class PacketizedAudioStream;
40class SeekableReadStream;
73 uint16
getWidth()
const override {
return _header.width; }
74 uint16
getHeight()
const override {
return _header.height; }
126 uint32 xPelsPerMeter;
127 uint32 yPelsPerMeter;
135 uint32 samplesPerSec;
136 uint32 avgBytesPerSec;
145 uint16 bitsPerSample;
163 uint32 microSecondsPerFrame;
164 uint32 maxBytesPerSecond;
168 uint32 initialFrames;
177 AVIF_HASINDEX = 0x00000010,
178 AVIF_MUSTUSEINDEX = 0x00000020,
179 AVIF_ISINTERLEAVED = 0x00000100,
180 AVIF_TRUSTCKTYPE = 0x00000800,
181 AVIF_WASCAPTUREFILE = 0x00010000,
182 AVIF_WASCOPYRIGHTED = 0x00020000
188 uint32 streamHandler;
192 uint32 initialFrames;
210 void forceTrackEnd();
212 uint16
getWidth()
const override {
return _bmInfo.width; }
213 uint16
getHeight()
const override {
return _bmInfo.height; }
214 uint16 getBitCount()
const {
return _bmInfo.bitCount; }
225 void setCurFrame(
int frame) { _curFrame = frame; }
228 void useInitialPalette();
231 bool isValid()
const {
return _videoCodec !=
nullptr; }
233 bool isTruemotion1()
const;
234 void forceDimensions(uint16 width, uint16 height);
268 _vidsHeader.rate = r.getNumerator();
269 _vidsHeader.scale = r.getDenominator();
275 byte *_initialPalette;
276 mutable bool _dirtyPalette;
277 int _frameCount, _curFrame;
282 Image::CodecAccuracy _accuracy;
292 virtual void createAudioStream();
295 virtual void resetStream();
296 uint32 getCurChunk()
const {
return _curChunk; }
298 void setCurChunk(uint32 chunk) { _curChunk = chunk; }
299 bool needsAudioOnlyBuffering();
300 void setAllPacketsQueued() { _allPacketsQueued =
true; }
314 bool _bufferedAudioOnly;
315 bool _allPacketsQueued;
323 uint32 chunkSearchOffset;
328 OldIndex *find(uint index, uint frameNumber);
333 void readOldIndex(uint32 size);
338 bool _foundMovieList;
339 uint32 _movieListStart, _movieListEnd;
343 int _videoTrackCounter, _audioTrackCounter;
344 Track *_lastAddedTrack;
348 bool parseNextChunk();
349 void skipChunk(uint32 size);
350 void handleList(uint32 listSize);
351 bool handleStreamHeader(uint32 size);
352 void readStreamName(uint32 size);
353 void readPalette8(uint32 size);
354 uint16 getStreamType(uint32 tag)
const {
return tag & 0xFFFF; }
355 static byte getStreamIndex(uint32 tag);
356 void checkTruemotion1();
357 uint getVideoTrackOffset(uint trackIndex, uint frameNumber = 0);
359 void handleNextPacket(TrackStatus& status);
360 bool shouldQueueAudio(TrackStatus& status);
361 void seekTransparencyFrame(
int frame);
364 TrackStatus _transparencyTrack;
367 virtual AVIAudioTrack *createAudioTrack(AVIStreamHeader sHeader, PCMWaveFormat wvInfo);
Definition: audiostream.h:50
SoundType
Definition: mixer.h:73
Definition: audiostream.h:446
Definition: timestamp.h:83
Definition: rational.h:40
Simple class for handling a palette data.
Definition: palette.h:61
Definition: avi_decoder.h:287
bool endOfTrack() const override
Audio::AudioStream * getAudioStream() const override
Definition: avi_decoder.h:307
bool isRewindable() const override
Definition: avi_decoder.h:303
Definition: avi_decoder.h:204
void setCodecAccuracy(Image::CodecAccuracy accuracy) override
bool isRewindable() const override
Definition: avi_decoder.h:236
bool setReverse(bool reverse) override
int getFrameCount() const override
Definition: avi_decoder.h:219
uint16 getWidth() const override
Definition: avi_decoder.h:212
bool canDither() const override
int getCurFrame() const override
Definition: avi_decoder.h:218
const Graphics::Surface * decodeNextFrame() override
Definition: avi_decoder.h:221
bool hasDirtyPalette() const override
bool isReversed() const override
Definition: avi_decoder.h:252
uint16 getHeight() const override
Definition: avi_decoder.h:213
void setDither(const byte *palette) override
bool endOfTrack() const override
void setFrameRate(const Common::Rational &r)
Definition: avi_decoder.h:267
Common::Rational getFrameRate() const override
Definition: avi_decoder.h:262
Graphics::PixelFormat getPixelFormat() const override
const byte * getPalette() const override
bool setOutputPixelFormat(const Graphics::PixelFormat &format) override
Definition: avi_decoder.h:326
Definition: avi_decoder.h:65
void readNextPacket() override
bool seekToFrame(uint frame) override
bool isRewindable() const override
Definition: avi_decoder.h:77
AudioTrack * getAudioTrack(int index) override
bool supportsAudioTrackSwitching() const override
Definition: avi_decoder.h:105
const Graphics::Surface * decodeNextFrame() override
const Graphics::Surface * decodeNextTransparency()
uint16 getWidth() const override
Definition: avi_decoder.h:73
void addTrack(Track *track, bool isExternal=false)
bool isSeekable() const override
uint16 getHeight() const override
Definition: avi_decoder.h:74
bool seekIntern(const Audio::Timestamp &time) override
bool loadStream(Common::SeekableReadStream *stream) override
Definition: video_decoder.h:759
Definition: video_decoder.h:734
Definition: video_decoder.h:532
Definition: video_decoder.h:53
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: avi_decoder.h:149
Definition: avi_decoder.h:318