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 {
|
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 */
|
||||||
|
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;
|
return AVIERR_MEMORY;
|
||||||
|
|
||||||
pstream->IAVIStream_iface.lpVtbl = &iacmst;
|
hr = IAVIStream_ReadFormat(This->pStream, This->sInfo.dwStart,
|
||||||
|
This->lpInFormat, &This->cbInFormat);
|
||||||
hr = IAVIStream_QueryInterface(&pstream->IAVIStream_iface, riid, ppv);
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
HeapFree(GetProcessHeap(), 0, pstream);
|
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
|
IAVIStreamImpl *pstream;
|
||||||
HRESULT hr;
|
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);
|
|
||||||
if (FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
This->lpInFormat = HeapAlloc(GetProcessHeap(), 0, This->cbInFormat);
|
|
||||||
if (This->lpInFormat == NULL)
|
|
||||||
return AVIERR_MEMORY;
|
return AVIERR_MEMORY;
|
||||||
|
|
||||||
hr = IAVIStream_ReadFormat(This->pStream, This->sInfo.dwStart,
|
pstream->IAVIStream_iface.lpVtbl = &iacmst;
|
||||||
This->lpInFormat, &This->cbInFormat);
|
|
||||||
|
hr = IAVIStream_QueryInterface(&pstream->IAVIStream_iface, riid, ppv);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
|
HeapFree(GetProcessHeap(), 0, pstream);
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue