MCPcopy Create free account
hub / github.com/CRVI/OpenCLIPP / PrepareFor

Method PrepareFor

C++/programs/Integral.cpp:42–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40namespace OpenCLIPP
41{
42void Integral::PrepareFor(ImageBase& Source)
43{
44 ImageProgram::PrepareFor(Source);
45
46 SSize VerticalImgSize_F32 = {GetNbGroupsW(Source) - 1, Source.Height()};
47 SSize HorizontalImgSize_F32 = {Source.Width(), GetNbGroupsH(Source) - 1};
48
49 if (VerticalImgSize_F32.Width == 0)
50 VerticalImgSize_F32.Width = 1;
51
52 if (HorizontalImgSize_F32.Height == 0)
53 HorizontalImgSize_F32.Height = 1;
54
55 // Check validity of current temp buffers
56 if (m_VerticalJunctions_F32 != nullptr &&
57 uint(VerticalImgSize_F32.Width) <= m_VerticalJunctions_F32->Width() &&
58 uint(VerticalImgSize_F32.Height) <= m_VerticalJunctions_F32->Height() &&
59 uint(HorizontalImgSize_F32.Width) <= m_HorizontalJunctions_F32->Width() &&
60 uint(HorizontalImgSize_F32.Height) <= m_HorizontalJunctions_F32->Height())
61 {
62 // Buffers are good
63 return;
64 }
65
66 // Create buffers for temporary results
67 m_VerticalJunctions_F32 = std::make_shared<TempImage>(*m_CL, VerticalImgSize_F32, SImage::F32);
68 m_HorizontalJunctions_F32 = std::make_shared<TempImage>(*m_CL, HorizontalImgSize_F32, SImage::F32);
69
70 //-------------------------------------------------------------------------------------
71 SSize VerticalImgSize_F64 = {GetNbGroupsW(Source) - 1, Source.Height()};
72 SSize HorizontalImgSize_F64 = {Source.Width(), GetNbGroupsH(Source) - 1};
73
74 if (VerticalImgSize_F64.Width == 0)
75 VerticalImgSize_F64.Width = 1;
76
77 if (HorizontalImgSize_F64.Height == 0)
78 HorizontalImgSize_F64.Height = 1;
79
80 // Check validity of current temp buffers
81 if (m_VerticalJunctions_F64 != nullptr &&
82 uint(VerticalImgSize_F64.Width) <= m_VerticalJunctions_F64->Width() &&
83 uint(VerticalImgSize_F64.Height) <= m_VerticalJunctions_F64->Height() &&
84 uint(HorizontalImgSize_F64.Width) <= m_HorizontalJunctions_F64->Width() &&
85 uint(HorizontalImgSize_F64.Height) <= m_HorizontalJunctions_F64->Height() &&
86 Source.IsFloat() == m_VerticalJunctions_F64->IsFloat())
87 {
88 // Buffers are good
89 return;
90 }
91
92 // Create buffers for temporary results
93 m_VerticalJunctions_F64 = std::make_shared<TempImage>(*m_CL, VerticalImgSize_F64, SImage::F64);
94 m_HorizontalJunctions_F64 = std::make_shared<TempImage>(*m_CL, HorizontalImgSize_F64, SImage::F64);
95}
96
97void Integral::IntegralSum(Image& Source, Image& Dest)
98{

Callers

nothing calls this directly

Calls 5

GetNbGroupsWFunction · 0.85
GetNbGroupsHFunction · 0.85
HeightMethod · 0.80
WidthMethod · 0.80
IsFloatMethod · 0.80

Tested by

no test coverage detected