Added patch to convert between AVISTREAMINFO (16 bit) and AVISTREAMINFOA in avifile.dll16.

This commit is contained in:
Sebastian Lackner 2016-02-08 14:08:32 +01:00
parent 24adcdb199
commit 731dde08ca
3 changed files with 151 additions and 0 deletions

View File

@ -0,0 +1,148 @@
From 3cdd530b2c17ee0cdc6a1fcc37b28c180310656a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
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

View File

@ -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

View File

@ -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