From 63548841d071a724dcf57adf19ee2f4fb60aa8ff Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Thu, 10 Apr 2008 15:45:32 -0700 Subject: [PATCH] includes: Update aviriff header file --- dlls/quartz/avisplit.c | 21 +++++-- dlls/quartz/fourcc.h | 61 -------------------- dlls/quartz/waveparser.c | 4 +- include/aviriff.h | 143 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 159 insertions(+), 70 deletions(-) delete mode 100644 dlls/quartz/fourcc.h diff --git a/dlls/quartz/avisplit.c b/dlls/quartz/avisplit.c index 0d9aed7..02fae8d 100644 --- a/dlls/quartz/avisplit.c +++ b/dlls/quartz/avisplit.c @@ -32,8 +32,6 @@ #include "vfwmsgs.h" #include "amvideo.h" -#include "fourcc.h" - #include "wine/unicode.h" #include "wine/debug.h" @@ -42,6 +40,19 @@ #include "parser.h" +#define TWOCCFromFOURCC(fcc) HIWORD(fcc) + +/* four character codes used in AVI files */ +#define ckidAVI mmioFOURCC('A','V','I',' ') +#define ckidRIFF mmioFOURCC('R','I','F','F') +#define ckidLIST mmioFOURCC('L','I','S','T') +#define ckidJUNK mmioFOURCC('J','U','N','K') +#define ckidINFO mmioFOURCC('I','N','F','O') +#define ckidREC mmioFOURCC('R','E','C',' ') +#define ckidHEADERLIST mmioFOURCC('h','d','r','l') +#define ckidAVIMOVIE mmioFOURCC('m','o','v','i') + + WINE_DEFAULT_DEBUG_CHANNEL(quartz); typedef struct StreamData @@ -141,14 +152,14 @@ static HRESULT AVISplitter_Sample(LPVOID iface, IMediaSample * pSample) switch (This->CurrentChunk.fcc) { case ckidJUNK: - case aviFCC('i','d','x','1'): /* Index is not handled */ + case ckidAVIOLDINDEX: /* Index is not handled */ /* silently ignore */ if (S_FALSE == AVISplitter_NextChunk(&This->CurrentChunkOffset, &This->CurrentChunk, &tStart, &tStop, pbSrcStream, FALSE)) bMoreData = FALSE; continue; case ckidLIST: /* 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. * This is not clean and the parser should be improved for that but it is enough for most AVI files. */ @@ -194,7 +205,7 @@ static HRESULT AVISplitter_Sample(LPVOID iface, IMediaSample * pSample) 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; break; } diff --git a/dlls/quartz/fourcc.h b/dlls/quartz/fourcc.h deleted file mode 100644 index 317b432..0000000 --- a/dlls/quartz/fourcc.h +++ /dev/null @@ -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') diff --git a/dlls/quartz/waveparser.c b/dlls/quartz/waveparser.c index 55fad4c..3b1a8fc 100644 --- a/dlls/quartz/waveparser.c +++ b/dlls/quartz/waveparser.c @@ -27,8 +27,6 @@ #include "vfwmsgs.h" #include "mmsystem.h" -#include "fourcc.h" - #include "wine/unicode.h" #include "wine/debug.h" @@ -233,7 +231,7 @@ static HRESULT WAVEParser_InputPin_PreConnect(IPin * iface, IPin * pConnectPin) hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list); pos += sizeof(list); - if (list.fcc != ckidRIFF) + if (list.fcc != FOURCC_RIFF) { ERR("Input stream not a RIFF file\n"); return E_FAIL; diff --git a/include/aviriff.h b/include/aviriff.h index 22fca9a..c868ddc 100644 --- a/include/aviriff.h +++ b/include/aviriff.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2003 Robert Shearman + * Copyright (C) 2008 Maarten Lankhorst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -16,6 +17,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "vfw.h" + typedef struct _riffchunk { FOURCC fcc; @@ -40,6 +43,7 @@ typedef struct _rifflist #define AVIF_WASCAPTUREFILE 0x00010000 #define AVIF_COPYRIGHTED 0x00020000 +#define ckidMAINAVIHEADER mmioFOURCC('a','v','i','h') typedef struct _avimainheader { FOURCC fcc; @@ -57,6 +61,8 @@ typedef struct _avimainheader DWORD dwReserved[4]; } AVIMAINHEADER; +#define ckidODML mmioFOURCC('o','d','m','l') +#define ckidAVIEXTHEADER mmioFOURCC('d','m','l','h') typedef struct _aviextheader { FOURCC fcc; @@ -65,6 +71,7 @@ typedef struct _aviextheader DWORD dwFuture[61]; } AVIEXTHEADER; +#define ckidSTREAMLIST mmioFOURCC('s','t','r','l') /* flags for dwFlags member of AVISTREAMHEADER */ #define AVISF_DISABLED 0x00000001 @@ -96,6 +103,9 @@ typedef struct _avistreamheader } rcFrame; } AVISTREAMHEADER; + +#define ckidAVIOLDINDEX mmioFOURCC('i','d','x','1') + /* flags for dwFlags member of _avioldindex_entry */ #define AVIIF_LIST 0x00000001 #define AVIIF_KEYFRAME 0x00000010 @@ -161,4 +171,135 @@ typedef struct _avimetaindex DWORD adwIndex[0]; } AVIMETAINDEX; -/* FIXME: index structures missing */ +#define ckidAVISUPERINDEX mmioFOURCC('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[0]; +} 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[0]; +} 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[0]; + /* DWORD adwTrailingFill[0]; */ +} AVITIMEDINDEX; + +typedef struct _avitimecodeindex { + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + TIMECODEDATA aIndex[0]; +} 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[0]; + /* DWORD adwTrailingFill[0]; */ +} AVITCDLINDEXA; + +typedef struct _avitcdlindexW { + FOURCC fcc; + UINT cb; + WORD wLongsPerEntry; + BYTE bIndexSubType; + BYTE bIndexType; + DWORD nEntriesInUse; + DWORD dwChunkId; + DWORD dwReserved[3]; + AVITCDLINDEX_ENTRYW aIndex[0]; + /* DWORD adwTrailingFill[0]; */ +} 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[0]; +} AVIFIELDINDEX, * PAVIFIELDINDEX; + -- 1.5.4.1