CXX_BUILD fixes

This commit is contained in:
twinaphex 2017-06-25 04:08:38 +02:00
parent 5d1cfc47cc
commit b74b0ceed5
1 changed files with 49 additions and 51 deletions

View File

@ -1126,14 +1126,14 @@ static int pcm_hw_mmap_status(struct pcm *pcm)
page_size = sysconf(_SC_PAGE_SIZE); page_size = sysconf(_SC_PAGE_SIZE);
pcm->mmap_status = mmap(NULL, page_size, PROT_READ, MAP_FILE | MAP_SHARED, pcm->mmap_status = (snd_pcm_mmap_status*)mmap(NULL, page_size, PROT_READ, MAP_FILE | MAP_SHARED,
pcm->fd, SNDRV_PCM_MMAP_OFFSET_STATUS); pcm->fd, SNDRV_PCM_MMAP_OFFSET_STATUS);
if (pcm->mmap_status == MAP_FAILED) if (pcm->mmap_status == MAP_FAILED)
pcm->mmap_status = NULL; pcm->mmap_status = NULL;
if (!pcm->mmap_status) if (!pcm->mmap_status)
goto mmap_error; goto mmap_error;
pcm->mmap_control = mmap(NULL, page_size, PROT_READ | PROT_WRITE, pcm->mmap_control = (snd_pcm_mmap_control*)mmap(NULL, page_size, PROT_READ | PROT_WRITE,
MAP_FILE | MAP_SHARED, pcm->fd, SNDRV_PCM_MMAP_OFFSET_CONTROL); MAP_FILE | MAP_SHARED, pcm->fd, SNDRV_PCM_MMAP_OFFSET_CONTROL);
if (pcm->mmap_control == MAP_FAILED) if (pcm->mmap_control == MAP_FAILED)
pcm->mmap_control = NULL; pcm->mmap_control = NULL;
@ -1149,7 +1149,7 @@ static int pcm_hw_mmap_status(struct pcm *pcm)
mmap_error: mmap_error:
pcm->sync_ptr = calloc(1, sizeof(*pcm->sync_ptr)); pcm->sync_ptr = (snd_pcm_sync_ptr*)calloc(1, sizeof(*pcm->sync_ptr));
if (!pcm->sync_ptr) if (!pcm->sync_ptr)
return -ENOMEM; return -ENOMEM;
pcm->mmap_status = &pcm->sync_ptr->s.status; pcm->mmap_status = &pcm->sync_ptr->s.status;
@ -1784,67 +1784,65 @@ static int pcm_close(struct pcm *pcm)
* @ingroup libtinyalsa-pcm * @ingroup libtinyalsa-pcm
*/ */
static struct pcm *pcm_open(unsigned int card, unsigned int device, static struct pcm *pcm_open(unsigned int card, unsigned int device,
unsigned int flags, const struct pcm_config *config) unsigned int flags, const struct pcm_config *config)
{ {
struct pcm *pcm; int rc;
struct snd_pcm_info info; char fn[256];
char fn[256]; struct snd_pcm_info info;
int rc; struct pcm *pcm = (struct pcm*)calloc(1, sizeof(struct pcm));
if (!pcm)
return &bad_pcm;
pcm = calloc(1, sizeof(struct pcm)); snprintf(fn, sizeof(fn), "/dev/snd/pcmC%uD%u%c", card, device,
if (!pcm) flags & PCM_IN ? 'c' : 'p');
return &bad_pcm;
snprintf(fn, sizeof(fn), "/dev/snd/pcmC%uD%u%c", card, device, pcm->flags = flags;
flags & PCM_IN ? 'c' : 'p'); pcm->fd = open(fn, O_RDWR);
if (pcm->fd < 0)
{
oops(pcm, errno, "cannot open device '%s'", fn);
return pcm;
}
pcm->flags = flags; if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_INFO, &info))
pcm->fd = open(fn, O_RDWR); {
if (pcm->fd < 0) oops(pcm, errno, "cannot get info");
{ goto fail_close;
oops(pcm, errno, "cannot open device '%s'", fn); }
return pcm; pcm->subdevice = info.subdevice;
}
if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_INFO, &info)) if (pcm_set_config(pcm, config) != 0)
{ goto fail_close;
oops(pcm, errno, "cannot get info");
goto fail_close;
}
pcm->subdevice = info.subdevice;
if (pcm_set_config(pcm, config) != 0) rc = pcm_hw_mmap_status(pcm);
goto fail_close; if (rc < 0) {
oops(pcm, rc, "mmap status failed");
rc = pcm_hw_mmap_status(pcm); goto fail;
if (rc < 0) { }
oops(pcm, rc, "mmap status failed");
goto fail;
}
#ifdef SNDRV_PCM_IOCTL_TTSTAMP #ifdef SNDRV_PCM_IOCTL_TTSTAMP
if (pcm->flags & PCM_MONOTONIC) if (pcm->flags & PCM_MONOTONIC)
{ {
int arg = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC; int arg = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC;
rc = ioctl(pcm->fd, SNDRV_PCM_IOCTL_TTSTAMP, &arg); rc = ioctl(pcm->fd, SNDRV_PCM_IOCTL_TTSTAMP, &arg);
if (rc < 0) if (rc < 0)
{ {
oops(pcm, rc, "cannot set timestamp type"); oops(pcm, rc, "cannot set timestamp type");
goto fail; goto fail;
} }
} }
#endif #endif
pcm->underruns = 0; pcm->underruns = 0;
return pcm; return pcm;
fail: fail:
if (flags & PCM_MMAP) if (flags & PCM_MMAP)
munmap(pcm->mmap_buffer, pcm_frames_to_bytes(pcm, pcm->buffer_size)); munmap(pcm->mmap_buffer, pcm_frames_to_bytes(pcm, pcm->buffer_size));
fail_close: fail_close:
close(pcm->fd); close(pcm->fd);
pcm->fd = -1; pcm->fd = -1;
return pcm; return pcm;
} }
#if 0 #if 0