avifil32: Avoid the forward declaration of the IAVIStream methods.

This commit is contained in:
Michael Stefaniuc 2011-01-12 11:21:56 +01:00 committed by Alexandre Julliard
parent 1f8e505dc2
commit c567d1e461
1 changed files with 79 additions and 98 deletions

View File

@ -36,38 +36,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(avifile);
/***********************************************************************/ /***********************************************************************/
static HRESULT WINAPI ACMStream_fnQueryInterface(IAVIStream*iface,REFIID refiid,LPVOID *obj);
static ULONG WINAPI ACMStream_fnAddRef(IAVIStream*iface);
static ULONG WINAPI ACMStream_fnRelease(IAVIStream* iface);
static HRESULT WINAPI ACMStream_fnCreate(IAVIStream*iface,LPARAM lParam1,LPARAM lParam2);
static HRESULT WINAPI ACMStream_fnInfo(IAVIStream*iface,AVISTREAMINFOW *psi,LONG size);
static LONG WINAPI ACMStream_fnFindSample(IAVIStream*iface,LONG pos,LONG flags);
static HRESULT WINAPI ACMStream_fnReadFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG *formatsize);
static HRESULT WINAPI ACMStream_fnSetFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG formatsize);
static HRESULT WINAPI ACMStream_fnRead(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
static HRESULT WINAPI ACMStream_fnWrite(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
static HRESULT WINAPI ACMStream_fnDelete(IAVIStream*iface,LONG start,LONG samples);
static HRESULT WINAPI ACMStream_fnReadData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG *lpread);
static HRESULT WINAPI ACMStream_fnWriteData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG size);
static HRESULT WINAPI ACMStream_fnSetInfo(IAVIStream*iface,AVISTREAMINFOW*info,LONG infolen);
static const struct IAVIStreamVtbl iacmst = {
ACMStream_fnQueryInterface,
ACMStream_fnAddRef,
ACMStream_fnRelease,
ACMStream_fnCreate,
ACMStream_fnInfo,
ACMStream_fnFindSample,
ACMStream_fnReadFormat,
ACMStream_fnSetFormat,
ACMStream_fnRead,
ACMStream_fnWrite,
ACMStream_fnDelete,
ACMStream_fnReadData,
ACMStream_fnWriteData,
ACMStream_fnSetInfo
};
typedef struct _IAVIStreamImpl { typedef struct _IAVIStreamImpl {
/* IUnknown stuff */ /* IUnknown stuff */
IAVIStream IAVIStream_iface; IAVIStream IAVIStream_iface;
@ -102,28 +70,63 @@ typedef struct _IAVIStreamImpl {
&__bytes, ACM_STREAMSIZEF_DESTINATION); \ &__bytes, ACM_STREAMSIZEF_DESTINATION); \
*(a) = __bytes / This->lpInFormat->nBlockAlign; } while(0) *(a) = __bytes / This->lpInFormat->nBlockAlign; } while(0)
static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This); static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This)
HRESULT AVIFILE_CreateACMStream(REFIID riid, LPVOID *ppv)
{ {
IAVIStreamImpl *pstream; HRESULT hr;
HRESULT hr;
assert(riid != NULL && ppv != NULL); /* pre-conditions */
assert(This != NULL);
assert(This->pStream != NULL);
*ppv = NULL; if (This->has != NULL)
return AVIERR_OK;
pstream = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAVIStreamImpl)); if (This->lpInFormat == NULL) {
if (pstream == NULL) /* decode or encode the data from pStream */
return AVIERR_MEMORY; hr = AVIStreamFormatSize(This->pStream, This->sInfo.dwStart, &This->cbInFormat);
if (FAILED(hr))
return hr;
This->lpInFormat = HeapAlloc(GetProcessHeap(), 0, This->cbInFormat);
if (This->lpInFormat == NULL)
return AVIERR_MEMORY;
pstream->IAVIStream_iface.lpVtbl = &iacmst; hr = IAVIStream_ReadFormat(This->pStream, This->sInfo.dwStart,
This->lpInFormat, &This->cbInFormat);
if (FAILED(hr))
return hr;
hr = IAVIStream_QueryInterface(&pstream->IAVIStream_iface, riid, ppv); if (This->lpOutFormat == NULL) {
if (FAILED(hr)) /* we must decode to default format */
HeapFree(GetProcessHeap(), 0, pstream); This->cbOutFormat = sizeof(PCMWAVEFORMAT);
This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat);
if (This->lpOutFormat == NULL)
return AVIERR_MEMORY;
return hr; This->lpOutFormat->wFormatTag = WAVE_FORMAT_PCM;
if (acmFormatSuggest(NULL, This->lpInFormat, This->lpOutFormat,
This->cbOutFormat, ACM_FORMATSUGGESTF_WFORMATTAG) != S_OK)
return AVIERR_NOCOMPRESSOR;
}
} else if (This->lpOutFormat == NULL)
return AVIERR_ERROR; /* To what should I encode? */
if (acmStreamOpen(&This->has, NULL, This->lpInFormat, This->lpOutFormat,
NULL, 0, 0, ACM_STREAMOPENF_NONREALTIME) != S_OK)
return AVIERR_NOCOMPRESSOR;
/* update AVISTREAMINFO structure */
This->sInfo.dwSampleSize = This->lpOutFormat->nBlockAlign;
This->sInfo.dwScale = This->lpOutFormat->nBlockAlign;
This->sInfo.dwRate = This->lpOutFormat->nAvgBytesPerSec;
This->sInfo.dwQuality = (DWORD)ICQUALITY_DEFAULT;
SetRectEmpty(&This->sInfo.rcFrame);
/* convert positions and sizes to output format */
CONVERT_STREAM_to_THIS(&This->sInfo.dwStart);
CONVERT_STREAM_to_THIS(&This->sInfo.dwLength);
CONVERT_STREAM_to_THIS(&This->sInfo.dwSuggestedBufferSize);
return AVIERR_OK;
} }
static inline IAVIStreamImpl *impl_from_IAVIStream(IAVIStream *iface) static inline IAVIStreamImpl *impl_from_IAVIStream(IAVIStream *iface)
@ -681,63 +684,41 @@ static HRESULT WINAPI ACMStream_fnSetInfo(IAVIStream *iface,
return E_FAIL; return E_FAIL;
} }
/***********************************************************************/ static const struct IAVIStreamVtbl iacmst = {
ACMStream_fnQueryInterface,
ACMStream_fnAddRef,
ACMStream_fnRelease,
ACMStream_fnCreate,
ACMStream_fnInfo,
ACMStream_fnFindSample,
ACMStream_fnReadFormat,
ACMStream_fnSetFormat,
ACMStream_fnRead,
ACMStream_fnWrite,
ACMStream_fnDelete,
ACMStream_fnReadData,
ACMStream_fnWriteData,
ACMStream_fnSetInfo
};
static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This) HRESULT AVIFILE_CreateACMStream(REFIID riid, LPVOID *ppv)
{ {
HRESULT hr; IAVIStreamImpl *pstream;
HRESULT hr;
/* pre-conditions */ assert(riid != NULL && ppv != NULL);
assert(This != NULL);
assert(This->pStream != NULL);
if (This->has != NULL) *ppv = NULL;
return AVIERR_OK;
if (This->lpInFormat == NULL) { pstream = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAVIStreamImpl));
/* decode or encode the data from pStream */ if (pstream == NULL)
hr = AVIStreamFormatSize(This->pStream, This->sInfo.dwStart, &This->cbInFormat); return AVIERR_MEMORY;
if (FAILED(hr))
return hr;
This->lpInFormat = HeapAlloc(GetProcessHeap(), 0, This->cbInFormat);
if (This->lpInFormat == NULL)
return AVIERR_MEMORY;
hr = IAVIStream_ReadFormat(This->pStream, This->sInfo.dwStart, pstream->IAVIStream_iface.lpVtbl = &iacmst;
This->lpInFormat, &This->cbInFormat);
if (FAILED(hr))
return hr;
if (This->lpOutFormat == NULL) { hr = IAVIStream_QueryInterface(&pstream->IAVIStream_iface, riid, ppv);
/* we must decode to default format */ if (FAILED(hr))
This->cbOutFormat = sizeof(PCMWAVEFORMAT); HeapFree(GetProcessHeap(), 0, pstream);
This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat);
if (This->lpOutFormat == NULL)
return AVIERR_MEMORY;
This->lpOutFormat->wFormatTag = WAVE_FORMAT_PCM; return hr;
if (acmFormatSuggest(NULL, This->lpInFormat, This->lpOutFormat,
This->cbOutFormat, ACM_FORMATSUGGESTF_WFORMATTAG) != S_OK)
return AVIERR_NOCOMPRESSOR;
}
} else if (This->lpOutFormat == NULL)
return AVIERR_ERROR; /* To what should I encode? */
if (acmStreamOpen(&This->has, NULL, This->lpInFormat, This->lpOutFormat,
NULL, 0, 0, ACM_STREAMOPENF_NONREALTIME) != S_OK)
return AVIERR_NOCOMPRESSOR;
/* update AVISTREAMINFO structure */
This->sInfo.dwSampleSize = This->lpOutFormat->nBlockAlign;
This->sInfo.dwScale = This->lpOutFormat->nBlockAlign;
This->sInfo.dwRate = This->lpOutFormat->nAvgBytesPerSec;
This->sInfo.dwQuality = (DWORD)ICQUALITY_DEFAULT;
SetRectEmpty(&This->sInfo.rcFrame);
/* convert positions and sizes to output format */
CONVERT_STREAM_to_THIS(&This->sInfo.dwStart);
CONVERT_STREAM_to_THIS(&This->sInfo.dwLength);
CONVERT_STREAM_to_THIS(&This->sInfo.dwSuggestedBufferSize);
return AVIERR_OK;
} }