mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-05-24 16:41:40 +02:00
2021-10-06 Fred Gleason <fredg@paravelsystems.com>
* Fixed an arithmetic overflow bug in 'RDWaveFile' that could cause the play length of MPEG-encoded to be incorrectly calculated. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
parent
6d34ca7ee8
commit
9fcd7aaab1
@ -22507,3 +22507,6 @@
|
|||||||
2021-10-06 Fred Gleason <fredg@paravelsystems.com>
|
2021-10-06 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Increased the import process timeout for the WebGet service
|
* Increased the import process timeout for the WebGet service
|
||||||
to 1200 seconds.
|
to 1200 seconds.
|
||||||
|
2021-10-06 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Fixed an arithmetic overflow bug in 'RDWaveFile' that could
|
||||||
|
cause the play length of MPEG-encoded to be incorrectly calculated.
|
||||||
|
@ -3864,9 +3864,9 @@ bool RDWaveFile::GetMpegHeader(int fd,int offset)
|
|||||||
time_length=
|
time_length=
|
||||||
total_frame_quan*__samples_per_frame[version_index][layer_index]/
|
total_frame_quan*__samples_per_frame[version_index][layer_index]/
|
||||||
__samplerates[version_index][samprate_index];
|
__samplerates[version_index][samprate_index];
|
||||||
ext_time_length=1000*total_frame_quan*
|
ext_time_length=1000*(int64_t)total_frame_quan*
|
||||||
__samples_per_frame[version_index][layer_index]/
|
(int64_t)__samples_per_frame[version_index][layer_index]/
|
||||||
__samplerates[version_index][samprate_index];
|
(int64_t)__samplerates[version_index][samprate_index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(total_frame_quan<0) {
|
if(total_frame_quan<0) {
|
||||||
@ -3886,559 +3886,6 @@ bool RDWaveFile::GetMpegHeader(int fd,int offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
bool RDWaveFile::GetMpegHeader(int fd,int offset)
|
|
||||||
{
|
|
||||||
unsigned char buffer[4];
|
|
||||||
int n;
|
|
||||||
|
|
||||||
lseek(fd,offset,SEEK_SET);
|
|
||||||
if((n=read(fd,buffer,4))!=4) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Sync
|
|
||||||
//
|
|
||||||
if((buffer[0]!=0xFF)||((buffer[1]&0xE0)!=0xE0)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// MPEG Id
|
|
||||||
//
|
|
||||||
if((buffer[1]&0x08)==0) {
|
|
||||||
mpeg_id=RDWaveFile::Mpeg2;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mpeg_id=RDWaveFile::Mpeg1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Layer
|
|
||||||
//
|
|
||||||
switch((buffer[1]&0x06)>>1) {
|
|
||||||
case 1:
|
|
||||||
head_layer=3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_layer=2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_layer=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bitrate
|
|
||||||
//
|
|
||||||
switch(mpeg_id) {
|
|
||||||
case RDWaveFile::Mpeg1:
|
|
||||||
switch(head_layer) {
|
|
||||||
case 1:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=192000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=224000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=256000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=288000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=320000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=352000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=384000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=416000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=448000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=56000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=80000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=112000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=192000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=224000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=256000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=320000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=384000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=40000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=56000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=80000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=112000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=192000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=224000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=256000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=320000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RDWaveFile::Mpeg2:
|
|
||||||
switch(head_layer) {
|
|
||||||
case 1:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=56000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=80000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=112000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=144000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=176000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=192000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=224000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=256000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=8000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=16000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=24000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=40000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=56000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=80000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=112000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=144000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
switch(buffer[2]>>4) {
|
|
||||||
case 1:
|
|
||||||
head_bit_rate=8000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_bit_rate=16000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_bit_rate=24000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
head_bit_rate=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
head_bit_rate=40000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
head_bit_rate=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
head_bit_rate=56000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
head_bit_rate=64000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
head_bit_rate=80000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
head_bit_rate=96000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
head_bit_rate=112000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 12:
|
|
||||||
head_bit_rate=128000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13:
|
|
||||||
head_bit_rate=144000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14:
|
|
||||||
head_bit_rate=160000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Sample Rate
|
|
||||||
//
|
|
||||||
switch((buffer[2]>>2)&0x03) {
|
|
||||||
case 0:
|
|
||||||
switch(mpeg_id) {
|
|
||||||
case RDWaveFile::Mpeg1:
|
|
||||||
samples_per_sec=44100;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RDWaveFile::Mpeg2:
|
|
||||||
samples_per_sec=22050;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
switch(mpeg_id) {
|
|
||||||
case RDWaveFile::Mpeg1:
|
|
||||||
samples_per_sec=48000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RDWaveFile::Mpeg2:
|
|
||||||
samples_per_sec=24000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
switch(mpeg_id) {
|
|
||||||
case RDWaveFile::Mpeg1:
|
|
||||||
samples_per_sec=32000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RDWaveFile::Mpeg2:
|
|
||||||
samples_per_sec=16000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Mode
|
|
||||||
//
|
|
||||||
switch(buffer[3]>>6) {
|
|
||||||
case 0:
|
|
||||||
head_mode=ACM_MPEG_STEREO;
|
|
||||||
channels=2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
head_mode=ACM_MPEG_JOINTSTEREO;
|
|
||||||
channels=2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
head_mode=ACM_MPEG_DUALCHANNEL;
|
|
||||||
channels=2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
head_mode=ACM_MPEG_SINGLECHANNEL;
|
|
||||||
channels=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Flags
|
|
||||||
//
|
|
||||||
if((buffer[2]&0x01)!=0) {
|
|
||||||
head_flags|=ACM_MPEG_PRIVATEBIT;
|
|
||||||
}
|
|
||||||
if((buffer[3]&0x08)!=0) {
|
|
||||||
head_flags|=ACM_MPEG_COPYRIGHT;
|
|
||||||
}
|
|
||||||
if((buffer[3]&0x04)!=0) {
|
|
||||||
head_flags|=ACM_MPEG_ORIGINALHOME;
|
|
||||||
}
|
|
||||||
if((buffer[1]&0x01)!=0) {
|
|
||||||
head_flags|=ACM_MPEG_PROTECTIONBIT;
|
|
||||||
}
|
|
||||||
if(mpeg_id==RDWaveFile::Mpeg1) {
|
|
||||||
head_flags|=ACM_MPEG_ID_MPEG1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Frame Size (without padding)
|
|
||||||
//
|
|
||||||
mpeg_frame_size=144*head_bit_rate/samples_per_sec;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
int RDWaveFile::GetAtxOffset(int fd)
|
int RDWaveFile::GetAtxOffset(int fd)
|
||||||
{
|
{
|
||||||
unsigned char buffer[MAX_ATX_HEADER_SIZE];
|
unsigned char buffer[MAX_ATX_HEADER_SIZE];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user