| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Previous versions of the WFDB library did not behave properly if
setbasetime() was invoked before setsampfreq(). Also, when
dealing with time-of-day strings, previous versions of mstimstr() and
strtim() round the base time to a number of samples since midnight, and
do not work correctly if the number of samples per day is not an integer.
Benjamin Moody contributed patches to ‘lib/signal.c’ that remedy these
deficiencies. The patches include three new internal functions
(fstrtim(), ftimstr(), and fmstimstr()) which are
equivalent to the WFDB library functions strtim(), timstr(), and
mstimstr(), but take a second argument specifying the sampling
frequency. These internal functions are used by setbasetime() and
setheader() to record the base time with millisecond precision,
independent of the actual sampling frequency, and independent of the effects of
setifreq(), if any. Moreover, mstimstr() returns a string
representation of the base time plus the given number of sampling intervals,
mstimstr(0) returns the exact base time, and strtim() returns the
sample number that is closest to the given time. In addition to being more
precise, both functions now work correctly even if the number of samples per
day is not an integer. Applications using this version of the WFDB library may
call setbasetime() and setsampfreq() in either order.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When opening records with the same name in different directories successively
within a single process, the persistence of WFDB path changes made by WFDB
library function wfdb_addtopath() interfered with locating the correct
files in the second and subsequent records. The solution included addition of
a new WFDB library function, resetwfdb(), which restores the WFDB path
to the value returned by the first invocation of getwfdb() in the
current process (or NULL if getwfdb() has not been invoked);
library function wfdbquit() now invokes resetwfdb(). In
addition, the safe-string copy macro SSTRCPY (defined in wfdb.h)
now properly handles the case of copying null pointers. Thanks to Benjamin
Moody for identifying the problem, providing test inputs, and contributions to
the solution.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WFDB records with names of the form ‘nnn/nnn’ can now be identified
using the short form ‘nnn/’ in applications built using the WFDB library
(e.g., rdsamp -r mimicdb/037/ and rdsamp -r mimicdb/037/037 are
now equivalent).
In ‘<wfdb.h>’, the maximum lengths of record names, units strings, and signal description (‘.desc’) strings have been increased (to 50, 50, and 100 characters respectively). In ‘lib/wfdbio.c’, the maximum length of a WFDB file name (including path information) has been increased to 1024 characters.
(WFDB library version 10.5.5 was identical to version 10.5.4.)
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Function getseginfo() has been introduced in WFDB library version
10.5.4, to allow applications to obtain information about the
segments belonging to the current (multi-segment) input record.
In previous versions, integer arithmetic overflow was possible
when converting format 32 samples using aduphys(), if the difference
between the baseline value and the sample to be converted exceeded
the range of signed 32-bit integers. Although rdsamp does not
use aduphys() similar code in rdsamp also exhibited this problem,
which has now been corrected; thanks to Ikaro Silva for
reporting it and providing a test case.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Function getgvmode() has been introduced in WFDB library version
10.5.3, to allow querying the current operating mode of getvec().
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When reading annotations of multifrequency records opened in
high-resolution mode, a time shift was introduced by getann() in
WFDB library versions 10.4.5 to 10.5.1. This problem has been
corrected in 10.5.2.
Certain malformed segment .hea files were able to cause null pointer
errors in isigopen(). This problem has been
corrected. Thanks to Mauro Villarroel for reporting this problem
together with a test case.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In version 10.5.0, signals in formats 80 and 160 with amplitudes of 0 were
incorrectly treated as invalid by getframe() and getvec().
Thanks to Isaac Henry for reporting this problem, which has been corrected in
‘lib/signal.c’.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The WFDB library now supports signals with 24 and 32 bits of precision, using
new formats 24 and 32, as well as BDF and BDF+ files (24-bit EDF and EDF+
variants), so that WFDB applications can now read these formats. Note that
these formats, unlike all previously defined formats, require more than 16 bits
per sample value. If the WFDB software is compiled on a 16-bit platform
(unusual except for embedded processors), the excess high bits of signals in
these formats are not read on input, and they are replaced by zeroes on output,
unless the WFDB_Sample data type has been redefined as long (in
‘wfdb.h’). This is not done by default since it would increase memory and
computational requirements unnecessarily in embedded applications that do not
require 24- or 32-bit precision.
Since support for extended precision samples cannot be introduced without this limitation in backward compatibility for 16-bit platforms, the minor version number of the library has been incremented to 5. Most users will not be affected by this change, however, apart from the new functionality it provides.
Memory allocation macros that have been defined previously in ‘wfdblib.h’ have been moved to ‘wfdb.h’ so they are accessible to WFDB applications, including user-written applications. For information about using these macros (MEMERR, SFREE, SUALLOC, SALLOC, SREALLOC, and SSTRCPY), see section memory allocation macros.
A buffer overflow in the WFDB library’s internal function edfparse()
(in ‘signal.c’) has been corrected, thanks to a bug report and patch
from Joonas Paalasmaa.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
George B. Moody (george@mit.edu)