include: Update aviriff header.
This commit is contained in:
parent
1281b74956
commit
0b32692451
|
@ -28,12 +28,11 @@
|
||||||
#include "pin.h"
|
#include "pin.h"
|
||||||
|
|
||||||
#include "uuids.h"
|
#include "uuids.h"
|
||||||
|
#include "vfw.h"
|
||||||
#include "aviriff.h"
|
#include "aviriff.h"
|
||||||
#include "vfwmsgs.h"
|
#include "vfwmsgs.h"
|
||||||
#include "amvideo.h"
|
#include "amvideo.h"
|
||||||
|
|
||||||
#include "fourcc.h"
|
|
||||||
|
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -42,6 +41,12 @@
|
||||||
|
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
|
||||||
|
#define TWOCCFromFOURCC(fcc) HIWORD(fcc)
|
||||||
|
|
||||||
|
/* four character codes used in AVI files */
|
||||||
|
#define ckidINFO mmioFOURCC('I','N','F','O')
|
||||||
|
#define ckidREC mmioFOURCC('R','E','C',' ')
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
|
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
|
||||||
|
|
||||||
typedef struct StreamData
|
typedef struct StreamData
|
||||||
|
@ -140,15 +145,15 @@ static HRESULT AVISplitter_Sample(LPVOID iface, IMediaSample * pSample)
|
||||||
|
|
||||||
switch (This->CurrentChunk.fcc)
|
switch (This->CurrentChunk.fcc)
|
||||||
{
|
{
|
||||||
case ckidJUNK:
|
case ckidAVIPADDING:
|
||||||
case aviFCC('i','d','x','1'): /* Index is not handled */
|
case ckidAVIOLDINDEX: /* Index is not handled */
|
||||||
/* silently ignore */
|
/* silently ignore */
|
||||||
if (S_FALSE == AVISplitter_NextChunk(&This->CurrentChunkOffset, &This->CurrentChunk, &tStart, &tStop, pbSrcStream, FALSE))
|
if (S_FALSE == AVISplitter_NextChunk(&This->CurrentChunkOffset, &This->CurrentChunk, &tStart, &tStop, pbSrcStream, FALSE))
|
||||||
bMoreData = FALSE;
|
bMoreData = FALSE;
|
||||||
continue;
|
continue;
|
||||||
case ckidLIST:
|
case FOURCC_LIST:
|
||||||
/* We only handle the 'rec ' list which contains the stream data */
|
/* We only handle the 'rec ' list which contains the stream data */
|
||||||
if ((*(DWORD*)(pbSrcStream + BYTES_FROM_MEDIATIME(This->CurrentChunkOffset-tStart) + sizeof(RIFFCHUNK))) == aviFCC('r','e','c',' '))
|
if ((*(DWORD*)(pbSrcStream + BYTES_FROM_MEDIATIME(This->CurrentChunkOffset-tStart) + sizeof(RIFFCHUNK))) == ckidREC)
|
||||||
{
|
{
|
||||||
/* FIXME: We only advanced to the first chunk inside the list without keeping track that we are in it.
|
/* FIXME: We only advanced to the first chunk inside the list without keeping track that we are in it.
|
||||||
* This is not clean and the parser should be improved for that but it is enough for most AVI files. */
|
* This is not clean and the parser should be improved for that but it is enough for most AVI files. */
|
||||||
|
@ -194,7 +199,7 @@ static HRESULT AVISplitter_Sample(LPVOID iface, IMediaSample * pSample)
|
||||||
|
|
||||||
if (streamId > This->Parser.cStreams)
|
if (streamId > This->Parser.cStreams)
|
||||||
{
|
{
|
||||||
ERR("Corrupted AVI file (contains stream id %d, but supposed to only have %d streams)\n", streamId, This->Parser.cStreams);
|
ERR("Corrupted AVI file (contains stream id (%s) %d, but supposed to only have %d streams)\n", debugstr_an((char *)&This->CurrentChunk.fcc, 4), streamId, This->Parser.cStreams);
|
||||||
hr = E_FAIL;
|
hr = E_FAIL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -448,7 +453,7 @@ static HRESULT AVISplitter_ProcessStreamList(AVISplitterImpl * This, const BYTE
|
||||||
case ckidSTREAMHANDLERDATA:
|
case ckidSTREAMHANDLERDATA:
|
||||||
FIXME("process stream handler data\n");
|
FIXME("process stream handler data\n");
|
||||||
break;
|
break;
|
||||||
case ckidJUNK:
|
case ckidAVIPADDING:
|
||||||
TRACE("JUNK chunk ignored\n");
|
TRACE("JUNK chunk ignored\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -491,24 +496,24 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
|
||||||
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
||||||
pos += sizeof(list);
|
pos += sizeof(list);
|
||||||
|
|
||||||
if (list.fcc != ckidRIFF)
|
if (list.fcc != FOURCC_RIFF)
|
||||||
{
|
{
|
||||||
ERR("Input stream not a RIFF file\n");
|
ERR("Input stream not a RIFF file\n");
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
if (list.fccListType != ckidAVI)
|
if (list.fccListType != formtypeAVI)
|
||||||
{
|
{
|
||||||
ERR("Input stream not an AVI RIFF file\n");
|
ERR("Input stream not an AVI RIFF file\n");
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
||||||
if (list.fcc != ckidLIST)
|
if (list.fcc != FOURCC_LIST)
|
||||||
{
|
{
|
||||||
ERR("Expected LIST chunk, but got %.04s\n", (LPSTR)&list.fcc);
|
ERR("Expected LIST chunk, but got %.04s\n", (LPSTR)&list.fcc);
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
if (list.fccListType != ckidHEADERLIST)
|
if (list.fccListType != listtypeAVIHEADER)
|
||||||
{
|
{
|
||||||
ERR("Header list expected. Got: %.04s\n", (LPSTR)&list.fccListType);
|
ERR("Header list expected. Got: %.04s\n", (LPSTR)&list.fccListType);
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
@ -529,7 +534,7 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
|
||||||
/* AVIMAINHEADER includes the structure that is pCurrentChunk at the moment */
|
/* AVIMAINHEADER includes the structure that is pCurrentChunk at the moment */
|
||||||
memcpy(&pAviSplit->AviHeader, pCurrentChunk, sizeof(pAviSplit->AviHeader));
|
memcpy(&pAviSplit->AviHeader, pCurrentChunk, sizeof(pAviSplit->AviHeader));
|
||||||
break;
|
break;
|
||||||
case ckidLIST:
|
case FOURCC_LIST:
|
||||||
pList = (RIFFLIST *)pCurrentChunk;
|
pList = (RIFFLIST *)pCurrentChunk;
|
||||||
switch (pList->fccListType)
|
switch (pList->fccListType)
|
||||||
{
|
{
|
||||||
|
@ -541,7 +546,7 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ckidJUNK:
|
case ckidAVIPADDING:
|
||||||
/* ignore */
|
/* ignore */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -559,18 +564,18 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
|
||||||
pos += sizeof(RIFFCHUNK) + list.cb;
|
pos += sizeof(RIFFCHUNK) + list.cb;
|
||||||
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
||||||
|
|
||||||
while (list.fcc == ckidJUNK || (list.fcc == ckidLIST && list.fccListType == ckidINFO))
|
while (list.fcc == ckidAVIPADDING || (list.fcc == FOURCC_LIST && list.fccListType == ckidINFO))
|
||||||
{
|
{
|
||||||
pos += sizeof(RIFFCHUNK) + list.cb;
|
pos += sizeof(RIFFCHUNK) + list.cb;
|
||||||
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list.fcc != ckidLIST)
|
if (list.fcc != FOURCC_LIST)
|
||||||
{
|
{
|
||||||
ERR("Expected LIST, but got %.04s\n", (LPSTR)&list.fcc);
|
ERR("Expected LIST, but got %.04s\n", (LPSTR)&list.fcc);
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
if (list.fccListType != ckidAVIMOVIE)
|
if (list.fccListType != listtypeAVIMOVIE)
|
||||||
{
|
{
|
||||||
ERR("Expected AVI movie list, but got %.04s\n", (LPSTR)&list.fccListType);
|
ERR("Expected AVI movie list, but got %.04s\n", (LPSTR)&list.fccListType);
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
/*
|
|
||||||
* Common FOURCC
|
|
||||||
*
|
|
||||||
* Copyright 2003 Robert Shearman
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library 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
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FromHex(n) (((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))
|
|
||||||
#define StreamFromFOURCC(fcc) ((WORD) ((FromHex(LOBYTE(LOWORD(fcc))) << 4) + (FromHex(HIBYTE(LOWORD(fcc))))))
|
|
||||||
#define TWOCCFromFOURCC(fcc) HIWORD(fcc)
|
|
||||||
|
|
||||||
#ifndef aviTWOCC
|
|
||||||
#define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* FIXME: endianess? */
|
|
||||||
#define aviFCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch3) << 24 | (DWORD)(BYTE)(ch2) << 16 | (DWORD)(BYTE)(ch1) << 8 | ((DWORD)(BYTE)(ch0)))
|
|
||||||
|
|
||||||
/* four character codes used in AVI files */
|
|
||||||
#define ckidAVI aviFCC('A','V','I',' ')
|
|
||||||
#define ckidRIFF aviFCC('R','I','F','F')
|
|
||||||
#define ckidLIST aviFCC('L','I','S','T')
|
|
||||||
#define ckidJUNK aviFCC('J','U','N','K')
|
|
||||||
#define ckidINFO aviFCC('I','N','F','O')
|
|
||||||
#define ckidHEADERLIST aviFCC('h','d','r','l')
|
|
||||||
#define ckidAVIMOVIE aviFCC('m','o','v','i')
|
|
||||||
#define ckidSTREAMNAME aviFCC('s','t','r','n')
|
|
||||||
#define ckidSTREAMHANDLERDATA aviFCC('s','t','r','d')
|
|
||||||
#ifndef ckidMAINAVIHEADER
|
|
||||||
# define ckidMAINAVIHEADER aviFCC('a','v','i','h')
|
|
||||||
# define ckidODML aviFCC('o','d','m','l')
|
|
||||||
# define ckidAVIEXTHEADER aviFCC('d','m','l','h')
|
|
||||||
# define ckidSTREAMLIST aviFCC('s','t','r','l')
|
|
||||||
# define ckidSTREAMHEADER aviFCC('s','t','r','h')
|
|
||||||
# define ckidSTREAMFORMAT aviFCC('s','t','r','f')
|
|
||||||
# define ckidAVIOLDINDEX aviFCC('i','d','x','1')
|
|
||||||
# define ckidAVISUPERINDEX aviFCC('i','n','d','x')
|
|
||||||
#endif
|
|
||||||
#ifndef streamtypeVIDEO
|
|
||||||
#define streamtypeVIDEO aviFCC('v','i','d','s')
|
|
||||||
#define streamtypeAUDIO aviFCC('a','u','d','s')
|
|
||||||
#define streamtypeMIDI aviFCC('m','i','d','s')
|
|
||||||
#define streamtypeTEXT aviFCC('t','x','t','s')
|
|
||||||
#endif
|
|
||||||
#define cktypeDIBbits aviTWOCC('d','b')
|
|
||||||
#define cktypeDIBcompressed aviTWOCC('d','c')
|
|
||||||
#define cktypePALchange aviTWOCC('p','c')
|
|
||||||
#define cktypeWAVEbytes aviTWOCC('w','b')
|
|
|
@ -27,8 +27,6 @@
|
||||||
#include "vfwmsgs.h"
|
#include "vfwmsgs.h"
|
||||||
#include "mmsystem.h"
|
#include "mmsystem.h"
|
||||||
|
|
||||||
#include "fourcc.h"
|
|
||||||
|
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -328,7 +326,7 @@ static HRESULT WAVEParser_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
|
||||||
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
|
||||||
pos += sizeof(list);
|
pos += sizeof(list);
|
||||||
|
|
||||||
if (list.fcc != ckidRIFF)
|
if (list.fcc != FOURCC_RIFF)
|
||||||
{
|
{
|
||||||
ERR("Input stream not a RIFF file\n");
|
ERR("Input stream not a RIFF file\n");
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003 Robert Shearman
|
* Copyright (C) 2003 Robert Shearman
|
||||||
|
* Copyright (C) 2008 Maarten Lankhorst
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -29,6 +30,10 @@ typedef struct _rifflist
|
||||||
FOURCC fccListType;
|
FOURCC fccListType;
|
||||||
} RIFFLIST, * LPRIFFLIST;
|
} RIFFLIST, * LPRIFFLIST;
|
||||||
|
|
||||||
|
#define FCC( ch0, ch1, ch2, ch3 ) \
|
||||||
|
( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
|
||||||
|
( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
|
||||||
|
|
||||||
#define RIFFROUND(cb) ((cb) + ((cb)&1))
|
#define RIFFROUND(cb) ((cb) + ((cb)&1))
|
||||||
#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
|
#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
|
||||||
|
|
||||||
|
@ -40,6 +45,7 @@ typedef struct _rifflist
|
||||||
#define AVIF_WASCAPTUREFILE 0x00010000
|
#define AVIF_WASCAPTUREFILE 0x00010000
|
||||||
#define AVIF_COPYRIGHTED 0x00020000
|
#define AVIF_COPYRIGHTED 0x00020000
|
||||||
|
|
||||||
|
#define ckidMAINAVIHEADER FCC('a','v','i','h')
|
||||||
typedef struct _avimainheader
|
typedef struct _avimainheader
|
||||||
{
|
{
|
||||||
FOURCC fcc;
|
FOURCC fcc;
|
||||||
|
@ -57,6 +63,8 @@ typedef struct _avimainheader
|
||||||
DWORD dwReserved[4];
|
DWORD dwReserved[4];
|
||||||
} AVIMAINHEADER;
|
} AVIMAINHEADER;
|
||||||
|
|
||||||
|
#define ckidODML FCC('o','d','m','l')
|
||||||
|
#define ckidAVIEXTHEADER FCC('d','m','l','h')
|
||||||
typedef struct _aviextheader
|
typedef struct _aviextheader
|
||||||
{
|
{
|
||||||
FOURCC fcc;
|
FOURCC fcc;
|
||||||
|
@ -65,11 +73,23 @@ typedef struct _aviextheader
|
||||||
DWORD dwFuture[61];
|
DWORD dwFuture[61];
|
||||||
} AVIEXTHEADER;
|
} AVIEXTHEADER;
|
||||||
|
|
||||||
|
#define ckidSTREAMLIST FCC('s','t','r','l')
|
||||||
|
|
||||||
/* flags for dwFlags member of AVISTREAMHEADER */
|
/* flags for dwFlags member of AVISTREAMHEADER */
|
||||||
#define AVISF_DISABLED 0x00000001
|
#define AVISF_DISABLED 0x00000001
|
||||||
#define AVISF_VIDEO_PALCHANGES 0x00010000
|
#define AVISF_VIDEO_PALCHANGES 0x00010000
|
||||||
|
|
||||||
|
#ifndef ckidSTREAMHEADER
|
||||||
|
#define ckidSTREAMHEADER FCC('s','t','r','h')
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef streamtypeVIDEO
|
||||||
|
#define streamtypeVIDEO FCC('v','i','d','s')
|
||||||
|
#define streamtypeAUDIO FCC('a','u','d','s')
|
||||||
|
#define streamtypeMIDI FCC('m','i','d','s')
|
||||||
|
#define streamtypeTEXT FCC('t','x','t','s')
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct _avistreamheader
|
typedef struct _avistreamheader
|
||||||
{
|
{
|
||||||
FOURCC fcc;
|
FOURCC fcc;
|
||||||
|
@ -96,6 +116,11 @@ typedef struct _avistreamheader
|
||||||
} rcFrame;
|
} rcFrame;
|
||||||
} AVISTREAMHEADER;
|
} AVISTREAMHEADER;
|
||||||
|
|
||||||
|
#ifndef ckidSTREAMFORMAT
|
||||||
|
#define ckidSTREAMFORMAT FCC('s','t','r','f')
|
||||||
|
#endif
|
||||||
|
#define ckidAVIOLDINDEX FCC('i','d','x','1')
|
||||||
|
|
||||||
/* flags for dwFlags member of _avioldindex_entry */
|
/* flags for dwFlags member of _avioldindex_entry */
|
||||||
#define AVIIF_LIST 0x00000001
|
#define AVIIF_LIST 0x00000001
|
||||||
#define AVIIF_KEYFRAME 0x00000010
|
#define AVIIF_KEYFRAME 0x00000010
|
||||||
|
@ -112,7 +137,7 @@ typedef struct _avioldindex
|
||||||
DWORD dwFlags;
|
DWORD dwFlags;
|
||||||
DWORD dwOffset;
|
DWORD dwOffset;
|
||||||
DWORD dwSize;
|
DWORD dwSize;
|
||||||
} aIndex[0];
|
} aIndex[ANYSIZE_ARRAY];
|
||||||
} AVIOLDINDEX;
|
} AVIOLDINDEX;
|
||||||
|
|
||||||
typedef union _timecode
|
typedef union _timecode
|
||||||
|
@ -158,7 +183,137 @@ typedef struct _avimetaindex
|
||||||
DWORD nEntriesInUse;
|
DWORD nEntriesInUse;
|
||||||
DWORD dwChunkId;
|
DWORD dwChunkId;
|
||||||
DWORD dwReserved[3];
|
DWORD dwReserved[3];
|
||||||
DWORD adwIndex[0];
|
DWORD adwIndex[ANYSIZE_ARRAY];
|
||||||
} AVIMETAINDEX;
|
} AVIMETAINDEX;
|
||||||
|
|
||||||
/* FIXME: index structures missing */
|
#define ckidAVISUPERINDEX FCC('i','n','d','x')
|
||||||
|
typedef struct _avisuperindex {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORD dwReserved[3];
|
||||||
|
struct _avisuperindex_entry {
|
||||||
|
DWORDLONG qwOffset;
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwDuration;
|
||||||
|
} aIndex[ANYSIZE_ARRAY];
|
||||||
|
} AVISUPERINDEX;
|
||||||
|
|
||||||
|
#define AVISTDINDEX_DELTAFRAME (0x80000000)
|
||||||
|
#define AVISTDINDEX_SIZEMASK (~0x80000000)
|
||||||
|
|
||||||
|
typedef struct _avistdindex_entry {
|
||||||
|
DWORD dwOffset;
|
||||||
|
DWORD dwSize;
|
||||||
|
} AVISTDINDEX_ENTRY;
|
||||||
|
|
||||||
|
typedef struct _avistdindex {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORDLONG qwBaseOffset;
|
||||||
|
DWORD dwReserved_3;
|
||||||
|
AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
|
||||||
|
} AVISTDINDEX;
|
||||||
|
|
||||||
|
typedef struct _avitimedindex_entry {
|
||||||
|
DWORD dwOffset;
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwDuration;
|
||||||
|
} AVITIMEDINDEX_ENTRY;
|
||||||
|
|
||||||
|
typedef struct _avitimedindex {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORDLONG qwBaseOffset;
|
||||||
|
DWORD dwReserved_3;
|
||||||
|
AVITIMEDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
|
||||||
|
/* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
|
||||||
|
} AVITIMEDINDEX;
|
||||||
|
|
||||||
|
typedef struct _avitimecodeindex {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORD dwReserved[3];
|
||||||
|
TIMECODEDATA aIndex[ANYSIZE_ARRAY];
|
||||||
|
} AVITIMECODEINDEX;
|
||||||
|
|
||||||
|
typedef struct _avitcdlindex_entryA {
|
||||||
|
DWORD dwTick;
|
||||||
|
TIMECODE time;
|
||||||
|
DWORD dwSMPTEflags;
|
||||||
|
DWORD dwUser;
|
||||||
|
CHAR szReelId[12];
|
||||||
|
} AVITCDLINDEX_ENTRYA;
|
||||||
|
|
||||||
|
typedef struct _avitcdlindex_entryW {
|
||||||
|
DWORD dwTick;
|
||||||
|
TIMECODE time;
|
||||||
|
DWORD dwSMPTEflags;
|
||||||
|
DWORD dwUser;
|
||||||
|
WCHAR szReelId[12];
|
||||||
|
} AVITCDLINDEX_ENTRYW;
|
||||||
|
|
||||||
|
typedef struct _avitcdlindexA {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORD dwReserved[3];
|
||||||
|
AVITCDLINDEX_ENTRYA aIndex[ANYSIZE_ARRAY];
|
||||||
|
/* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
|
||||||
|
} AVITCDLINDEXA;
|
||||||
|
|
||||||
|
typedef struct _avitcdlindexW {
|
||||||
|
FOURCC fcc;
|
||||||
|
UINT cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORD dwReserved[3];
|
||||||
|
AVITCDLINDEX_ENTRYW aIndex[ANYSIZE_ARRAY];
|
||||||
|
/* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
|
||||||
|
} AVITCDLINDEXW;
|
||||||
|
|
||||||
|
#define AVITCDLINDEX_ENTRY WINELIB_NAME_AW(AVITCDLINDEX_ENTRY)
|
||||||
|
#define AVITCDLINDEX WINELIB_NAME_AW(AVITCDLINDEX)
|
||||||
|
|
||||||
|
typedef struct _avifieldindex_chunk {
|
||||||
|
FOURCC fcc;
|
||||||
|
DWORD cb;
|
||||||
|
WORD wLongsPerEntry;
|
||||||
|
BYTE bIndexSubType;
|
||||||
|
BYTE bIndexType;
|
||||||
|
DWORD nEntriesInUse;
|
||||||
|
DWORD dwChunkId;
|
||||||
|
DWORDLONG qwBaseOffset;
|
||||||
|
DWORD dwReserved3;
|
||||||
|
struct _avifieldindex_entry {
|
||||||
|
DWORD dwOffset;
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwOffsetField2;
|
||||||
|
} aIndex[ANYSIZE_ARRAY];
|
||||||
|
} AVIFIELDINDEX, * PAVIFIELDINDEX;
|
||||||
|
|
Loading…
Reference in New Issue