Added support for 32-bit counts

This commit is contained in:
Jaroslav Kysela 2002-02-07 16:46:29 +00:00
parent 7ba18d08d4
commit 6c97531cf5

View file

@ -90,7 +90,7 @@ static size_t chunk_bytes;
static snd_output_t *log; static snd_output_t *log;
static int fd = -1; static int fd = -1;
static int count, fdcount; static size_t count, fdcount;
static int vocmajor, vocminor; static int vocmajor, vocminor;
/* needed prototypes */ /* needed prototypes */
@ -1372,7 +1372,7 @@ static size_t calc_count(void)
size_t count; size_t count;
if (!timelimit) { if (!timelimit) {
count = 0x7fffffff; count = -1;
} else { } else {
count = snd_pcm_format_size(hwparams.format, count = snd_pcm_format_size(hwparams.format,
timelimit * hwparams.rate * timelimit * hwparams.rate *
@ -1541,6 +1541,8 @@ static void end_voc(int fd)
bt.type = 1; bt.type = 1;
cnt = fdcount; cnt = fdcount;
cnt += sizeof(VocVoiceData); /* Channel_data block follows */ cnt += sizeof(VocVoiceData); /* Channel_data block follows */
if (cnt > 0x00ffffff)
cnt = 0x00ffffff;
bt.datalen = (u_char) (cnt & 0xFF); bt.datalen = (u_char) (cnt & 0xFF);
bt.datalen_m = (u_char) ((cnt & 0xFF00) >> 8); bt.datalen_m = (u_char) ((cnt & 0xFF00) >> 8);
bt.datalen_h = (u_char) ((cnt & 0xFF0000) >> 16); bt.datalen_h = (u_char) ((cnt & 0xFF0000) >> 16);
@ -1559,7 +1561,7 @@ static void end_wave(int fd)
sizeof(WaveChunkHeader) + sizeof(WaveChunkHeader) +
sizeof(WaveFmtBody); sizeof(WaveFmtBody);
cd.type = WAV_DATA; cd.type = WAV_DATA;
cd.length = LE_INT(fdcount); cd.length = fdcount > 0xffffffff ? 0xffffffff : LE_INT(fdcount);
if (lseek(fd, length_seek, SEEK_SET) == length_seek) if (lseek(fd, length_seek, SEEK_SET) == length_seek)
write(fd, &cd, sizeof(WaveChunkHeader)); write(fd, &cd, sizeof(WaveChunkHeader));
if (fd != 1) if (fd != 1)
@ -1572,7 +1574,7 @@ static void end_au(int fd)
off_t length_seek; off_t length_seek;
length_seek = (char *)&ah.data_size - (char *)&ah; length_seek = (char *)&ah.data_size - (char *)&ah;
ah.data_size = BE_INT(fdcount); ah.data_size = fdcount > 0xffffffff ? 0xffffffff : BE_INT(fdcount);
if (lseek(fd, length_seek, SEEK_SET) == length_seek) if (lseek(fd, length_seek, SEEK_SET) == length_seek)
write(fd, &ah.data_size, sizeof(ah.data_size)); write(fd, &ah.data_size, sizeof(ah.data_size));
if (fd != 1) if (fd != 1)
@ -1838,6 +1840,7 @@ void capturev_go(int* fds, unsigned int channels, size_t count, int rtype, char
} }
r = r * bits_per_frame / 8; r = r * bits_per_frame / 8;
count -= r; count -= r;
fdcount += r;
} }
} }