]>
code.delx.au - pulseaudio/blob - src/source-output.c
25c661a98c7bda978415caca1649ad8ed74894e1
5 #include "sourceoutput.h"
7 struct pa_source_output
* pa_source_output_new(struct pa_source
*s
, const char *name
, const struct pa_sample_spec
*spec
) {
8 struct pa_source_output
*o
;
9 struct pa_resampler
*resampler
= NULL
;
13 if (!pa_sample_spec_equal(&s
->sample_spec
, spec
))
14 if (!(resampler
= pa_resampler_new(&s
->sample_spec
, spec
)))
17 o
= malloc(sizeof(struct pa_source_output
));
19 o
->name
= name
? strdup(name
) : NULL
;
23 o
->sample_spec
= *spec
;
28 o
->resampler
= resampler
;
31 r
= pa_idxset_put(s
->core
->source_outputs
, o
, &o
->index
);
32 assert(r
== 0 && o
->index
!= PA_IDXSET_INVALID
);
33 r
= pa_idxset_put(s
->outputs
, o
, NULL
);
39 void pa_source_output_free(struct pa_source_output
* o
) {
42 assert(o
->source
&& o
->source
->core
);
43 pa_idxset_remove_by_data(o
->source
->core
->source_outputs
, o
, NULL
);
44 pa_idxset_remove_by_data(o
->source
->outputs
, o
, NULL
);
47 pa_resampler_free(o
->resampler
);
53 void pa_source_output_kill(struct pa_source_output
*i
) {
60 void pa_source_output_push(struct pa_source_output
*o
, const struct pa_memchunk
*chunk
) {
61 struct pa_memchunk rchunk
;
62 assert(o
&& chunk
&& chunk
->length
&& o
->push
);
69 pa_resampler_run(o
->resampler
, chunk
, &rchunk
);
73 assert(rchunk
.memblock
);
75 pa_memblock_unref(rchunk
.memblock
);