avifil32: Avoid the forward declaration of the IAVIStream methods.
This commit is contained in:
parent
1f8e505dc2
commit
c567d1e461
|
@ -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 {
|
||||
/* IUnknown stuff */
|
||||
IAVIStream IAVIStream_iface;
|
||||
|
@ -102,28 +70,63 @@ typedef struct _IAVIStreamImpl {
|
|||
&__bytes, ACM_STREAMSIZEF_DESTINATION); \
|
||||
*(a) = __bytes / This->lpInFormat->nBlockAlign; } while(0)
|
||||
|
||||
static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This);
|
||||
|
||||
HRESULT AVIFILE_CreateACMStream(REFIID riid, LPVOID *ppv)
|
||||
static HRESULT AVIFILE_OpenCompressor(IAVIStreamImpl *This)
|
||||
{
|
||||
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 (pstream == NULL)
|
||||
return AVIERR_MEMORY;
|
||||
if (This->lpInFormat == NULL) {
|
||||
/* decode or encode the data from pStream */
|
||||
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 (FAILED(hr))
|
||||
HeapFree(GetProcessHeap(), 0, pstream);
|
||||
if (This->lpOutFormat == NULL) {
|
||||
/* we must decode to default format */
|
||||
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)
|
||||
|
@ -681,63 +684,41 @@ static HRESULT WINAPI ACMStream_fnSetInfo(IAVIStream *iface,
|
|||
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(This != NULL);
|
||||
assert(This->pStream != NULL);
|
||||
assert(riid != NULL && ppv != NULL);
|
||||
|
||||
if (This->has != NULL)
|
||||
return AVIERR_OK;
|
||||
*ppv = NULL;
|
||||
|
||||
if (This->lpInFormat == NULL) {
|
||||
/* decode or encode the data from pStream */
|
||||
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 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAVIStreamImpl));
|
||||
if (pstream == NULL)
|
||||
return AVIERR_MEMORY;
|
||||
|
||||
hr = IAVIStream_ReadFormat(This->pStream, This->sInfo.dwStart,
|
||||
This->lpInFormat, &This->cbInFormat);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
pstream->IAVIStream_iface.lpVtbl = &iacmst;
|
||||
|
||||
if (This->lpOutFormat == NULL) {
|
||||
/* we must decode to default format */
|
||||
This->cbOutFormat = sizeof(PCMWAVEFORMAT);
|
||||
This->lpOutFormat = HeapAlloc(GetProcessHeap(), 0, This->cbOutFormat);
|
||||
if (This->lpOutFormat == NULL)
|
||||
return AVIERR_MEMORY;
|
||||
hr = IAVIStream_QueryInterface(&pstream->IAVIStream_iface, riid, ppv);
|
||||
if (FAILED(hr))
|
||||
HeapFree(GetProcessHeap(), 0, pstream);
|
||||
|
||||
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;
|
||||
return hr;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue