AVIReadHandler.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:55k
- // VirtualDub - Video processing and capture application
- // Copyright (C) 1998-2001 Avery Lee
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- #include <crtdbg.h>
- #include <windows.h>
- #include "AVIReadHandler.h"
- #include "FastReadStream.h"
- //#include "ProgressDialog.h"
- #include "AVIIndex.h"
- #include "Error.h"
- #include "List.h"
- #include "Fixes.h"
- #include "File64.h"
- #include "Avisynth.h"
- //#define STREAMING_DEBUG
- // HACK!!!!
- CRITICAL_SECTION g_diskcs;
- bool g_disklockinited=false;
- ///////////////////////////////////////////
- typedef __int64 QUADWORD;
- // The following comes from the OpenDML 1.0 spec for extended AVI files
- // bIndexType codes
- //
- #define AVI_INDEX_OF_INDEXES 0x00 // when each entry in aIndex
- // array points to an index chunk
- #define AVI_INDEX_OF_CHUNKS 0x01 // when each entry in aIndex
- // array points to a chunk in the file
- #define AVI_INDEX_IS_DATA 0x80 // when each entry is aIndex is
- // really the data
- // bIndexSubtype codes for INDEX_OF_CHUNKS
- #define AVI_INDEX_2FIELD 0x01 // when fields within frames
- // are also indexed
- struct _avisuperindex_entry {
- QUADWORD qwOffset; // absolute file offset, offset 0 is
- // unused entry??
- DWORD dwSize; // size of index chunk at this offset
- DWORD dwDuration; // time span in stream ticks
- };
- struct _avistdindex_entry {
- DWORD dwOffset; // qwBaseOffset + this is absolute file offset
- DWORD dwSize; // bit 31 is set if this is NOT a keyframe
- };
- struct _avifieldindex_entry {
- DWORD dwOffset;
- DWORD dwSize;
- DWORD dwOffsetField2;
- };
- #pragma pack(push)
- #pragma pack(2)
- typedef struct _avisuperindex_chunk {
- FOURCC fcc; // 抜x##