1.新增加IConfig虚拟类,以适配新版本参数配置类config_new
2.增加imagematqueue类中锁其他线程修改类成员变量锁不生效问题;
This commit is contained in:
parent
72e9dd0078
commit
3b35c7808c
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
class IConfig
|
||||
{
|
||||
public:
|
||||
IConfig(void) {};
|
||||
virtual ~IConfig(void) {};
|
||||
virtual unsigned int GetData() = 0;
|
||||
};
|
||||
|
|
@ -31,8 +31,8 @@ enum Cam_Options {
|
|||
scanner_error_clean ,//异常清除
|
||||
scanner_Init_Status, //状态初始化使能
|
||||
scanner_IIC_Config, //IIC配置使能
|
||||
scanner_Speed_Config //速度配置使能
|
||||
|
||||
scanner_Speed_Config, //速度配置使能
|
||||
scanner_scan_status
|
||||
};
|
||||
|
||||
class IGDevice
|
||||
|
|
|
@ -32,8 +32,10 @@ ImageMatQueue::~ImageMatQueue(void)
|
|||
bRun = false;
|
||||
at_prced_image_remains = 0;
|
||||
atm_orgin_image_remains = 0;
|
||||
XdPrint("closeing m_threadProc\n");
|
||||
m_threadProc->join();
|
||||
m_threadProc = NULL;
|
||||
XdPrint("closed m_threadProc\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,11 +45,12 @@ void ImageMatQueue::pushMat(JpegBuffer& data)
|
|||
m_pImages.Put(data);
|
||||
atm_orgin_image_remains++;
|
||||
}
|
||||
|
||||
static int outnum =0;
|
||||
cv::Mat ImageMatQueue::popMat()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mtxJB);
|
||||
cv::Mat mat = _popMat();
|
||||
XdPrint("dequeue image %d \n", outnum++);
|
||||
at_prced_image_remains--;
|
||||
return mat;
|
||||
}
|
||||
|
@ -111,7 +114,7 @@ void ImageMatQueue::PaniusCount()
|
|||
|
||||
void ImageMatQueue::SetScanningStatus(bool isscannning)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_Locker);
|
||||
std::lock_guard<std::mutex> lock(m_mtxscan);
|
||||
iscanning = isscannning;
|
||||
}
|
||||
|
||||
|
@ -129,60 +132,68 @@ void ImageMatQueue::release_img_prc_thread()
|
|||
|
||||
bool ImageMatQueue::empty()
|
||||
{
|
||||
return ((atm_orgin_image_remains == 0 &&
|
||||
bool ret= ((atm_orgin_image_remains == 0 &&
|
||||
at_prced_image_remains == 0) && (!iscanning));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int index=0;
|
||||
void ImageMatQueue::proc()
|
||||
{
|
||||
JpegBuffer jb;
|
||||
while (bRun) {
|
||||
if (m_pImages.Size() <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
jb = m_pImages.Take();
|
||||
if (!m_pImages.IsShutDown() && !jb.empty()) {
|
||||
vector<cv::Mat> mats = jb.getMats();
|
||||
if (scanParam.m_OutHole.EnOutHole && mats.size() == 2){ //确保能够获取正反两面图
|
||||
if (!mats[0].empty() && !mats[1].empty())
|
||||
ImageOutHole().puncture(mats[0], mats[1], 50.0, scanParam.m_OutHole.OutHoleRatio / 100.0, 50);
|
||||
}
|
||||
//if (scanParam.m_OutHole.EnOutHole && mats.size() == 2){ //确保能够获取正反两面图
|
||||
// if (!mats[0].empty() && !mats[1].empty())
|
||||
// ImageOutHole().puncture(mats[0], mats[1], 50.0, scanParam.m_OutHole.OutHoleRatio / 100.0, 50);
|
||||
//}
|
||||
|
||||
//for (int i = 0; i < mats.size(); i++) {
|
||||
// if (!mats[i].empty()) {
|
||||
// for (int j = 0; j < m_iaList.size(); j++) {
|
||||
// if (mats[i].empty())//剔除空白页
|
||||
// break;
|
||||
|
||||
// m_iaList[j]->apply(mats[i], i);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
for (int i = 0; i < mats.size(); i++) {
|
||||
if (!mats[i].empty()) {
|
||||
for (int j = 0; j < m_iaList.size(); j++) {
|
||||
if (mats[i].empty())//剔除空白页
|
||||
break;
|
||||
//if (!scanParam.m_bDuplex && i == 1) {
|
||||
// mats[i].release();
|
||||
// break;
|
||||
//}
|
||||
|
||||
m_iaList[j]->apply(mats[i], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < mats.size(); i++) {
|
||||
if (!scanParam.m_bDuplex && i == 1) {
|
||||
mats[i].release();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!mats[i].empty())
|
||||
if (!mats[i].empty()){
|
||||
EnqueueMat(mats[i]);
|
||||
XdPrint("enqueue image %d \n", index++);
|
||||
}
|
||||
}
|
||||
|
||||
if (scanParam.m_bMultiOutput)
|
||||
{
|
||||
for (int i = 0; i < mats.size(); i++)
|
||||
{
|
||||
ImageMultiOutput m_mlt;
|
||||
Mat m_filterMat = m_mlt.GetMultiFilterMat(mats[i], 2);
|
||||
if (!m_filterMat.empty()) {
|
||||
if (!scanParam.m_bDuplex && i == 1) {
|
||||
mats[i].release();
|
||||
break;
|
||||
}
|
||||
//if (scanParam.m_bMultiOutput)
|
||||
//{
|
||||
// for (int i = 0; i < mats.size(); i++)
|
||||
// {
|
||||
// ImageMultiOutput m_mlt;
|
||||
// Mat m_filterMat = m_mlt.GetMultiFilterMat(mats[i], 2);
|
||||
// if (!m_filterMat.empty()) {
|
||||
// if (!scanParam.m_bDuplex && i == 1) {
|
||||
// mats[i].release();
|
||||
// break;
|
||||
// }
|
||||
|
||||
if (!m_filterMat.empty())
|
||||
EnqueueMat(m_filterMat);
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (!m_filterMat.empty())
|
||||
// EnqueueMat(m_filterMat);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
PaniusCount();
|
||||
}
|
||||
jb = JpegBuffer();
|
||||
|
|
|
@ -44,6 +44,7 @@ private:
|
|||
BlockingQueue<JpegBuffer> m_pImages;
|
||||
std::mutex m_Locker;
|
||||
std::mutex m_mtxJB;
|
||||
std::mutex m_mtxscan;
|
||||
std::unique_ptr<thread> m_threadProc;
|
||||
volatile bool bRun;
|
||||
bool isduplex;
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
#include "stdafx.h"
|
||||
#include "config_new.h"
|
||||
|
||||
config_new::config_new(SFreeImage param)
|
||||
{
|
||||
ms.value = 0;
|
||||
init_paperdic();
|
||||
init_colormodedic();
|
||||
init_dpidic();
|
||||
set_unused_default_value();
|
||||
ms.double_paper = param.m_HardWareParams.DoubleFeederOn;
|
||||
ms.color_model = pixType[param.m_HardWareParams.PixType];
|
||||
ms.dpi = resolutions[param.m_HardWareParams.Resolution];
|
||||
ms.papar_type = paperTypes[param.m_HardWareParams.PaperType];
|
||||
ms.paper = ms.papar_type == 3;
|
||||
ms.skew_enable = param.m_HardWareParams.SkrewDetectOn;
|
||||
ms.skew_parameter = param.m_HardWareParams.SkrewDetectLevel;
|
||||
ms.staple_enable = param.m_HardWareParams.StapleDetectOn;
|
||||
}
|
||||
|
||||
config_new::~config_new(void)
|
||||
{
|
||||
}
|
||||
|
||||
unsigned int config_new::GetData()
|
||||
{
|
||||
return ms.value;
|
||||
}
|
||||
|
||||
void config_new::init_paperdic(void)
|
||||
{
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(11, 0));//A3
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(1, 1));//A4
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(60, 2));//A4R
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(5, 2));//A5
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(61, 2));//A5R
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(13, 2));//A6
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(62, 2));//A6R
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(6, 0));//B4
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(2, 0));//B5
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(70, 1));//B5R
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(7, 2));//B6
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(71, 2));//B6R
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(3, 1));//LETTER
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(80, 2));//LETTERR
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(81, 0));//DOUBLE LETTER
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(4, 0));//LEGAL
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(90, 0));//Auto °´ÕÕA3½øÐÐɨÃè
|
||||
paperTypes.insert(std::pair<uint16_t, UINT32>(91, 3));//³¤Îĸå
|
||||
}
|
||||
|
||||
void config_new::init_colormodedic(void)
|
||||
{
|
||||
pixType.insert(std::pair<uint16_t, UINT32>(0, 0));//BW
|
||||
pixType.insert(std::pair<uint16_t, UINT32>(1, 0));//Gray
|
||||
pixType.insert(std::pair<uint16_t, UINT32>(2, 1));//RGB
|
||||
}
|
||||
|
||||
void config_new::init_dpidic(void)
|
||||
{
|
||||
resolutions.insert(std::pair<float, UINT32>(300, 1));//300
|
||||
resolutions.insert(std::pair<float, UINT32>(200, 0));//200
|
||||
resolutions.insert(std::pair<float, UINT32>(600, 2));//600
|
||||
}
|
||||
|
||||
void config_new::set_unused_default_value(void)
|
||||
{
|
||||
ms.error_clean = 0;
|
||||
ms.iic_config = 0;
|
||||
ms.iic_config_addr = 0;
|
||||
ms.pick_paper = 0;
|
||||
ms.scan_enable = 0;
|
||||
ms.status_init = 0;
|
||||
ms.v_setting = 0;
|
||||
ms.speed_set_enable = 0;
|
||||
ms.key_staple_enable = 0;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#pragma once
|
||||
#include "IConfig.h"
|
||||
#include "PublicFunc.h"
|
||||
#include "device_common.h"
|
||||
#include <map>
|
||||
|
||||
class config_new :
|
||||
public IConfig
|
||||
{
|
||||
public :
|
||||
config_new(SFreeImage param);
|
||||
virtual ~config_new(void);
|
||||
virtual unsigned int GetData() override;
|
||||
private:
|
||||
void init_paperdic(void);
|
||||
void init_colormodedic(void);
|
||||
void init_dpidic(void);
|
||||
void set_unused_default_value(void);
|
||||
private:
|
||||
std::map<unsigned short, unsigned int> paperTypes;
|
||||
std::map<unsigned short, unsigned int> pixType;
|
||||
std::map<float, unsigned int> resolutions;
|
||||
MotorSetting ms;
|
||||
};
|
||||
|
Binary file not shown.
|
@ -220,6 +220,7 @@
|
|||
<ClCompile Include="CJsonObject.cpp" />
|
||||
<ClCompile Include="CommonDS.cpp" />
|
||||
<ClCompile Include="CommonTWAIN.cpp" />
|
||||
<ClCompile Include="config_new.cpp" />
|
||||
<ClCompile Include="CScanner_FreeImage.cpp" />
|
||||
<ClCompile Include="CTiffWriter.cpp" />
|
||||
<ClCompile Include="CTWAINDS_Base.cpp" />
|
||||
|
@ -291,6 +292,7 @@
|
|||
<ClInclude Include="Common.h" />
|
||||
<ClInclude Include="CommonDS.h" />
|
||||
<ClInclude Include="CommonTWAIN.h" />
|
||||
<ClInclude Include="config_new.h" />
|
||||
<ClInclude Include="CScanner_FreeImage.h" />
|
||||
<ClInclude Include="CTiffWriter.h" />
|
||||
<ClInclude Include="CTWAINDS_Base.h" />
|
||||
|
@ -305,6 +307,7 @@
|
|||
<ClInclude Include="GScanO200.h" />
|
||||
<ClInclude Include="gscn_drv.h" />
|
||||
<ClInclude Include="hugaotwainds.h" />
|
||||
<ClInclude Include="IConfig.h" />
|
||||
<ClInclude Include="IGDevice.h" />
|
||||
<ClInclude Include="ImageAdjustColors.h" />
|
||||
<ClInclude Include="ImageApply.h" />
|
||||
|
|
|
@ -201,6 +201,9 @@
|
|||
<ClCompile Include="ImageMultiOutput.cpp">
|
||||
<Filter>图像处理</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="config_new.cpp">
|
||||
<Filter>代码文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="hugaotwainds.def">
|
||||
|
@ -421,6 +424,12 @@
|
|||
<ClInclude Include="GScanO200.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="IConfig.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="config_new.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="hugaotwainds.rc">
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<DebuggerFlavor Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WindowsLocalDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LocalDebuggerCommand>C:\Users\holdtecs\Desktop\极课Twain测试小软件release(32bit)\Sample.WPF.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommand>E:\软件安装包\xnviewer\xnviewer\xnview.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerWorkingDirectory>..\..\..\..\Windows\twain_32\huagoscan</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
|
|
|
@ -117,7 +117,7 @@ void hgConfigClass::setSkewDelection(bool value)
|
|||
setBit(11, value);
|
||||
}
|
||||
|
||||
UINT32 hgConfigClass::GetData()
|
||||
unsigned int hgConfigClass::GetData()
|
||||
{
|
||||
return m_data.to_ulong();
|
||||
}
|
||||
|
|
|
@ -5,17 +5,18 @@
|
|||
#include <map>
|
||||
#include <bitset>
|
||||
#include "PublicFunc.h"
|
||||
#include "IConfig.h"
|
||||
|
||||
typedef unsigned short uint16_t;
|
||||
|
||||
class hgConfigClass
|
||||
class hgConfigClass:public IConfig
|
||||
{
|
||||
public:
|
||||
hgConfigClass();
|
||||
hgConfigClass(SFreeImage param);
|
||||
~hgConfigClass();
|
||||
virtual ~hgConfigClass();
|
||||
|
||||
UINT32 GetData();
|
||||
virtual unsigned int GetData() override;
|
||||
private:
|
||||
enum Config_Scanner
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue