diff --git a/patches/avifile.dll16-AVIStreamGetFrame/0002-avifile-Convert-between-AVISTREAMINFO-16-bit-and-AVI.patch b/patches/avifile.dll16-AVIStreamGetFrame/0002-avifile-Convert-between-AVISTREAMINFO-16-bit-and-AVI.patch new file mode 100644 index 00000000..add72a7e --- /dev/null +++ b/patches/avifile.dll16-AVIStreamGetFrame/0002-avifile-Convert-between-AVISTREAMINFO-16-bit-and-AVI.patch @@ -0,0 +1,148 @@ +From 3cdd530b2c17ee0cdc6a1fcc37b28c180310656a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Mon, 8 Feb 2016 14:02:09 +0100 +Subject: avifile.dll16: Convert between AVISTREAMINFO (16 bit) and AVISTREAMINFOA. + +--- + dlls/avifile.dll16/avifile.dll16.spec | 4 +- + dlls/avifile.dll16/main.c | 100 ++++++++++++++++++++++++++++++++++ + 2 files changed, 102 insertions(+), 2 deletions(-) + +diff --git a/dlls/avifile.dll16/avifile.dll16.spec b/dlls/avifile.dll16/avifile.dll16.spec +index 0e19413..7a1aaea 100644 +--- a/dlls/avifile.dll16/avifile.dll16.spec ++++ b/dlls/avifile.dll16/avifile.dll16.spec +@@ -36,13 +36,13 @@ + 141 pascal AVIFileRelease(long) AVIFileRelease + 142 pascal AVIFileInfo(long ptr long) AVIFileInfoA + 143 pascal AVIFileGetStream(long ptr long long) AVIFileGetStream +-144 pascal AVIFileCreateStream(long ptr ptr) AVIFileCreateStreamA ++144 pascal AVIFileCreateStream(long ptr ptr) AVIFileCreateStream16 + 146 pascal AVIFileWriteData(long long ptr long) AVIFileWriteData + 147 pascal AVIFileReadData(long long ptr ptr) AVIFileReadData + 148 pascal AVIFileEndRecord(long) AVIFileEndRecord + 160 pascal AVIStreamAddRef(long) AVIStreamAddRef + 161 pascal AVIStreamRelease(long) AVIStreamRelease +-162 pascal AVIStreamInfo(long ptr long) AVIStreamInfoA ++162 pascal AVIStreamInfo(long ptr long) AVIStreamInfo16 + 163 pascal AVIStreamFindSample(long long long) AVIStreamFindSample + 164 pascal AVIStreamReadFormat(long long ptr ptr) AVIStreamReadFormat + 165 pascal AVIStreamReadData(long long ptr ptr) AVIStreamReadData +diff --git a/dlls/avifile.dll16/main.c b/dlls/avifile.dll16/main.c +index f780c43..8df1fe5 100644 +--- a/dlls/avifile.dll16/main.c ++++ b/dlls/avifile.dll16/main.c +@@ -27,6 +27,27 @@ + + WINE_DEFAULT_DEBUG_CHANNEL(avifile16); + ++typedef struct _AVISTREAMINFO16 { ++ DWORD fccType; ++ DWORD fccHandler; ++ DWORD dwFlags; ++ DWORD dwCaps; ++ WORD wPriority; ++ WORD wLanguage; ++ DWORD dwScale; ++ DWORD dwRate; ++ DWORD dwStart; ++ DWORD dwLength; ++ DWORD dwInitialFrames; ++ DWORD dwSuggestedBufferSize; ++ DWORD dwQuality; ++ DWORD dwSampleSize; ++ RECT16 rcFrame; ++ DWORD dwEditCount; ++ DWORD dwFormatChangeCount; ++ CHAR szName[64]; ++} AVISTREAMINFO16, *LPAVISTREAMINFO16, *PAVISTREAMINFO16; ++ + struct frame_wrapper16 + { + PGETFRAME pg; +@@ -135,3 +156,82 @@ HRESULT WINAPI AVIStreamGetFrameClose16(PGETFRAME pg) + HeapFree(GetProcessHeap(), 0, wrapper); + return hr; + } ++ ++/*********************************************************************** ++ * AVIFileCreateStream (AVIFILE.144) ++ */ ++HRESULT WINAPI AVIFileCreateStream16(PAVIFILE pfile, PAVISTREAM *ppavi, LPAVISTREAMINFO16 asi16) ++{ ++ AVISTREAMINFOA asi; ++ ++ if (!asi16) ++ return AVIFileCreateStreamA(pfile, ppavi, NULL); ++ ++ asi.fccType = asi16->fccType; ++ asi.fccHandler = asi16->fccHandler; ++ asi.dwFlags = asi16->dwFlags; ++ asi.dwCaps = asi16->dwCaps; ++ asi.wPriority = asi16->wPriority; ++ asi.wLanguage = asi16->wLanguage; ++ asi.dwScale = asi16->dwScale; ++ asi.dwRate = asi16->dwRate; ++ asi.dwStart = asi16->dwStart; ++ asi.dwLength = asi16->dwLength; ++ asi.dwInitialFrames = asi16->dwInitialFrames; ++ asi.dwSuggestedBufferSize = asi16->dwSuggestedBufferSize; ++ asi.dwQuality = asi16->dwQuality; ++ asi.dwSampleSize = asi16->dwSampleSize; ++ asi.rcFrame.left = asi16->rcFrame.left; ++ asi.rcFrame.top = asi16->rcFrame.top; ++ asi.rcFrame.right = asi16->rcFrame.right; ++ asi.rcFrame.bottom = asi16->rcFrame.bottom; ++ asi.dwEditCount = asi16->dwEditCount; ++ asi.dwFormatChangeCount = asi16->dwFormatChangeCount; ++ memcpy(&asi.szName, &asi16->szName, sizeof(asi.szName)); ++ ++ return AVIFileCreateStreamA(pfile, ppavi, &asi); ++} ++ ++ ++/*********************************************************************** ++ * AVIStreamInfo (AVIFILE.162) ++ */ ++HRESULT WINAPI AVIStreamInfo16(PAVISTREAM pstream, LPAVISTREAMINFO16 asi16, LONG size) ++{ ++ AVISTREAMINFOA asi; ++ HRESULT hr; ++ ++ if (!asi16) ++ return AVIStreamInfoA(pstream, NULL, size); ++ ++ if (size < sizeof(AVISTREAMINFO16)) ++ return AVIERR_BADSIZE; ++ ++ hr = AVIStreamInfoA(pstream, &asi, sizeof(asi)); ++ if (SUCCEEDED(hr)) ++ { ++ asi16->fccType = asi.fccType; ++ asi16->fccHandler = asi.fccHandler; ++ asi16->dwFlags = asi.dwFlags; ++ asi16->dwCaps = asi.dwCaps; ++ asi16->wPriority = asi.wPriority; ++ asi16->wLanguage = asi.wLanguage; ++ asi16->dwScale = asi.dwScale; ++ asi16->dwRate = asi.dwRate; ++ asi16->dwStart = asi.dwStart; ++ asi16->dwLength = asi.dwLength; ++ asi16->dwInitialFrames = asi.dwInitialFrames; ++ asi16->dwSuggestedBufferSize = asi.dwSuggestedBufferSize; ++ asi16->dwQuality = asi.dwQuality; ++ asi16->dwSampleSize = asi.dwSampleSize; ++ asi16->rcFrame.left = asi.rcFrame.left; ++ asi16->rcFrame.top = asi.rcFrame.top; ++ asi16->rcFrame.right = asi.rcFrame.right; ++ asi16->rcFrame.bottom = asi.rcFrame.bottom; ++ asi16->dwEditCount = asi.dwEditCount; ++ asi16->dwFormatChangeCount = asi.dwFormatChangeCount; ++ memcpy(&asi16->szName, &asi.szName, sizeof(asi.szName)); ++ } ++ ++ return hr; ++} +-- +2.7.0 + diff --git a/patches/avifile.dll16-AVIStreamGetFrame/definition b/patches/avifile.dll16-AVIStreamGetFrame/definition index aa793101..c4ca8eee 100644 --- a/patches/avifile.dll16-AVIStreamGetFrame/definition +++ b/patches/avifile.dll16-AVIStreamGetFrame/definition @@ -1 +1,2 @@ Fixes: Correctly convert result of AVIStreamGetFrame to a segptr in avifile.dll16 +Fixes: Convert between AVISTREAMINFO (16 bit) and AVISTREAMINFOA in avifile.dll16 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 3c01cf2b..604921bb 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -2779,8 +2779,10 @@ fi # | if test "$enable_avifile_dll16_AVIStreamGetFrame" -eq 1; then patch_apply avifile.dll16-AVIStreamGetFrame/0001-avifile-Correctly-convert-result-of-AVIStreamGetFram.patch + patch_apply avifile.dll16-AVIStreamGetFrame/0002-avifile-Convert-between-AVISTREAMINFO-16-bit-and-AVI.patch ( echo '+ { "Michael Müller", "avifile.dll16: Correctly convert result of AVIStreamGetFrame to a segptr.", 1 },'; + echo '+ { "Michael Müller", "avifile.dll16: Convert between AVISTREAMINFO (16 bit) and AVISTREAMINFOA.", 1 },'; ) >> "$patchlist" fi