[Scummvm-cvs-logs] scummvm master -> e28544d6d16edff0ca5355cf5ebbde5f7b0cf0d8
clone2727
clone2727 at gmail.com
Tue Nov 26 02:34:46 CET 2013
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
fa350f9c1f VIDEO: Ignore AVI strn metadata
6fb6ffd77b VIDEO: Handle prematurely ending AVI videos
e28544d6d1 VIDEO: Ensure debug output of the first AVI index
Commit: fa350f9c1f9acd2e36fedceb7520b2723d3ff604
https://github.com/scummvm/scummvm/commit/fa350f9c1f9acd2e36fedceb7520b2723d3ff604
Author: Matthew Hoops (clone2727 at gmail.com)
Date: 2013-11-25T17:21:18-08:00
Commit Message:
VIDEO: Ignore AVI strn metadata
Changed paths:
video/avi_decoder.cpp
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index eb5a71c..41102f0 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -69,6 +69,7 @@ namespace Video {
#define ID_ISFT MKTAG('I','S','F','T')
#define ID_DISP MKTAG('D','I','S','P')
#define ID_PRMI MKTAG('P','R','M','I')
+#define ID_STRN MKTAG('s','t','r','n')
// Codec tags
#define ID_RLE MKTAG('R','L','E',' ')
@@ -155,6 +156,7 @@ bool AVIDecoder::parseNextChunk() {
case ID_JUNK: // Alignment bytes, should be ignored
case ID_ISFT: // Metadata, safe to ignore
case ID_DISP: // Metadata, should be safe to ignore
+ case ID_STRN: // Metadata, safe to ignore
skipChunk(size);
break;
case ID_IDX1:
Commit: 6fb6ffd77ba93cc46a2674b8ee94ab3f7d9966fa
https://github.com/scummvm/scummvm/commit/6fb6ffd77ba93cc46a2674b8ee94ab3f7d9966fa
Author: Matthew Hoops (clone2727 at gmail.com)
Date: 2013-11-25T17:32:53-08:00
Commit Message:
VIDEO: Handle prematurely ending AVI videos
Changed paths:
video/avi_decoder.cpp
video/avi_decoder.h
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index 41102f0..db8538e 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -110,6 +110,7 @@ void AVIDecoder::initCommon() {
_decodedHeader = false;
_foundMovieList = false;
_movieListStart = 0;
+ _movieListEnd = 0;
_fileStream = 0;
memset(&_header, 0, sizeof(_header));
}
@@ -186,6 +187,7 @@ void AVIDecoder::handleList(uint32 listSize) {
// We found the movie block
_foundMovieList = true;
_movieListStart = curPos;
+ _movieListEnd = _movieListStart + listSize + (listSize & 1);
_fileStream->skip(listSize);
return;
case ID_HDRL: // Header List
@@ -346,17 +348,27 @@ void AVIDecoder::close() {
_decodedHeader = false;
_foundMovieList = false;
_movieListStart = 0;
+ _movieListEnd = 0;
_indexEntries.clear();
memset(&_header, 0, sizeof(_header));
}
void AVIDecoder::readNextPacket() {
+ if ((uint32)_fileStream->pos() >= _movieListEnd) {
+ // Ugh, reached the end premature.
+ forceVideoEnd();
+ return;
+ }
+
uint32 nextTag = _fileStream->readUint32BE();
uint32 size = _fileStream->readUint32LE();
- if (_fileStream->eos())
+ if (_fileStream->eos()) {
+ // Also premature end.
+ forceVideoEnd();
return;
+ }
if (nextTag == ID_LIST) {
// A list of audio/video chunks
@@ -656,6 +668,16 @@ void AVIDecoder::readOldIndex(uint32 size) {
}
}
+void AVIDecoder::forceVideoEnd() {
+ // Horrible AVI video has a premature end
+ // Force the frame to be the last frame
+ debug(0, "Forcing end of AVI video");
+
+ for (TrackListIterator it = getTrackListBegin(); it != getTrackListEnd(); it++)
+ if ((*it)->getTrackType() == Track::kTrackTypeVideo)
+ ((AVIVideoTrack *)*it)->forceTrackEnd();
+}
+
AVIDecoder::AVIVideoTrack::AVIVideoTrack(int frameCount, const AVIStreamHeader &streamHeader, const BitmapInfoHeader &bitmapInfoHeader, byte *initialPalette)
: _frameCount(frameCount), _vidsHeader(streamHeader), _bmInfo(bitmapInfoHeader), _initialPalette(initialPalette) {
_videoCodec = createCodec();
@@ -758,6 +780,10 @@ Codec *AVIDecoder::AVIVideoTrack::createCodec() {
return 0;
}
+void AVIDecoder::AVIVideoTrack::forceTrackEnd() {
+ _curFrame = _frameCount - 1;
+}
+
AVIDecoder::AVIAudioTrack::AVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType)
: _audsHeader(streamHeader), _wvInfo(waveFormat), _soundType(soundType) {
_audStream = createAudioStream();
diff --git a/video/avi_decoder.h b/video/avi_decoder.h
index 9f28196..882cce3 100644
--- a/video/avi_decoder.h
+++ b/video/avi_decoder.h
@@ -166,6 +166,7 @@ protected:
~AVIVideoTrack();
void decodeFrame(Common::SeekableReadStream *stream);
+ void forceTrackEnd();
uint16 getWidth() const { return _bmInfo.width; }
uint16 getHeight() const { return _bmInfo.height; }
@@ -238,7 +239,7 @@ protected:
Common::SeekableReadStream *_fileStream;
bool _decodedHeader;
bool _foundMovieList;
- uint32 _movieListStart;
+ uint32 _movieListStart, _movieListEnd;
Audio::Mixer::SoundType _soundType;
Common::Rational _frameRateOverride;
@@ -250,6 +251,7 @@ protected:
void handleStreamHeader(uint32 size);
uint16 getStreamType(uint32 tag) const { return tag & 0xFFFF; }
byte getStreamIndex(uint32 tag) const;
+ void forceVideoEnd();
public:
virtual AVIAudioTrack *createAudioTrack(AVIStreamHeader sHeader, PCMWaveFormat wvInfo);
Commit: e28544d6d16edff0ca5355cf5ebbde5f7b0cf0d8
https://github.com/scummvm/scummvm/commit/e28544d6d16edff0ca5355cf5ebbde5f7b0cf0d8
Author: Matthew Hoops (clone2727 at gmail.com)
Date: 2013-11-25T17:33:14-08:00
Commit Message:
VIDEO: Ensure debug output of the first AVI index
Changed paths:
video/avi_decoder.cpp
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index db8538e..36fe83f 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -650,6 +650,7 @@ void AVIDecoder::readOldIndex(uint32 size) {
if (!isAbsolute)
firstEntry.offset += _movieListStart - 4;
+ debug(0, "Index 0: Tag '%s', Offset = %d, Size = %d (Flags = %d)", tag2str(firstEntry.id), firstEntry.offset, firstEntry.size, firstEntry.flags);
_indexEntries.push_back(firstEntry);
for (uint32 i = 1; i < entryCount; i++) {
More information about the Scummvm-git-logs
mailing list