From 633e8b1236616a79b93d37aca9ae10fd34b800be Mon Sep 17 00:00:00 2001
From: Eugene Wang <8755753+soukoku@users.noreply.github.com>
Date: Sat, 8 Apr 2023 12:18:01 -0400
Subject: [PATCH] Moved DetermineBufferSize() to TW_SETUPMEMXFER
---
src/NTwain/Data/TWAINH.cs | 2 +-
src/NTwain/Data/TWAINH_EXTRAS.cs | 17 +++++++++++++++++
src/NTwain/TwainAppSession.Xfers.cs | 16 +---------------
3 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/src/NTwain/Data/TWAINH.cs b/src/NTwain/Data/TWAINH.cs
index aec2969..2c79128 100644
--- a/src/NTwain/Data/TWAINH.cs
+++ b/src/NTwain/Data/TWAINH.cs
@@ -2507,7 +2507,7 @@ namespace NTwain.Data
/// Provides the application information about the Source’s requirements and preferences regarding allocation of transfer buffer(s).
///
[StructLayout(LayoutKind.Sequential, Pack = 2)]
- public struct TW_SETUPMEMXFER
+ public partial struct TW_SETUPMEMXFER
{
public uint MinBufSize;
public uint MaxBufSize;
diff --git a/src/NTwain/Data/TWAINH_EXTRAS.cs b/src/NTwain/Data/TWAINH_EXTRAS.cs
index 715b7ea..db5d492 100644
--- a/src/NTwain/Data/TWAINH_EXTRAS.cs
+++ b/src/NTwain/Data/TWAINH_EXTRAS.cs
@@ -762,6 +762,23 @@ namespace NTwain.Data
}
}
+ partial struct TW_SETUPMEMXFER
+ {
+ ///
+ /// Determines the best buffer size from values
+ /// specified by source
+ ///
+ ///
+ public uint DetermineBufferSize()
+ {
+ if (Preferred != TwainConst.TWON_DONTCARE32) return Preferred;
+ if (MaxBufSize != TwainConst.TWON_DONTCARE32) return MaxBufSize;
+ if (MinBufSize != TwainConst.TWON_DONTCARE32) return MinBufSize;
+ // default to 16 kb if source doesn't really want to say what it needs
+ return 1024 * 16;
+ }
+ }
+
//partial struct TW_DEVICEEVENT
//{
// public TWDE Event { get { return (TWDE)_event; } }
diff --git a/src/NTwain/TwainAppSession.Xfers.cs b/src/NTwain/TwainAppSession.Xfers.cs
index 3909d95..f2cfb33 100644
--- a/src/NTwain/TwainAppSession.Xfers.cs
+++ b/src/NTwain/TwainAppSession.Xfers.cs
@@ -275,7 +275,7 @@ namespace NTwain
rc = DGControl.SetupMemXfer.Get(ref _appIdentity, ref _currentDS, out TW_SETUPMEMXFER memSetup);
if (rc == TWRC.SUCCESS)
{
- uint buffSize = DetermineBufferSize(memSetup);
+ uint buffSize = memSetup.DetermineBufferSize();
var memPtr = Alloc(buffSize);
TW_IMAGEMEMXFER memXfer = new()
@@ -357,20 +357,6 @@ namespace NTwain
return WrapInSTS(rc);
}
- private static uint DetermineBufferSize(TW_SETUPMEMXFER memSetup)
- {
- // default to 16 kb if source doesn't really want to say what it needs
- var buffSize = memSetup.Preferred;
- if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize;
-
- buffSize = memSetup.MaxBufSize;
- if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize;
-
- buffSize = memSetup.MinBufSize;
- if (buffSize != TwainConst.TWON_DONTCARE32) return buffSize;
-
- return 1024 * 16;
- }
private STS TransferFileImage(ref TW_PENDINGXFERS pending)
{