@@ -1140,78 +1140,45 @@ int Mat::checkVector(int _elemChannels, int _depth, bool _requireContinuous) con
1140
1140
? (int )(total ()*channels ()/_elemChannels) : -1 ;
1141
1141
}
1142
1142
1143
+ template <typename T> static inline
1144
+ void scalarToRawData (const Scalar& s, T * const buf, const int cn, const int unroll_to)
1145
+ {
1146
+ int i = 0 ;
1147
+ for (; i < cn; i++)
1148
+ buf[i] = saturate_cast<T>(s.val [i]);
1149
+ for (; i < unroll_to; i++)
1150
+ buf[i] = buf[i-cn];
1151
+ }
1143
1152
1144
1153
void scalarToRawData (const Scalar& s, void * _buf, int type, int unroll_to)
1145
1154
{
1146
1155
CV_INSTRUMENT_REGION ()
1147
1156
1148
- int i, depth = CV_MAT_DEPTH (type), cn = CV_MAT_CN (type);
1157
+ const int depth = CV_MAT_DEPTH (type), cn = CV_MAT_CN (type);
1149
1158
CV_Assert (cn <= 4 );
1150
1159
switch (depth)
1151
1160
{
1152
1161
case CV_8U:
1153
- {
1154
- uchar* buf = (uchar*)_buf;
1155
- for (i = 0 ; i < cn; i++)
1156
- buf[i] = saturate_cast<uchar>(s.val [i]);
1157
- for (; i < unroll_to; i++)
1158
- buf[i] = buf[i-cn];
1159
- }
1162
+ scalarToRawData<uchar>(s, (uchar*)_buf, cn, unroll_to);
1160
1163
break ;
1161
1164
case CV_8S:
1162
- {
1163
- schar* buf = (schar*)_buf;
1164
- for (i = 0 ; i < cn; i++)
1165
- buf[i] = saturate_cast<schar>(s.val [i]);
1166
- for (; i < unroll_to; i++)
1167
- buf[i] = buf[i-cn];
1168
- }
1165
+ scalarToRawData<schar>(s, (schar*)_buf, cn, unroll_to);
1169
1166
break ;
1170
1167
case CV_16U:
1171
- {
1172
- ushort* buf = (ushort*)_buf;
1173
- for (i = 0 ; i < cn; i++)
1174
- buf[i] = saturate_cast<ushort>(s.val [i]);
1175
- for (; i < unroll_to; i++)
1176
- buf[i] = buf[i-cn];
1177
- }
1168
+ scalarToRawData<ushort>(s, (ushort*)_buf, cn, unroll_to);
1178
1169
break ;
1179
1170
case CV_16S:
1180
- {
1181
- short * buf = (short *)_buf;
1182
- for (i = 0 ; i < cn; i++)
1183
- buf[i] = saturate_cast<short >(s.val [i]);
1184
- for (; i < unroll_to; i++)
1185
- buf[i] = buf[i-cn];
1186
- }
1171
+ scalarToRawData<short >(s, (short *)_buf, cn, unroll_to);
1187
1172
break ;
1188
1173
case CV_32S:
1189
- {
1190
- int * buf = (int *)_buf;
1191
- for (i = 0 ; i < cn; i++)
1192
- buf[i] = saturate_cast<int >(s.val [i]);
1193
- for (; i < unroll_to; i++)
1194
- buf[i] = buf[i-cn];
1195
- }
1174
+ scalarToRawData<int >(s, (int *)_buf, cn, unroll_to);
1196
1175
break ;
1197
1176
case CV_32F:
1198
- {
1199
- float * buf = (float *)_buf;
1200
- for (i = 0 ; i < cn; i++)
1201
- buf[i] = saturate_cast<float >(s.val [i]);
1202
- for (; i < unroll_to; i++)
1203
- buf[i] = buf[i-cn];
1204
- }
1177
+ scalarToRawData<float >(s, (float *)_buf, cn, unroll_to);
1205
1178
break ;
1206
1179
case CV_64F:
1207
- {
1208
- double * buf = (double *)_buf;
1209
- for (i = 0 ; i < cn; i++)
1210
- buf[i] = saturate_cast<double >(s.val [i]);
1211
- for (; i < unroll_to; i++)
1212
- buf[i] = buf[i-cn];
1180
+ scalarToRawData<double >(s, (double *)_buf, cn, unroll_to);
1213
1181
break ;
1214
- }
1215
1182
default :
1216
1183
CV_Error (CV_StsUnsupportedFormat," " );
1217
1184
}
0 commit comments