]>
code.delx.au - pulseaudio/blob - polyp/play-memchunk.c
4 #include "play-memchunk.h"
5 #include "sink-input.h"
8 static void sink_input_kill(struct pa_sink_input
*i
) {
10 assert(i
&& i
->userdata
);
13 pa_memblock_unref(c
->memblock
);
15 pa_sink_input_free(i
);
18 static int sink_input_peek(struct pa_sink_input
*i
, struct pa_memchunk
*chunk
) {
19 struct pa_memchunk
*c
;
20 assert(i
&& chunk
&& i
->userdata
);
26 assert(c
->memblock
&& c
->memblock
->length
);
28 pa_memblock_ref(c
->memblock
);
33 static void si_kill(struct pa_mainloop_api
*m
, void *i
) {
37 static void sink_input_drop(struct pa_sink_input
*i
, size_t length
) {
38 struct pa_memchunk
*c
;
39 assert(i
&& length
&& i
->userdata
);
42 assert(length
<= c
->length
);
48 pa_mainloop_api_once(i
->sink
->core
->mainloop
, si_kill
, i
);
51 int pa_play_memchunk(struct pa_sink
*sink
, const char *name
, const struct pa_sample_spec
*ss
, const struct pa_memchunk
*chunk
, uint32_t volume
) {
52 struct pa_sink_input
*si
;
53 struct pa_memchunk
*nchunk
;
55 assert(sink
&& chunk
);
60 if (!(si
= pa_sink_input_new(sink
, name
, ss
)))
64 si
->peek
= sink_input_peek
;
65 si
->drop
= sink_input_drop
;
66 si
->kill
= sink_input_kill
;
68 si
->userdata
= nchunk
= pa_xmalloc(sizeof(struct pa_memchunk
));
71 pa_memblock_ref(chunk
->memblock
);