Skip to content

Commit cbb0151

Browse files
committed
Merge pull request opencv#19606 from alalek:reduce_ffmpeg_wrapper_size_4.x
2 parents ec4baf3 + 65eb946 commit cbb0151

19 files changed

+1206
-1108
lines changed

modules/core/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ ocv_target_link_libraries(${the_module} PRIVATE
145145
"${OPENCV_HAL_LINKER_LIBS}"
146146
)
147147

148+
if(OPENCV_CORE_EXCLUDE_C_API)
149+
ocv_target_compile_definitions(${the_module} PRIVATE "OPENCV_EXCLUDE_C_API=1")
150+
endif()
151+
148152
if(HAVE_HPX)
149153
ocv_target_link_libraries(${the_module} LINK_PRIVATE "${HPX_LIBRARIES}")
150154
endif()

modules/core/src/arithm.cpp

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,26 +57,6 @@ namespace cv
5757
* logical operations *
5858
\****************************************************************************************/
5959

60-
void convertAndUnrollScalar( const Mat& sc, int buftype, uchar* scbuf, size_t blocksize )
61-
{
62-
int scn = (int)sc.total(), cn = CV_MAT_CN(buftype);
63-
size_t esz = CV_ELEM_SIZE(buftype);
64-
BinaryFunc cvtFn = getConvertFunc(sc.depth(), buftype);
65-
CV_Assert(cvtFn);
66-
cvtFn(sc.ptr(), 1, 0, 1, scbuf, 1, Size(std::min(cn, scn), 1), 0);
67-
// unroll the scalar
68-
if( scn < cn )
69-
{
70-
CV_Assert( scn == 1 );
71-
size_t esz1 = CV_ELEM_SIZE1(buftype);
72-
for( size_t i = esz1; i < esz; i++ )
73-
scbuf[i] = scbuf[i - esz1];
74-
}
75-
for( size_t i = esz; i < blocksize*esz; i++ )
76-
scbuf[i] = scbuf[i - esz];
77-
}
78-
79-
8060
enum { OCL_OP_ADD=0, OCL_OP_SUB=1, OCL_OP_RSUB=2, OCL_OP_ABSDIFF=3, OCL_OP_MUL=4,
8161
OCL_OP_MUL_SCALE=5, OCL_OP_DIV_SCALE=6, OCL_OP_RECIP_SCALE=7, OCL_OP_ADDW=8,
8262
OCL_OP_AND=9, OCL_OP_OR=10, OCL_OP_XOR=11, OCL_OP_NOT=12, OCL_OP_MIN=13, OCL_OP_MAX=14,
@@ -1002,9 +982,7 @@ static BinaryFuncC* getRecipTab()
1002982
return recipTab;
1003983
}
1004984

