fix (and comment) on subtle bug with audio file data width function

This commit is contained in:
Paul Davis 2015-02-06 10:19:58 -05:00
parent 6b9415aedb
commit 63a1b56560
4 changed files with 26 additions and 15 deletions

View File

@ -49,7 +49,6 @@ int sndfile_header_format_by_index (int);
int sndfile_endian_format_by_index (int);
int sndfile_data_width (int format);
int sndfile_data_width (ARDOUR::SampleFormat);
// It'd be nice if libsndfile did this for us
std::string sndfile_major_format (int);

View File

@ -456,6 +456,8 @@ namespace ARDOUR {
FormatInt16
};
int format_data_width (ARDOUR::SampleFormat);
enum CDMarkerFormat {
CDMarkerNone,
CDMarkerCUE,

View File

@ -609,3 +609,26 @@ ARDOUR::get_microseconds ()
return (microseconds_t) ts.tv_sec * 1000000 + (ts.tv_nsec/1000);
#endif
}
/** Return the number of bits per sample for a given sample format.
*
* This is closely related to sndfile_data_width() but does NOT
* return a "magic" value to differentiate between 32 bit integer
* and 32 bit floating point values.
*/
int
format_data_width (ARDOUR::SampleFormat format)
{
switch (format) {
case ARDOUR::FormatInt16:
return 16;
case ARDOUR::FormatInt24:
return 24;
default:
return 32;
}
}

View File

@ -133,26 +133,13 @@ sndfile_data_width (int format)
case SF_FORMAT_PCM_32:
return 32;
case SF_FORMAT_FLOAT:
return 32;
return 1; /* ridiculous but used as a magic value */
default:
// we don't handle anything else within ardour
return 0;
}
}
int
sndfile_data_width (ARDOUR::SampleFormat format)
{
switch (format) {
case ARDOUR::FormatInt16:
return sndfile_data_width (SF_FORMAT_PCM_16);
case ARDOUR::FormatInt24:
return sndfile_data_width (SF_FORMAT_PCM_24);
default:
return sndfile_data_width (SF_FORMAT_FLOAT);
}
}
string
sndfile_major_format(int format)
{