- persistence.cpp code expects special sizeof value for passed structures
- this assumption is lead to memory corruption problems
- fixed/workarounded test to prevent memory corruption on Linux 32-bit systems
In YAML 1.0 the colon is mandatory. See http://yaml.org/spec/1.0/#id2558635.
This also allows prior releases to read YAML files created with the current version.
Major changes:
- modify the Base64 functions to compatible with `cvWriteRawData` and so
on.
- add a Base64 flag for FileStorage and outputs raw data in Base64
automatically.
- complete all testing and documentation.
I could not find the cause of the error:
```
C:\builds_ocv\precommit_opencl\opencv\modules\ts\src\ts_perf.cpp(361):
error: The difference between expect_max and actual_max is
8445966.0000002384, which exceeds eps, where
expect_max evaluates to 0.9999997615814209,
actual_max evaluates to 8445967, and
eps evaluates to 1.0000000000000001e-005.
Argument "dst0" has unexpected maximal value
```
Hope this is a false alarm.
The three new functions:
```cpp
void cvStartWriteRawData_Base64(::CvFileStorage * fs, const char* name,
int len, const char* dt);
void cvWriteRawData_Base64(::CvFileStorage *
fs, const void* _data, int len);
void
cvEndWriteRawData_Base64(::CvFileStorage * fs);
```
Test is also updated. (And it's remarkable that there is a bug in
`cvWriteReadData`.)
1. Add Base64 support for reading and writing XML\YML file.
The two new functions for writing:
```cpp
void cvWriteRawData_Base64(cv::FileStorage & fs, const void* _data, int
len, const char* dt);
void cvWriteMat_Base64(cv::FileStorage & fs, cv::String const & name,
cv::Mat const & mat);
```
2. Change YML file header form `YAML:1.0` to `YAML 1.0`. (standard
format)
3. Add test for Base64 part.
Conflicts:
modules/gpu/perf/perf_imgproc.cpp
Cast a long integer to double explicitly.
Conflicts:
modules/python/src2/cv2.cpp
Cast some matrix sizes to type int.
Change some vector mask types to unsigned.
Conflicts:
modules/core/src/arithm.cpp
This and several following commits contain the "boring" changes required
to support the new Ptr. These are changes like:
* new T -> makePtr<T> or .reset(new T) or Ptr<T>(new T)
(depending on the situation)
* p.empty() -> !p
* delete_obj -> DefaultDeleter::operator()
and similar changes that are numerous, but primitive.