mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-21 16:37:12 +01:00
Update libsndfile to 1.0.29pre2+git
This pulls in MANY (over 890) changes compared to our from our current 1.0.24 version.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
** Copyright (C) 2002-2017 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or modify
|
||||
** it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -154,9 +154,10 @@ mat5_close (SF_PRIVATE *psf)
|
||||
|
||||
static int
|
||||
mat5_write_header (SF_PRIVATE *psf, int calc_length)
|
||||
{ static const char *filename = "MATLAB 5.0 MAT-file, written by " PACKAGE "-" VERSION ", " ;
|
||||
{ static const char *filename = "MATLAB 5.0 MAT-file, written by " PACKAGE_NAME "-" PACKAGE_VERSION ", " ;
|
||||
static const char *sr_name = "samplerate\0\0\0\0\0\0\0\0\0\0\0" ;
|
||||
static const char *wd_name = "wavedata\0" ;
|
||||
char buffer [256] ;
|
||||
sf_count_t current, datasize ;
|
||||
int encoding ;
|
||||
|
||||
@@ -200,54 +201,54 @@ mat5_write_header (SF_PRIVATE *psf, int calc_length)
|
||||
} ;
|
||||
|
||||
/* Reset the current header length to zero. */
|
||||
psf->header [0] = 0 ;
|
||||
psf->headindex = 0 ;
|
||||
psf->header.ptr [0] = 0 ;
|
||||
psf->header.indx = 0 ;
|
||||
psf_fseek (psf, 0, SEEK_SET) ;
|
||||
|
||||
psf_get_date_str (psf->u.cbuf, sizeof (psf->u.scbuf)) ;
|
||||
psf_binheader_writef (psf, "bb", filename, strlen (filename), psf->u.cbuf, strlen (psf->u.cbuf) + 1) ;
|
||||
psf_get_date_str (buffer, sizeof (buffer)) ;
|
||||
psf_binheader_writef (psf, "bb", BHWv (filename), BHWz (strlen (filename)), BHWv (buffer), BHWz (strlen (buffer) + 1)) ;
|
||||
|
||||
memset (psf->u.scbuf, ' ', 124 - psf->headindex) ;
|
||||
psf_binheader_writef (psf, "b", psf->u.scbuf, make_size_t (124 - psf->headindex)) ;
|
||||
memset (buffer, ' ', 124 - psf->header.indx) ;
|
||||
psf_binheader_writef (psf, "b", BHWv (buffer), BHWz (124 - psf->header.indx)) ;
|
||||
|
||||
psf->rwf_endian = psf->endian ;
|
||||
|
||||
if (psf->rwf_endian == SF_ENDIAN_BIG)
|
||||
psf_binheader_writef (psf, "2b", 0x0100, "MI", make_size_t (2)) ;
|
||||
psf_binheader_writef (psf, "2b", BHW2 (0x0100), BHWv ("MI"), BHWz (2)) ;
|
||||
else
|
||||
psf_binheader_writef (psf, "2b", 0x0100, "IM", make_size_t (2)) ;
|
||||
psf_binheader_writef (psf, "2b", BHW2 (0x0100), BHWv ("IM"), BHWz (2)) ;
|
||||
|
||||
psf_binheader_writef (psf, "444444", MAT5_TYPE_ARRAY, 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
|
||||
psf_binheader_writef (psf, "4444", MAT5_TYPE_INT32, 8, 1, 1) ;
|
||||
psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (sr_name), sr_name, make_size_t (16)) ;
|
||||
psf_binheader_writef (psf, "444444", BHW4 (MAT5_TYPE_ARRAY), BHW4 (64), BHW4 (MAT5_TYPE_UINT32), BHW4 (8), BHW4 (6), BHW4 (0)) ;
|
||||
psf_binheader_writef (psf, "4444", BHW4 (MAT5_TYPE_INT32), BHW4 (8), BHW4 (1), BHW4 (1)) ;
|
||||
psf_binheader_writef (psf, "44b", BHW4 (MAT5_TYPE_SCHAR), BHW4 (strlen (sr_name)), BHWv (sr_name), BHWz (16)) ;
|
||||
|
||||
if (psf->sf.samplerate > 0xFFFF)
|
||||
psf_binheader_writef (psf, "44", MAT5_TYPE_COMP_UINT, psf->sf.samplerate) ;
|
||||
psf_binheader_writef (psf, "44", BHW4 (MAT5_TYPE_COMP_UINT), BHW4 (psf->sf.samplerate)) ;
|
||||
else
|
||||
{ unsigned short samplerate = psf->sf.samplerate ;
|
||||
|
||||
psf_binheader_writef (psf, "422", MAT5_TYPE_COMP_USHORT, samplerate, 0) ;
|
||||
psf_binheader_writef (psf, "422", BHW4 (MAT5_TYPE_COMP_USHORT), BHW2 (samplerate), BHW2 (0)) ;
|
||||
} ;
|
||||
|
||||
datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
|
||||
|
||||
psf_binheader_writef (psf, "t484444", MAT5_TYPE_ARRAY, datasize + 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
|
||||
psf_binheader_writef (psf, "t4448", MAT5_TYPE_INT32, 8, psf->sf.channels, psf->sf.frames) ;
|
||||
psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (wd_name), wd_name, strlen (wd_name)) ;
|
||||
psf_binheader_writef (psf, "t484444", BHW4 (MAT5_TYPE_ARRAY), BHW8 (datasize + 64), BHW4 (MAT5_TYPE_UINT32), BHW4 (8), BHW4 (6), BHW4 (0)) ;
|
||||
psf_binheader_writef (psf, "t4448", BHW4 (MAT5_TYPE_INT32), BHW4 (8), BHW4 (psf->sf.channels), BHW8 (psf->sf.frames)) ;
|
||||
psf_binheader_writef (psf, "44b", BHW4 (MAT5_TYPE_SCHAR), BHW4 (strlen (wd_name)), BHWv (wd_name), BHWz (strlen (wd_name))) ;
|
||||
|
||||
datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
|
||||
if (datasize > 0x7FFFFFFF)
|
||||
datasize = 0x7FFFFFFF ;
|
||||
|
||||
psf_binheader_writef (psf, "t48", encoding, datasize) ;
|
||||
psf_binheader_writef (psf, "t48", BHW4 (encoding), BHW8 (datasize)) ;
|
||||
|
||||
/* Header construction complete so write it out. */
|
||||
psf_fwrite (psf->header, psf->headindex, 1, psf) ;
|
||||
psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
|
||||
|
||||
if (psf->error)
|
||||
return psf->error ;
|
||||
|
||||
psf->dataoffset = psf->headindex ;
|
||||
psf->dataoffset = psf->header.indx ;
|
||||
|
||||
if (current > 0)
|
||||
psf_fseek (psf, current, SEEK_SET) ;
|
||||
@@ -257,38 +258,39 @@ mat5_write_header (SF_PRIVATE *psf, int calc_length)
|
||||
|
||||
static int
|
||||
mat5_read_header (SF_PRIVATE *psf)
|
||||
{ char name [32] ;
|
||||
{ char buffer [256], name [32] ;
|
||||
short version, endian ;
|
||||
int type, flags1, flags2, rows, cols ;
|
||||
unsigned size ;
|
||||
int have_samplerate = 1 ;
|
||||
|
||||
psf_binheader_readf (psf, "pb", 0, psf->u.cbuf, 124) ;
|
||||
psf_binheader_readf (psf, "pb", 0, buffer, 124) ;
|
||||
|
||||
psf->u.scbuf [125] = 0 ;
|
||||
buffer [125] = 0 ;
|
||||
|
||||
if (strlen (psf->u.cbuf) >= 124)
|
||||
if (strlen (buffer) >= 124)
|
||||
return SFE_UNIMPLEMENTED ;
|
||||
|
||||
if (strstr (psf->u.cbuf, "MATLAB 5.0 MAT-file") == psf->u.cbuf)
|
||||
psf_log_printf (psf, "%s\n", psf->u.scbuf) ;
|
||||
if (strstr (buffer, "MATLAB 5.0 MAT-file") == buffer)
|
||||
psf_log_printf (psf, "%s\n", buffer) ;
|
||||
|
||||
|
||||
psf_binheader_readf (psf, "E22", &version, &endian) ;
|
||||
|
||||
if (endian == MI_MARKER)
|
||||
{ psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
|
||||
if (CPU_IS_LITTLE_ENDIAN) version = ENDSWAP_SHORT (version) ;
|
||||
if (CPU_IS_LITTLE_ENDIAN) version = ENDSWAP_16 (version) ;
|
||||
}
|
||||
else if (endian == IM_MARKER)
|
||||
{ psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
|
||||
if (CPU_IS_BIG_ENDIAN) version = ENDSWAP_SHORT (version) ;
|
||||
if (CPU_IS_BIG_ENDIAN) version = ENDSWAP_16 (version) ;
|
||||
}
|
||||
else
|
||||
return SFE_MAT5_BAD_ENDIAN ;
|
||||
|
||||
if ((CPU_IS_LITTLE_ENDIAN && endian == IM_MARKER) ||
|
||||
(CPU_IS_BIG_ENDIAN && endian == MI_MARKER))
|
||||
version = ENDSWAP_SHORT (version) ;
|
||||
version = ENDSWAP_16 (version) ;
|
||||
|
||||
psf_log_printf (psf, "Version : 0x%04X\n", version) ;
|
||||
psf_log_printf (psf, "Endian : 0x%04X => %s\n", endian,
|
||||
@@ -317,11 +319,13 @@ mat5_read_header (SF_PRIVATE *psf)
|
||||
return SFE_MAT5_NO_BLOCK ;
|
||||
|
||||
psf_binheader_readf (psf, "44", &rows, &cols) ;
|
||||
psf_log_printf (psf, " Rows : %X Cols : %d\n", rows, cols) ;
|
||||
psf_log_printf (psf, " Rows : %d Cols : %d\n", rows, cols) ;
|
||||
|
||||
if (rows != 1 || cols != 1)
|
||||
return SFE_MAT5_SAMPLE_RATE ;
|
||||
|
||||
{ if (psf->sf.samplerate == 0)
|
||||
psf->sf.samplerate = 44100 ;
|
||||
have_samplerate = 0 ;
|
||||
}
|
||||
psf_binheader_readf (psf, "4", &type) ;
|
||||
|
||||
if (type == MAT5_TYPE_SCHAR)
|
||||
@@ -355,6 +359,9 @@ mat5_read_header (SF_PRIVATE *psf)
|
||||
|
||||
psf_binheader_readf (psf, "44", &type, &size) ;
|
||||
|
||||
if (!have_samplerate)
|
||||
goto skip_samplerate ;
|
||||
|
||||
switch (type)
|
||||
{ case MAT5_TYPE_DOUBLE :
|
||||
{ double samplerate ;
|
||||
@@ -445,6 +452,7 @@ mat5_read_header (SF_PRIVATE *psf)
|
||||
psf_binheader_readf (psf, "44", &type, &size) ;
|
||||
psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
|
||||
|
||||
skip_samplerate :
|
||||
/*++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
|
||||
if (rows == 0 && cols == 0)
|
||||
|
||||
Reference in New Issue
Block a user