Commit 115260c4 authored by Michael Günnewig's avatar Michael Günnewig Committed by Alexandre Julliard

- Fixed usage of handler instead of type in AVIMakeCompressedStream.

- Implemented AVIBuildFilterA. - Started to implement AVIBuildFilterW.
parent 48285684
......@@ -691,7 +691,7 @@ HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM *ppsCompressed,
if (FAILED(hr))
return hr;
wsprintfA(szRegKey, "AVIFile\\Compressors\\%4.4s", (char*)&asiw.fccHandler);
wsprintfA(szRegKey, "AVIFile\\Compressors\\%4.4s", (char*)&asiw.fccType);
if (RegQueryValueA(HKEY_CLASSES_ROOT, szRegKey, szValue, &size) != ERROR_SUCCESS)
return AVIERR_UNSUPPORTED;
if (AVIFILE_CLSIDFromString(szValue, &clsidHandler) != S_OK)
......@@ -850,7 +850,10 @@ LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime)
*/
HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving)
{
FIXME("(%p,%ld,%d): stub\n", szFilter, cbFilter, fSaving);
LPWSTR wszFilter;
HRESULT hr;
TRACE("(%p,%ld,%d)\n", szFilter, cbFilter, fSaving);
/* check parameters */
if (szFilter == NULL)
......@@ -861,7 +864,19 @@ HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving)
szFilter[0] = 0;
szFilter[1] = 0;
return AVIERR_UNSUPPORTED;
wszFilter = (LPWSTR)GlobalAllocPtr(GHND, cbFilter);
if (wszFilter == NULL)
return AVIERR_MEMORY;
hr = AVIBuildFilterW(wszFilter, cbFilter, fSaving);
if (SUCCEEDED(hr)) {
WideCharToMultiByte(CP_ACP, 0, wszFilter, cbFilter,
szFilter, cbFilter, NULL, NULL);
}
GlobalFreePtr(wszFilter);
return hr;
}
/***********************************************************************
......@@ -869,7 +884,10 @@ HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving)
*/
HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving)
{
FIXME("(%p,%ld,%d): stub\n", szFilter, cbFilter, fSaving);
WCHAR szAllFiles[40];
LONG size;
FIXME("(%p,%ld,%d): partial stub\n", szFilter, cbFilter, fSaving);
/* check parameters */
if (szFilter == NULL)
......@@ -877,10 +895,35 @@ HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving)
if (cbFilter < 2)
return AVIERR_BADSIZE;
szFilter[0] = 0;
szFilter[1] = 0;
/* FIXME:
*
* 1. iterate over HKEY_CLASSES_ROOT\\AVIFile\\Extensions and collect
* extensions and CLSID's
* 2. iterate over collected CLSID's and copy it's description and it's
* extensions to szFilter if it fits
*
* First filter is named "All multimedia files" and it's ilter is a
* collection of all possible extensions except "*.*".
*/
/* add "All files" "*.*" filter if enough space left */
size = LoadStringW(AVIFILE_hModule, IDS_ALLFILES,
szAllFiles, sizeof(szAllFiles));
if (cbFilter > size) {
int i;
/* replace '@' with \000 to seperate description of filter */
for (i = 0; i < size && szAllFiles[i] != 0; i++) {
if (szAllFiles[i] == '@') {
szAllFiles[i] = 0;
break;
}
}
memcpy(szFilter, szAllFiles, size);
}
return AVIERR_UNSUPPORTED;
return AVIERR_OK;
}
/***********************************************************************
......
......@@ -22,6 +22,7 @@ STRINGTABLE DISCARDABLE
{
IDS_WAVESTREAMFORMAT "Waveform: %s"
IDS_WAVEFILETYPE "Waveform"
IDS_ALLFILES "Alle Dateien (*.*)@*.*"
IDS_VIDEO "Video"
IDS_AUDIO "Audio"
IDS_AVISTREAMFORMAT "%s %s #%d"
......
......@@ -22,6 +22,7 @@ STRINGTABLE DISCARDABLE
{
IDS_WAVESTREAMFORMAT "Waveform: %s"
IDS_WAVEFILETYPE "Waveform"
IDS_ALLFILES "All files (*.*)@*.*"
IDS_VIDEO "video"
IDS_AUDIO "audio"
IDS_AVISTREAMFORMAT "%s %s #%d"
......
......@@ -32,8 +32,14 @@
#define DIBWIDTHBYTES(bi) WIDTHBYTES((bi).biWidth * (bi).biBitCount)
#endif
#ifndef DIBPTR
#define DIBPTR(lp) ((LPBYTE)(lp) + (lp)->biSize + \
(lp)->biClrUsed * sizeof(RGBQUAD))
#endif
#define IDS_WAVESTREAMFORMAT 0x0100
#define IDS_WAVEFILETYPE 0x0101
#define IDS_ALLFILES 0x0185
#define IDS_VIDEO 0x0189
#define IDS_AUDIO 0x0190
#define IDS_AVISTREAMFORMAT 0x0191
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment