mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-12-22 18:16:31 +01:00
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:
parent
1b4bd70ef9
commit
5825302e03
2 changed files with 23 additions and 22 deletions
|
@ -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];
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue