本文整理汇总了C++中pa_memblock_acquire函数的典型用法代码示例。如果您正苦于以下问题:C++ pa_memblock_acquire函数的具体用法?C++ pa_memblock_acquire怎么用?C++ pa_memblock_acquire使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pa_memblock_acquire函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: do_write
static int do_write(connection *c) {
pa_memchunk chunk;
ssize_t r;
void *p;
connection_assert_ref(c);
if (!c->source_output)
return 0;
if (pa_memblockq_peek(c->output_memblockq, &chunk) < 0) {
/* pa_log("peek failed"); */
return 0;
}
pa_assert(chunk.memblock);
pa_assert(chunk.length);
p = pa_memblock_acquire(chunk.memblock);
r = pa_iochannel_write(c->io, (uint8_t*) p+chunk.index, chunk.length);
pa_memblock_release(chunk.memblock);
pa_memblock_unref(chunk.memblock);
if (r < 0) {
pa_log("write(): %s", pa_cstrerror(errno));
return -1;
}
pa_memblockq_drop(c->output_memblockq, (size_t) r);
return 1;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:33,代码来源:protocol-simple.c
示例2: voice_append_chunk_to_file
void voice_append_chunk_to_file(struct userdata *u, const char *file_name, pa_memchunk *chunk) {
int i;
FILE *file = NULL;
for (i = 0; i < file_table_size && file_table[i].name != NULL; i++) {
if (0 == strcmp(file_name, file_table[i].name)) {
file = file_table[i].file;
}
}
if (i >= file_table_size) {
pa_log("Can't open new files, not writing to file \"%s\"", file_name);
return;
}
if (file == NULL) {
file = file_table[i].file = fopen(file_name, "w");
if (file == NULL) {
pa_log("Can't open file \"%s\": %s", file_name, strerror(errno));
return;
}
}
char *p = pa_memblock_acquire(chunk->memblock);
fwrite(p + chunk->index, 1, chunk->length, file);
pa_memblock_release(chunk->memblock);
}
开发者ID:community-ssu,项目名称:pulseaudio-nokia,代码行数:26,代码来源:voice-util.c
示例3: pa_memchunk_dump_to_file
void pa_memchunk_dump_to_file(pa_memchunk *c, const char *fn) {
FILE *f;
void *p;
pa_assert(c);
pa_assert(fn);
/* Only for debugging purposes */
f = pa_fopen_cloexec(fn, "a");
if (!f) {
pa_log_warn("Failed to open '%s': %s", fn, pa_cstrerror(errno));
return;
}
p = pa_memblock_acquire(c->memblock);
if (fwrite((uint8_t*) p + c->index, 1, c->length, f) != c->length)
pa_log_warn("Failed to write to '%s': %s", fn, pa_cstrerror(errno));
pa_memblock_release(c->memblock);
fclose(f);
}
开发者ID:Distrotech,项目名称:pulseaudio,代码行数:25,代码来源:sample-util.c
示例4: do_read
static int do_read(connection *c) {
pa_memchunk chunk;
ssize_t r;
size_t l;
void *p;
size_t space = 0;
connection_assert_ref(c);
if (!c->sink_input || (l = (size_t) pa_atomic_load(&c->playback.missing)) <= 0)
return 0;
if (c->playback.current_memblock) {
space = pa_memblock_get_length(c->playback.current_memblock) - c->playback.memblock_index;
if (space <= 0) {
pa_memblock_unref(c->playback.current_memblock);
c->playback.current_memblock = NULL;
}
}
if (!c->playback.current_memblock) {
pa_assert_se(c->playback.current_memblock = pa_memblock_new(c->protocol->core->mempool, (size_t) -1));
c->playback.memblock_index = 0;
space = pa_memblock_get_length(c->playback.current_memblock);
}
if (l > space)
l = space;
p = pa_memblock_acquire(c->playback.current_memblock);
r = pa_iochannel_read(c->io, (uint8_t*) p + c->playback.memblock_index, l);
pa_memblock_release(c->playback.current_memblock);
if (r <= 0) {
if (r < 0 && (errno == EINTR || errno == EAGAIN))
return 0;
pa_log_debug("read(): %s", r == 0 ? "EOF" : pa_cstrerror(errno));
return -1;
}
chunk.memblock = c->playback.current_memblock;
chunk.index = c->playback.memblock_index;
chunk.length = (size_t) r;
c->playback.memblock_index += (size_t) r;
pa_asyncmsgq_post(c->sink_input->sink->asyncmsgq, PA_MSGOBJECT(c->sink_input), SINK_INPUT_MESSAGE_POST_DATA, NULL, 0, &chunk, NULL);
pa_atomic_sub(&c->playback.missing, (int) r);
return 0;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:56,代码来源:protocol-simple.c
示例5: pa_srbchannel_new
pa_srbchannel* pa_srbchannel_new(pa_mainloop_api *m, pa_mempool *p) {
int capacity;
int readfd;
struct srbheader *srh;
pa_srbchannel* sr = pa_xmalloc0(sizeof(pa_srbchannel));
sr->mainloop = m;
sr->memblock = pa_memblock_new_pool(p, -1);
if (!sr->memblock)
goto fail;
srh = pa_memblock_acquire(sr->memblock);
pa_zero(*srh);
sr->rb_read.memory = (uint8_t*) srh + PA_ALIGN(sizeof(*srh));
srh->readbuf_offset = sr->rb_read.memory - (uint8_t*) srh;
capacity = (pa_memblock_get_length(sr->memblock) - srh->readbuf_offset) / 2;
sr->rb_write.memory = PA_ALIGN_PTR(sr->rb_read.memory + capacity);
srh->writebuf_offset = sr->rb_write.memory - (uint8_t*) srh;
capacity = PA_MIN(capacity, srh->writebuf_offset - srh->readbuf_offset);
pa_log_debug("SHM block is %d bytes, ringbuffer capacity is 2 * %d bytes",
(int) pa_memblock_get_length(sr->memblock), capacity);
srh->capacity = sr->rb_read.capacity = sr->rb_write.capacity = capacity;
sr->rb_read.count = &srh->read_count;
sr->rb_write.count = &srh->write_count;
sr->sem_read = pa_fdsem_new_shm(&srh->read_semdata);
if (!sr->sem_read)
goto fail;
sr->sem_write = pa_fdsem_new_shm(&srh->write_semdata);
if (!sr->sem_write)
goto fail;
readfd = pa_fdsem_get(sr->sem_read);
#ifdef DEBUG_SRBCHANNEL
pa_log("Enabling io event on fd %d", readfd);
#endif
sr->read_event = m->io_new(m, readfd, PA_IO_EVENT_INPUT, semread_cb, sr);
m->io_enable(sr->read_event, PA_IO_EVENT_INPUT);
return sr;
fail:
pa_srbchannel_free(sr);
return NULL;
}
开发者ID:Distrotech,项目名称:pulseaudio,代码行数:56,代码来源:srbchannel.c
示例6: pa_memchunk_memcpy
pa_memchunk* pa_memchunk_memcpy(pa_memchunk *dst, pa_memchunk *src) {
void *p, *q;
pa_assert(dst);
pa_assert(src);
pa_assert(dst->length == src->length);
p = pa_memblock_acquire(dst->memblock);
q = pa_memblock_acquire(src->memblock);
memmove((uint8_t*) p + dst->index,
(uint8_t*) q + src->index,
dst->length);
pa_memblock_release(dst->memblock);
pa_memblock_release(src->memblock);
return dst;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:19,代码来源:memchunk.c
示例7: do_read
static void do_read(struct userdata *u) {
uint32_t free_frags;
pa_memchunk memchunk;
WAVEHDR *hdr;
MMRESULT res;
void *p;
if (!u->source)
return;
if (!PA_SOURCE_IS_LINKED(u->source->state))
return;
EnterCriticalSection(&u->crit);
free_frags = u->free_ifrags;
u->free_ifrags = 0;
LeaveCriticalSection(&u->crit);
if (free_frags == u->fragments)
pa_log_debug("WaveIn overflow!");
while (free_frags) {
hdr = &u->ihdrs[u->cur_ihdr];
if (hdr->dwFlags & WHDR_PREPARED)
waveInUnprepareHeader(u->hwi, hdr, sizeof(WAVEHDR));
if (hdr->dwBytesRecorded) {
memchunk.memblock = pa_memblock_new(u->core->mempool, hdr->dwBytesRecorded);
pa_assert(memchunk.memblock);
p = pa_memblock_acquire(memchunk.memblock);
memcpy((char*) p, hdr->lpData, hdr->dwBytesRecorded);
pa_memblock_release(memchunk.memblock);
memchunk.length = hdr->dwBytesRecorded;
memchunk.index = 0;
pa_source_post(u->source, &memchunk);
pa_memblock_unref(memchunk.memblock);
}
res = waveInPrepareHeader(u->hwi, hdr, sizeof(WAVEHDR));
if (res != MMSYSERR_NOERROR)
pa_log_error("Unable to prepare waveIn block: %d", res);
res = waveInAddBuffer(u->hwi, hdr, sizeof(WAVEHDR));
if (res != MMSYSERR_NOERROR)
pa_log_error("Unable to add waveIn block: %d", res);
free_frags--;
u->cur_ihdr++;
u->cur_ihdr %= u->fragments;
}
}
开发者ID:Thread974,项目名称:pa,代码行数:54,代码来源:module-waveout.c
示例8: pa_assert
/* No lock necessary. */
pa_memblock *pa_memblock_will_need(pa_memblock *b) {
void *p;
pa_assert(b);
pa_assert(PA_REFCNT_VALUE(b) > 0);
p = pa_memblock_acquire(b);
pa_will_need(p, b->length);
pa_memblock_release(b);
return b;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:13,代码来源:memblock.c
示例9: dump_chunk
static void dump_chunk(const pa_memchunk *chunk) {
size_t n;
void *q;
char *e;
pa_assert(chunk);
q = pa_memblock_acquire(chunk->memblock);
for (e = (char*) q + chunk->index, n = 0; n < chunk->length; n++, e++)
fprintf(stderr, "%c", *e);
pa_memblock_release(chunk->memblock);
}
开发者ID:BYSTROSTREL,项目名称:pulseaudio,代码行数:12,代码来源:memblockq-test.c
示例10: pa_assert
pa_memblock *pa_silence_memblock(pa_memblock* b, const pa_sample_spec *spec) {
void *data;
pa_assert(b);
pa_assert(spec);
data = pa_memblock_acquire(b);
pa_silence_memory(data, pa_memblock_get_length(b), spec);
pa_memblock_release(b);
return b;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:12,代码来源:sample-util.c
示例11: pa_silence_memchunk
pa_memchunk* pa_silence_memchunk(pa_memchunk *c, const pa_sample_spec *spec) {
void *data;
pa_assert(c);
pa_assert(c->memblock);
pa_assert(spec);
data = pa_memblock_acquire(c->memblock);
pa_silence_memory((uint8_t*) data+c->index, c->length, spec);
pa_memblock_release(c->memblock);
return c;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:13,代码来源:sample-util.c
示例12: process_render
static int process_render(struct userdata *u) {
pa_assert(u);
if (u->memchunk.length <= 0)
pa_sink_render(u->sink, ioring->usable_buffer_space, &u->memchunk);
pa_assert(u->memchunk.length > 0);
xc_evtchn_notify(xce, xen_evtchn_port);
for (;;) {
ssize_t l;
void *p;
p = pa_memblock_acquire(u->memchunk.memblock);
/* xen: write data to ring buffer & notify backend */
l = ring_write(ioring, (uint8_t*)p + u->memchunk.index, u->memchunk.length);
pa_memblock_release(u->memchunk.memblock);
pa_assert(l != 0);
if (l < 0) {
if (errno == EINTR)
continue;
else if (errno == EAGAIN)
return 0;
else {
pa_log("Failed to write data to FIFO: %s", pa_cstrerror(errno));
return -1;
}
} else {
u->memchunk.index += (size_t) l;
u->memchunk.length -= (size_t) l;
if (u->memchunk.length <= 0) {
pa_memblock_unref(u->memchunk.memblock);
pa_memchunk_reset(&u->memchunk);
}
}
return 0;
}
}
开发者ID:Oboyma,项目名称:pulseaudio,代码行数:47,代码来源:module-xenpv-sink.c
示例13: process_sink_render
static int process_sink_render(struct userdata *u)
{
pa_assert(u);
if (u->memchunk_sink.length <= 0)
pa_sink_render(u->sink, libvchan_buffer_space(u->play_ctrl), &u->memchunk_sink);
pa_assert(u->memchunk_sink.length > 0);
for (;;) {
ssize_t l;
void *p;
p = pa_memblock_acquire(u->memchunk_sink.memblock);
l = write_to_vchan(u->play_ctrl, (char *) p +
u->memchunk_sink.index, u->memchunk_sink.length);
pa_memblock_release(u->memchunk_sink.memblock);
pa_assert(l != 0);
if (l < 0) {
if (errno == EINTR)
continue;
else if (errno == EAGAIN)
return 0;
else {
pa_log
("Failed to write data to VCHAN: %s",
pa_cstrerror(errno));
return -1;
}
} else {
u->memchunk_sink.index += (size_t) l;
u->memchunk_sink.length -= (size_t) l;
if (u->memchunk_sink.length <= 0) {
pa_memblock_unref(u->memchunk_sink.memblock);
pa_memchunk_reset(&u->memchunk_sink);
}
}
return 0;
}
}
开发者ID:uofis,项目名称:qubes-gui-agent-linux,代码行数:47,代码来源:module-vchan-sink.c
示例14: cmtspeech_source_output_push_cb
/* Called from thread context */
static void cmtspeech_source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk) {
struct userdata *u;
uint8_t *buf;
pa_assert(o);
pa_assert_se(u = o->userdata);
if (chunk->length != u->ul_frame_size) {
pa_log_warn("Pushed UL audio frame has wrong size %zu", chunk->length);
return;
}
buf = ((uint8_t *) pa_memblock_acquire(chunk->memblock)) + chunk->index;
(void)cmtspeech_send_ul_frame(u, buf, chunk->length);
pa_memblock_release(chunk->memblock);
}
开发者ID:tanuk2,项目名称:pulseaudio-modules-nemo,代码行数:19,代码来源:cmtspeech-source-output.c
示例15: pa_srbchannel_new_from_template
pa_srbchannel* pa_srbchannel_new_from_template(pa_mainloop_api *m, pa_srbchannel_template *t)
{
int temp;
struct srbheader *srh;
pa_srbchannel* sr = pa_xmalloc0(sizeof(pa_srbchannel));
sr->mainloop = m;
sr->memblock = t->memblock;
pa_memblock_ref(sr->memblock);
srh = pa_memblock_acquire(sr->memblock);
sr->rb_read.capacity = sr->rb_write.capacity = srh->capacity;
sr->rb_read.count = &srh->read_count;
sr->rb_write.count = &srh->write_count;
sr->rb_read.memory = (uint8_t*) srh + srh->readbuf_offset;
sr->rb_write.memory = (uint8_t*) srh + srh->writebuf_offset;
sr->sem_read = pa_fdsem_open_shm(&srh->read_semdata, t->readfd);
if (!sr->sem_read)
goto fail;
sr->sem_write = pa_fdsem_open_shm(&srh->write_semdata, t->writefd);
if (!sr->sem_write)
goto fail;
pa_srbchannel_swap(sr);
temp = t->readfd; t->readfd = t->writefd; t->writefd = temp;
#ifdef DEBUG_SRBCHANNEL
pa_log("Enabling io event on fd %d", t->readfd);
#endif
sr->read_event = m->io_new(m, t->readfd, PA_IO_EVENT_INPUT, semread_cb, sr);
m->io_enable(sr->read_event, PA_IO_EVENT_INPUT);
return sr;
fail:
pa_srbchannel_free(sr);
return NULL;
}
开发者ID:asceticmt,项目名称:pulseaudio,代码行数:43,代码来源:srbchannel.c
示例16: process_render
static int process_render(struct userdata *u) {
pa_assert(u);
if (u->memchunk.length <= 0)
pa_sink_render(u->sink, u->buffer_size, &u->memchunk);
pa_assert(u->memchunk.length > 0);
for (;;) {
ssize_t l;
void *p;
p = pa_memblock_acquire(u->memchunk.memblock);
l = pa_write(u->fd, (uint8_t*) p + u->memchunk.index, u->memchunk.length, &u->write_type);
pa_memblock_release(u->memchunk.memblock);
pa_assert(l != 0);
if (l < 0) {
if (errno == EINTR)
continue;
else if (errno == EAGAIN)
return 0;
else {
pa_log("Failed to write data to FIFO: %s", pa_cstrerror(errno));
return -1;
}
} else {
u->memchunk.index += (size_t) l;
u->memchunk.length -= (size_t) l;
if (u->memchunk.length <= 0) {
pa_memblock_unref(u->memchunk.memblock);
pa_memchunk_reset(&u->memchunk);
}
}
return 0;
}
}
开发者ID:plbossart,项目名称:pulseaudio,代码行数:43,代码来源:module-pipe-sink.c
示例17: dump
static void dump(pa_memblockq *bq) {
printf(">");
for (;;) {
pa_memchunk out;
char *e;
size_t n;
void *q;
if (pa_memblockq_peek(bq, &out) < 0)
break;
q = pa_memblock_acquire(out.memblock);
for (e = (char*) q + out.index, n = 0; n < out.length; n++)
printf("%c", *e);
pa_memblock_release(out.memblock);
pa_memblock_unref(out.memblock);
pa_memblockq_drop(bq, out.length);
}
printf("<\n");
}
开发者ID:almosthappy4u,项目名称:PulseAudio-UCM,代码行数:23,代码来源:memblockq-test.c
示例18: pa_memchunk_sine
void pa_memchunk_sine(pa_memchunk *c, pa_mempool *pool, unsigned rate, unsigned freq) {
size_t l;
unsigned gcd, n;
void *p;
pa_memchunk_reset(c);
gcd = pa_gcd(rate, freq);
n = rate / gcd;
l = pa_mempool_block_size_max(pool) / sizeof(float);
l /= n;
if (l <= 0) l = 1;
l *= n;
c->length = l * sizeof(float);
c->memblock = pa_memblock_new(pool, c->length);
p = pa_memblock_acquire(c->memblock);
calc_sine(p, c->length, freq * l / rate);
pa_memblock_release(c->memblock);
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:23,代码来源:sample-util.c
示例19: sink_process_msg
static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *memchunk) {
struct userdata *u = PA_SINK(o)->userdata;
switch (code) {
case SINK_MESSAGE_RENDER:
/* Handle the request from the JACK thread */
if (u->sink->thread_info.state == PA_SINK_RUNNING) {
pa_memchunk chunk;
size_t nbytes;
void *p;
pa_assert(offset > 0);
nbytes = (size_t) offset * pa_frame_size(&u->sink->sample_spec);
pa_sink_render_full(u->sink, nbytes, &chunk);
p = (uint8_t*) pa_memblock_acquire(chunk.memblock) + chunk.index;
pa_deinterleave(p, u->buffer, u->channels, sizeof(float), (unsigned) offset);
pa_memblock_release(chunk.memblock);
pa_memblock_unref(chunk.memblock);
} else {
unsigned c;
pa_sample_spec ss;
/* Humm, we're not RUNNING, hence let's write some silence */
ss = u->sink->sample_spec;
ss.channels = 1;
for (c = 0; c < u->channels; c++)
pa_silence_memory(u->buffer[c], (size_t) offset * pa_sample_size(&ss), &ss);
}
u->frames_in_buffer = (jack_nframes_t) offset;
u->saved_frame_time = * (jack_nframes_t*) data;
u->saved_frame_time_valid = TRUE;
return 0;
case SINK_MESSAGE_BUFFER_SIZE:
pa_sink_set_max_request_within_thread(u->sink, (size_t) offset * pa_frame_size(&u->sink->sample_spec));
return 0;
case SINK_MESSAGE_ON_SHUTDOWN:
pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
return 0;
case PA_SINK_MESSAGE_GET_LATENCY: {
jack_nframes_t l, ft, d;
size_t n;
/* This is the "worst-case" latency */
l = jack_port_get_total_latency(u->client, u->port[0]) + u->frames_in_buffer;
if (u->saved_frame_time_valid) {
/* Adjust the worst case latency by the time that
* passed since we last handed data to JACK */
ft = jack_frame_time(u->client);
d = ft > u->saved_frame_time ? ft - u->saved_frame_time : 0;
l = l > d ? l - d : 0;
}
/* Convert it to usec */
n = l * pa_frame_size(&u->sink->sample_spec);
*((pa_usec_t*) data) = pa_bytes_to_usec(n, &u->sink->sample_spec);
return 0;
}
}
return pa_sink_process_msg(o, code, data, offset, memchunk);
}
开发者ID:almosthappy4u,项目名称:PulseAudio-UCM,代码行数:78,代码来源:module-jack-sink.c
示例20: pa_sound_file_load
int pa_sound_file_load(
pa_mempool *pool,
const char *fname,
pa_sample_spec *ss,
pa_channel_map *map,
pa_memchunk *chunk,
pa_proplist *p) {
SNDFILE *sf = NULL;
SF_INFO sfi;
int ret = -1;
size_t l;
sf_count_t (*readf_function)(SNDFILE *sndfile, void *ptr, sf_count_t frames) = NULL;
void *ptr = NULL;
int fd;
pa_assert(fname);
pa_assert(ss);
pa_assert(chunk);
pa_memchunk_reset(chunk);
if ((fd = pa_open_cloexec(fname, O_RDONLY, 0)) < 0) {
pa_log("Failed to open file %s: %s", fname, pa_cstrerror(errno));
goto finish;
}
#ifdef HAVE_POSIX_FADVISE
if (posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL) < 0) {
pa_log_warn("POSIX_FADV_SEQUENTIAL failed: %s", pa_cstrerror(errno));
goto finish;
} else
pa_log_debug("POSIX_FADV_SEQUENTIAL succeeded.");
#endif
pa_zero(sfi);
if (!(sf = sf_open_fd(fd, SFM_READ, &sfi, 1))) {
pa_log("Failed to open file %s", fname);
goto finish;
}
fd = -1;
if (pa_sndfile_read_sample_spec(sf, ss) < 0) {
pa_log("Failed to determine file sample format.");
goto finish;
}
if ((map && pa_sndfile_read_channel_map(sf, map) < 0)) {
if (ss->channels > 2)
pa_log("Failed to determine file channel map, synthesizing one.");
pa_channel_map_init_extend(map, ss->channels, PA_CHANNEL_MAP_DEFAULT);
}
if (p)
pa_sndfile_init_proplist(sf, p);
if ((l = pa_frame_size(ss) * (size_t) sfi.frames) > PA_SCACHE_ENTRY_SIZE_MAX) {
pa_log("File too large");
goto finish;
}
chunk->memblock = pa_memblock_new(pool, l);
chunk->index = 0;
chunk->length = l;
readf_function = pa_sndfile_readf_function(ss);
ptr = pa_memblock_acquire(chunk->memblock);
if ((readf_function && readf_function(sf, ptr, sfi.frames) != sfi.frames) ||
(!readf_function && sf_read_raw(sf, ptr, (sf_count_t) l) != (sf_count_t) l)) {
pa_log("Premature file end");
goto finish;
}
ret = 0;
finish:
if (sf)
sf_close(sf);
if (ptr)
pa_memblock_release(chunk->memblock);
if (ret != 0 && chunk->memblock)
pa_memblock_unref(chunk->memblock);
if (fd >= 0)
pa_close(fd);
return ret;
}
开发者ID:Distrotech,项目名称:pulseaudio,代码行数:94,代码来源:sound-file.c
注:本文中的pa_memblock_acquire函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论