Uros Bizjak <uros@kss-loka.si>:

- fixes compilation (format.voices -> format.channels)
- ntohl -> BE_INT for AU files
- recoded AU_MAGIC header for AU files
This commit is contained in:
Abramo Bagnara 2000-06-01 11:37:43 +00:00
parent 1b4bd70ef9
commit 5825302e03
2 changed files with 23 additions and 22 deletions

View file

@ -35,7 +35,6 @@
#include <fcntl.h> #include <fcntl.h>
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <netinet/in.h>
#include <sys/asoundlib.h> #include <sys/asoundlib.h>
#include <assert.h> #include <assert.h>
#include <sys/poll.h> #include <sys/poll.h>
@ -578,12 +577,12 @@ static int test_au(int fd, void *buffer)
{ {
AuHeader *ap = buffer; AuHeader *ap = buffer;
if (ntohl(ap->magic) != AU_MAGIC) if (ap->magic != AU_MAGIC)
return -1; return -1;
if (ntohl(ap->hdr_size) > 128 || ntohl(ap->hdr_size) < 24) if (BE_INT(ap->hdr_size) > 128 || BE_INT(ap->hdr_size) < 24)
return -1; return -1;
count = ntohl(ap->data_size); count = BE_INT(ap->data_size);
switch (ntohl(ap->encoding)) { switch (BE_INT(ap->encoding)) {
case AU_FMT_ULAW: case AU_FMT_ULAW:
format.format = SND_PCM_SFMT_MU_LAW; format.format = SND_PCM_SFMT_MU_LAW;
break; break;
@ -596,13 +595,13 @@ static int test_au(int fd, void *buffer)
default: default:
return -1; return -1;
} }
format.rate = ntohl(ap->sample_rate); format.rate = BE_INT(ap->sample_rate);
if (format.rate < 2000 || format.rate > 256000) if (format.rate < 2000 || format.rate > 256000)
return -1; return -1;
format.channels = ntohl(ap->channels); format.channels = BE_INT(ap->channels);
if (format.channels < 1 || format.channels > 128) if (format.channels < 1 || format.channels > 128)
return -1; return -1;
if (read(fd, buffer + sizeof(AuHeader), ntohl(ap->hdr_size) - sizeof(AuHeader)) < 0) { if (read(fd, buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) < 0) {
fprintf(stderr, "%s: read error\n", command); fprintf(stderr, "%s: read error\n", command);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -735,7 +734,6 @@ static ssize_t pcm_write(u_char *data, size_t count)
count = buffer_size; count = buffer_size;
} }
while (count > 0) { while (count > 0) {
struct pollfd pfd;
r = write_func(pcm_handle, data, count); r = write_func(pcm_handle, data, count);
if (r == -EAGAIN || (r >= 0 && r < count)) { if (r == -EAGAIN || (r >= 0 && r < count)) {
struct pollfd pfd; struct pollfd pfd;
@ -1254,7 +1252,7 @@ static void begin_wave(int fd, size_t cnt)
f.type = WAV_FMT; f.type = WAV_FMT;
f.length = LE_INT(16); f.length = LE_INT(16);
f.format = LE_INT(WAV_PCM_CODE); f.format = LE_INT(WAV_PCM_CODE);
f.modus = LE_SHORT(format.voices); f.modus = LE_SHORT(format.channels);
f.sample_fq = LE_INT(format.rate); f.sample_fq = LE_INT(format.rate);
#if 0 #if 0
tmp2 = (samplesize == 8) ? 1 : 2; tmp2 = (samplesize == 8) ? 1 : 2;
@ -1262,7 +1260,7 @@ static void begin_wave(int fd, size_t cnt)
tmp2 = dsp_speed * format.channels * tmp2; tmp2 = dsp_speed * format.channels * tmp2;
f.byte_p_sec = LE_SHORT(tmp2); f.byte_p_sec = LE_SHORT(tmp2);
#else #else
tmp2 = format.voices * ((bits + 7) / 8); tmp2 = format.channels * ((bits + 7) / 8);
f.byte_p_spl = LE_SHORT(tmp2); f.byte_p_spl = LE_SHORT(tmp2);
tmp2 = tmp2 * format.rate; tmp2 = tmp2 * format.rate;
f.byte_p_sec = LE_SHORT(tmp2); f.byte_p_sec = LE_SHORT(tmp2);
@ -1285,25 +1283,25 @@ static void begin_au(int fd, size_t cnt)
{ {
AuHeader ah; AuHeader ah;
ah.magic = htonl(AU_MAGIC); ah.magic = AU_MAGIC;
ah.hdr_size = htonl(24); ah.hdr_size = BE_INT(24);
ah.data_size = htonl(cnt); ah.data_size = BE_INT(cnt);
switch (format.format) { switch (format.format) {
case SND_PCM_SFMT_MU_LAW: case SND_PCM_SFMT_MU_LAW:
ah.encoding = htonl(AU_FMT_ULAW); ah.encoding = BE_INT(AU_FMT_ULAW);
break; break;
case SND_PCM_SFMT_U8: case SND_PCM_SFMT_U8:
ah.encoding = htonl(AU_FMT_LIN8); ah.encoding = BE_INT(AU_FMT_LIN8);
break; break;
case SND_PCM_SFMT_S16_LE: case SND_PCM_SFMT_S16_LE:
ah.encoding = htonl(AU_FMT_LIN16); ah.encoding = BE_INT(AU_FMT_LIN16);
break; break;
default: default:
fprintf(stderr, "%s: Sparc Audio doesn't support %s format...\n", command, snd_pcm_get_format_name(format.format)); fprintf(stderr, "%s: Sparc Audio doesn't support %s format...\n", command, snd_pcm_get_format_name(format.format));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
ah.sample_rate = htonl(format.rate); ah.sample_rate = BE_INT(format.rate);
ah.channels = htonl(format.channels); ah.channels = BE_INT(format.channels);
if (write(fd, &ah, sizeof(AuHeader)) != sizeof(AuHeader)) { if (write(fd, &ah, sizeof(AuHeader)) != sizeof(AuHeader)) {
fprintf(stderr, "%s: write error\n", command); fprintf(stderr, "%s: write error\n", command);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -1507,7 +1505,6 @@ static void capture(char *name)
void playbackv_go(int* fds, unsigned int channels, size_t loaded, size_t count, int rtype, char **names) void playbackv_go(int* fds, unsigned int channels, size_t loaded, size_t count, int rtype, char **names)
{ {
int r; int r;
size_t c, expected;
size_t vsize; size_t vsize;
unsigned int channel; unsigned int channel;
u_char *bufs[channels]; u_char *bufs[channels];

View file

@ -48,10 +48,14 @@ typedef struct voc_ext_block {
#define COMPOSE_ID(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d)<<24)) #define COMPOSE_ID(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d)<<24))
#define LE_SHORT(v) (v) #define LE_SHORT(v) (v)
#define LE_INT(v) (v) #define LE_INT(v) (v)
#define BE_SHORT(v) bswap_16(v)
#define BE_INT(v) bswap_32(v)
#else #else
#define COMPOSE_ID(a,b,c,d) ((d) | ((c)<<8) | ((b)<<16) | ((a)<<24)) #define COMPOSE_ID(a,b,c,d) ((d) | ((c)<<8) | ((b)<<16) | ((a)<<24))
#define LE_SHORT(v) bswap_16(v) #define LE_SHORT(v) bswap_16(v)
#define LE_INT(v) bswap_32(v) #define LE_INT(v) bswap_32(v)
#define BE_SHORT(v) (v)
#define BE_INT(v) (v)
#endif #endif
#define WAV_RIFF COMPOSE_ID('R','I','F','F') #define WAV_RIFF COMPOSE_ID('R','I','F','F')
@ -88,14 +92,14 @@ typedef struct {
/* Definitions for Sparc .au header */ /* Definitions for Sparc .au header */
#define AU_MAGIC 0x2e736e64 #define AU_MAGIC COMPOSE_ID('.','s','n','d')
#define AU_FMT_ULAW 1 #define AU_FMT_ULAW 1
#define AU_FMT_LIN8 2 #define AU_FMT_LIN8 2
#define AU_FMT_LIN16 3 #define AU_FMT_LIN16 3
typedef struct au_header { typedef struct au_header {
u_int magic; /* magic '.snd' */ u_int magic; /* '.snd' */
u_int hdr_size; /* size of header (min 24) */ u_int hdr_size; /* size of header (min 24) */
u_int data_size; /* size of data */ u_int data_size; /* size of data */
u_int encoding; /* see to AU_FMT_XXXX */ u_int encoding; /* see to AU_FMT_XXXX */