1005-
}
1006-
1007-
void cv::multiply(InputArray src1, InputArray src2,
985+
void multiply(InputArray src1, InputArray src2,
1008986
OutputArray dst, double scale, int dtype)
1009987
{
1010988
CV_INSTRUMENT_REGION();
@@ -1013,29 +991,33 @@ void cv::multiply(InputArray src1, InputArray src2,
1013991
true, &scale, std::abs(scale - 1.0) < DBL_EPSILON ? OCL_OP_MUL : OCL_OP_MUL_SCALE);
1014992
}
1015993

1016-
void cv::divide(InputArray src1, InputArray src2,
994+
void divide(InputArray src1, InputArray src2,
1017995
OutputArray dst, double scale, int dtype)
1018996
{
1019997
CV_INSTRUMENT_REGION();
1020998

1021999
arithm_op(src1, src2, dst, noArray(), dtype, getDivTab(), true, &scale, OCL_OP_DIV_SCALE);
10221000
}
10231001

1024-
void cv::divide(double scale, InputArray src2,
1002+
void divide(double scale, InputArray src2,
10251003
OutputArray dst, int dtype)
10261004
{
10271005
CV_INSTRUMENT_REGION();
10281006

10291007
arithm_op(src2, src2, dst, noArray(), dtype, getRecipTab(), true, &scale, OCL_OP_RECIP_SCALE);
10301008
}
10311009

1010+
UMat UMat::mul(InputArray m, double scale) const
1011+
{
1012+
UMat dst;
1013+
multiply(*this, m, dst, scale);
1014+
return dst;
1015+
}
1016+
10321017
/****************************************************************************************\
10331018
* addWeighted *
10341019
\****************************************************************************************/
10351020

1036-
namespace cv
1037-
{
1038-
10391021
static BinaryFuncC* getAddWeightedTab()
10401022
{
10411023
static BinaryFuncC addWeightedTab[] =
@@ -1849,6 +1831,9 @@ void cv::inRange(InputArray _src, InputArray _lowerb,
18491831
}
18501832
}
18511833

1834+
1835+
#ifndef OPENCV_EXCLUDE_C_API
1836+
18521837
/****************************************************************************************\
18531838
* Earlier API: cvAdd etc. *
18541839
\****************************************************************************************/
@@ -2111,4 +2096,5 @@ cvMaxS( const void* srcarr1, double value, void* dstarr )
21112096
cv::max( src1, value, dst );
21122097
}
21132098

2099+
#endif // OPENCV_EXCLUDE_C_API
21142100
/* End of file. */

modules/core/src/array.cpp

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848

4949
#include "precomp.hpp"
5050

51+
#ifndef OPENCV_EXCLUDE_C_API
52+
5153
#define CV_ORIGIN_TL 0
5254
#define CV_ORIGIN_BL 1
5355

@@ -3211,53 +3213,6 @@ void DefaultDeleter<CvMatND>::operator ()(CvMatND* obj) const { cvReleaseMatND(&
32113213
void DefaultDeleter<CvSparseMat>::operator ()(CvSparseMat* obj) const { cvReleaseSparseMat(&obj); }
32123214
void DefaultDeleter<CvMemStorage>::operator ()(CvMemStorage* obj) const { cvReleaseMemStorage(&obj); }
32133215

3214-
template <typename T> static inline
3215-
void scalarToRawData_(const Scalar& s, T * const buf, const int cn, const int unroll_to)
3216-
{
3217-
int i = 0;
3218-
for(; i < cn; i++)
3219-
buf[i] = saturate_cast<T>(s.val[i]);
3220-
for(; i < unroll_to; i++)
3221-
buf[i] = buf[i-cn];
3222-
}
3223-
3224-
void scalarToRawData(const Scalar& s, void* _buf, int type, int unroll_to)
3225-
{
3226-
CV_INSTRUMENT_REGION();
3227-
3228-
const int depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type);
3229-
CV_Assert(cn <= 4);
3230-
switch(depth)
3231-
{
3232-
case CV_8U:
3233-
scalarToRawData_<uchar>(s, (uchar*)_buf, cn, unroll_to);
3234-
break;
3235-
case CV_8S:
3236-
scalarToRawData_<schar>(s, (schar*)_buf, cn, unroll_to);
3237-
break;
3238-
case CV_16U:
3239-
scalarToRawData_<ushort>(s, (ushort*)_buf, cn, unroll_to);
3240-
break;
3241-
case CV_16S:
3242-
scalarToRawData_<short>(s, (short*)_buf, cn, unroll_to);
3243-
break;
3244-
case CV_32S:
3245-
scalarToRawData_<int>(s, (int*)_buf, cn, unroll_to);
3246-
break;
3247-
case CV_32F:
3248-
scalarToRawData_<float>(s, (float*)_buf, cn, unroll_to);
3249-
break;
3250-
case CV_64F:
3251-
scalarToRawData_<double>(s, (double*)_buf, cn, unroll_to);
3252-
break;
3253-
case CV_16F:
3254-
scalarToRawData_<float16_t>(s, (float16_t*)_buf, cn, unroll_to);
3255-
break;
3256-
default:
3257-
CV_Error(CV_StsUnsupportedFormat,"");
3258-
}
3259-
}
3260-
32613216
} // cv::
32623217

32633218

@@ -3295,4 +3250,5 @@ void* cvClone( const void* struct_ptr )
32953250
}
32963251

32973252

3253+
#endif // OPENCV_EXCLUDE_C_API
32983254
/* End of file. */

modules/core/src/convert_c.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include "precomp.hpp"
77

8+
#ifndef OPENCV_EXCLUDE_C_API
89

910
CV_IMPL void
1011
cvSplit( const void* srcarr, void* dstarr0, void* dstarr1, void* dstarr2, void* dstarr3 )
@@ -132,3 +133,5 @@ CV_IMPL void cvNormalize( const CvArr* srcarr, CvArr* dstarr,
132133
CV_Assert( dst.size() == src.size() && src.channels() == dst.channels() );
133134
cv::normalize( src, dst, a, b, norm_type, dst.type(), mask );
134135
}
136+
137+
#endif // OPENCV_EXCLUDE_C_API

modules/core/src/convert_scale.dispatch.cpp

Lines changed: 0 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include "convert_scale.simd.hpp"
1010
#include "convert_scale.simd_declarations.hpp" // defines CV_CPU_DISPATCH_MODES_ALL=AVX2,...,BASELINE based on CMakeLists.txt content
1111

12-
1312
namespace cv
1413
{
1514

@@ -117,143 +116,4 @@ void convertScaleAbs(InputArray _src, OutputArray _dst, double alpha, double bet
117116
}
118117
}
119118

120-
//==================================================================================================
121-
122-
#ifdef HAVE_OPENCL
123-
124-
static bool ocl_normalize( InputArray _src, InputOutputArray _dst, InputArray _mask, int dtype,
125-
double scale, double delta )
126-
{
127-
UMat src = _src.getUMat();
128-
129-
if( _mask.empty() )
130-
src.convertTo( _dst, dtype, scale, delta );
131-
else if (src.channels() <= 4)
132-
{
133-
const ocl::Device & dev = ocl::Device::getDefault();
134-
135-
int stype = _src.type(), sdepth = CV_MAT_DEPTH(stype), cn = CV_MAT_CN(stype),
136-
ddepth = CV_MAT_DEPTH(dtype), wdepth = std::max(CV_32F, std::max(sdepth, ddepth)),
137-
rowsPerWI = dev.isIntel() ? 4 : 1;
138-
139-
float fscale = static_cast<float>(scale), fdelta = static_cast<float>(delta);
140-
bool haveScale = std::fabs(scale - 1) > DBL_EPSILON,
141-
haveZeroScale = !(std::fabs(scale) > DBL_EPSILON),
142-
haveDelta = std::fabs(delta) > DBL_EPSILON,
143-
doubleSupport = dev.doubleFPConfig() > 0;
144-
145-
if (!haveScale && !haveDelta && stype == dtype)
146-
{
147-
_src.copyTo(_dst, _mask);
148-
return true;
149-
}
150-
if (haveZeroScale)
151-
{
152-
_dst.setTo(Scalar(delta), _mask);
153-
return true;
154-
}
155-
156-
if ((sdepth == CV_64F || ddepth == CV_64F) && !doubleSupport)
157-
return false;
158-
159-
char cvt[2][40];
160-
String opts = format("-D srcT=%s -D dstT=%s -D convertToWT=%s -D cn=%d -D rowsPerWI=%d"
161-
" -D convertToDT=%s -D workT=%s%s%s%s -D srcT1=%s -D dstT1=%s",
162-
ocl::typeToStr(stype), ocl::typeToStr(dtype),
163-
ocl::convertTypeStr(sdepth, wdepth, cn, cvt[0]), cn,
164-
rowsPerWI, ocl::convertTypeStr(wdepth, ddepth, cn, cvt[1]),
165-
ocl::typeToStr(CV_MAKE_TYPE(wdepth, cn)),
166-
doubleSupport ? " -D DOUBLE_SUPPORT" : "",
167-
haveScale ? " -D HAVE_SCALE" : "",
168-
haveDelta ? " -D HAVE_DELTA" : "",
169-
ocl::typeToStr(sdepth), ocl::typeToStr(ddepth));
170-
171-
ocl::Kernel k("normalizek", ocl::core::normalize_oclsrc, opts);
172-
if (k.empty())
173-
return false;
174-
175-
UMat mask = _mask.getUMat(), dst = _dst.getUMat();
176-
177-
ocl::KernelArg srcarg = ocl::KernelArg::ReadOnlyNoSize(src),
178-
maskarg = ocl::KernelArg::ReadOnlyNoSize(mask),
179-
dstarg = ocl::KernelArg::ReadWrite(dst);
180-
181-
if (haveScale)
182-
{
183-
if (haveDelta)
184-
k.args(srcarg, maskarg, dstarg, fscale, fdelta);
185-
else
186-
k.args(srcarg, maskarg, dstarg, fscale);
187-
}
188-
else
189-
{
190-
if (haveDelta)
191-
k.args(srcarg, maskarg, dstarg, fdelta);
192-
else
193-
k.args(srcarg, maskarg, dstarg);
194-
}
195-
196-
size_t globalsize[2] = { (size_t)src.cols, ((size_t)src.rows + rowsPerWI - 1) / rowsPerWI };
197-
return k.run(2, globalsize, NULL, false);
198-
}
199-
else
200-
{
201-
UMat temp;
202-
src.convertTo( temp, dtype, scale, delta );
203-
temp.copyTo( _dst, _mask );
204-
}
205-
206-
return true;
207-
}
208-
209-
#endif
210-
211-
void normalize(InputArray _src, InputOutputArray _dst, double a, double b,
212-
int norm_type, int rtype, InputArray _mask)
213-
{
214-
CV_INSTRUMENT_REGION();
215-
216-
double scale = 1, shift = 0;
217-
int type = _src.type(), depth = CV_MAT_DEPTH(type);
218-
219-
if( rtype < 0 )
220-
rtype = _dst.fixedType() ? _dst.depth() : depth;
221-
222-
if( norm_type == CV_MINMAX )
223-
{
224-
double smin = 0, smax = 0;
225-
double dmin = MIN( a, b ), dmax = MAX( a, b );
226-
minMaxIdx( _src, &smin, &smax, 0, 0, _mask );
227-
scale = (dmax - dmin)*(smax - smin > DBL_EPSILON ? 1./(smax - smin) : 0);
228-
if( rtype == CV_32F )
229-
{
230-
scale = (float)scale;
231-
shift = (float)dmin - (float)(smin*scale);
232-
}
233-
else
234-
shift = dmin - smin*scale;
235-
}
236-
else if( norm_type == CV_L2 || norm_type == CV_L1 || norm_type == CV_C )
237-
{
238-
scale = norm( _src, norm_type, _mask );
239-
scale = scale > DBL_EPSILON ? a/scale : 0.;
240-
shift = 0;
241-
}
242-
else
243-
CV_Error( CV_StsBadArg, "Unknown/unsupported norm type" );
244-
245-
CV_OCL_RUN(_dst.isUMat(),
246-
ocl_normalize(_src, _dst, _mask, rtype, scale, shift))
247-
248-
Mat src = _src.getMat();
249-
if( _mask.empty() )
250-
src.convertTo( _dst, rtype, scale, shift );
251-
else
252-
{
253-
Mat temp;
254-
src.convertTo( temp, rtype, scale, shift );
255-
temp.copyTo( _dst, _mask );
256-
}
257-
}
258-
259119
} // namespace

0 commit comments

Comments
 (0)