Skip to content

Commit 1a39501

Browse files
committed
impl pa_stream_begin_write and pa_stream_cancel_write
1 parent 08a3b4a commit 1a39501

File tree

3 files changed

+43
-16
lines changed

3 files changed

+43
-16
lines changed

src/apulse-stream.c

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,39 @@ do_connect_pcm(pa_stream *s, snd_pcm_stream_t stream_direction)
232232
return -1;
233233
}
234234

235+
APULSE_EXPORT
236+
int
237+
pa_stream_begin_write(pa_stream *p, void **data, size_t *nbytes)
238+
{
239+
trace_info("F %s p=%p\n", __func__, p);
240+
241+
free(p->write_buffer);
242+
243+
if (*nbytes == (size_t)-1)
244+
*nbytes = 8192;
245+
246+
p->write_buffer = malloc(*nbytes);
247+
248+
if (!p->write_buffer)
249+
return -1;
250+
251+
*data = p->write_buffer;
252+
253+
return 0;
254+
}
255+
256+
APULSE_EXPORT
257+
int
258+
pa_stream_cancel_write(pa_stream *p)
259+
{
260+
trace_info("F %s p=%p\n", __func__, p);
261+
262+
free(p->write_buffer);
263+
p->write_buffer = NULL;
264+
265+
return 0;
266+
}
267+
235268
APULSE_EXPORT
236269
int
237270
pa_stream_connect_playback(pa_stream *s, const char *dev, const pa_buffer_attr *attr,
@@ -549,6 +582,7 @@ pa_stream_unref(pa_stream *s)
549582
g_hash_table_remove(s->c->streams_ht, GINT_TO_POINTER(s->idx));
550583
ringbuffer_free(s->rb);
551584
free(s->peek_buffer);
585+
free(s->write_buffer);
552586
free(s->name);
553587
free(s);
554588
}
@@ -608,8 +642,14 @@ pa_stream_write(pa_stream *s, const void *data, size_t nbytes, pa_free_cb_t free
608642
size_t written = ringbuffer_write(s->rb, data, nbytes);
609643
s->timing_info.since_underrun += written;
610644
s->timing_info.write_index += written;
611-
if (free_cb)
612-
free_cb((void *)data);
645+
646+
if (data == s->write_buffer) {
647+
free(s->write_buffer);
648+
s->write_buffer = NULL;
649+
} else {
650+
if (free_cb)
651+
free_cb((void *)data);
652+
}
613653

614654
return 0;
615655
}

src/apulse.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ struct pa_stream {
121121
ringbuffer_t *rb;
122122
void *peek_buffer;
123123
size_t peek_buffer_data_len;
124+
void *write_buffer;
124125
volatile int paused;
125126
};
126127

src/notimplemented.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -787,20 +787,6 @@ pa_context* pa_stream_get_context(pa_stream *p)
787787
return NULL;
788788
}
789789

790-
APULSE_EXPORT
791-
int pa_stream_begin_write(pa_stream *p, void **data, size_t *nbytes)
792-
{
793-
trace_info("Z %s\n", __func__);
794-
return 0;
795-
}
796-
797-
APULSE_EXPORT
798-
int pa_stream_cancel_write(pa_stream *p)
799-
{
800-
trace_info("Z %s\n", __func__);
801-
return 0;
802-
}
803-
804790
APULSE_EXPORT
805791
void pa_stream_set_overflow_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata)
806792
{

0 commit comments

Comments
 (0)