mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-05-22 15:41:41 +02:00
2020-07-07 Fred Gleason <fredg@paravelsystems.com>
* Modified 'RDWaveFile' to work around known fencepost errors in WAV files generated by "Sonic Studio soundBlade" by "PME Mastering, Inc." Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
parent
5ee62649ab
commit
5692b42aef
@ -19912,3 +19912,7 @@
|
|||||||
2020-06-23 Fred Gleason <fredg@paravelsystems.com>
|
2020-06-23 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Applied the RD_MAX_CART_NUMBER define in
|
* Applied the RD_MAX_CART_NUMBER define in
|
||||||
'rdairplay/local_macros.cpp'.
|
'rdairplay/local_macros.cpp'.
|
||||||
|
2020-07-07 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Modified 'RDWaveFile' to work around known fencepost errors in
|
||||||
|
WAV files generated by "Sonic Studio soundBlade" by
|
||||||
|
"PME Mastering, Inc."
|
||||||
|
@ -2494,16 +2494,23 @@ bool RDWaveFile::IsM4A(int fd)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
off_t RDWaveFile::FindChunk(int fd,const char *chunk_name,unsigned *chunk_size,
|
off_t RDWaveFile::FindChunk(int fd,const char *chunk_name,unsigned *chunk_size,
|
||||||
bool big_end)
|
bool big_end)
|
||||||
{
|
{
|
||||||
int i;
|
int offset;
|
||||||
char name[5]={0,0,0,0,0};
|
char name[5]={0,0,0,0,0};
|
||||||
unsigned char buffer[4];
|
unsigned char buffer[4];
|
||||||
|
|
||||||
lseek(fd,12,SEEK_SET);
|
lseek(fd,12,SEEK_SET);
|
||||||
i=read(fd,name,4);
|
offset=read(fd,name,4);
|
||||||
i=read(fd,buffer,4);
|
if(!isalnum(0xff&name[0])) {
|
||||||
|
name[0]=name[1];
|
||||||
|
name[1]=name[2];
|
||||||
|
name[2]=name[3];
|
||||||
|
offset=read(fd,name+3,1);
|
||||||
|
}
|
||||||
|
offset=read(fd,buffer,4);
|
||||||
if(big_end) {
|
if(big_end) {
|
||||||
*chunk_size=
|
*chunk_size=
|
||||||
buffer[3]+(256*buffer[2])+(65536*buffer[1])+(16777216*buffer[0]);
|
buffer[3]+(256*buffer[2])+(65536*buffer[1])+(16777216*buffer[0]);
|
||||||
@ -2512,13 +2519,23 @@ off_t RDWaveFile::FindChunk(int fd,const char *chunk_name,unsigned *chunk_size,
|
|||||||
*chunk_size=
|
*chunk_size=
|
||||||
buffer[0]+(256*buffer[1])+(65536*buffer[2])+(16777216*buffer[3]);
|
buffer[0]+(256*buffer[1])+(65536*buffer[2])+(16777216*buffer[3]);
|
||||||
}
|
}
|
||||||
while(i==4) {
|
while(offset==4) {
|
||||||
if(strcasecmp(chunk_name,name)==0) {
|
if(strcasecmp(chunk_name,name)==0) {
|
||||||
return lseek(fd,0,SEEK_CUR);
|
return lseek(fd,0,SEEK_CUR);
|
||||||
}
|
}
|
||||||
lseek(fd,*chunk_size,SEEK_CUR);
|
lseek(fd,*chunk_size,SEEK_CUR);
|
||||||
i=read(fd,name,4);
|
offset=read(fd,name,4);
|
||||||
i=read(fd,buffer,4);
|
//
|
||||||
|
// Attempt to work around known fencepost errors in WAV files generated by
|
||||||
|
// "Sonic Studio soundBlade" by "PME Mastering, Inc." (and perhaps others?)
|
||||||
|
//
|
||||||
|
if(!isalnum(0xff&name[0])) {
|
||||||
|
name[0]=name[1];
|
||||||
|
name[1]=name[2];
|
||||||
|
name[2]=name[3];
|
||||||
|
offset=read(fd,name+3,1);
|
||||||
|
}
|
||||||
|
offset=read(fd,buffer,4);
|
||||||
if(big_end) {
|
if(big_end) {
|
||||||
*chunk_size=buffer[3]+(256*buffer[2])+(65536*buffer[1])+
|
*chunk_size=buffer[3]+(256*buffer[2])+(65536*buffer[1])+
|
||||||
(16777216*buffer[0]);
|
(16777216*buffer[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user