pa_assert(chunk);
if (processor->reference) {
- if (pa_processor_reference_pull(processor->reference, &rchunk) < 0)
- pa_log_warn("Failed to get memblock from reference memblockq. It will be used silence chunk");
+ if (pa_processor_reference_pull(processor->reference, &rchunk) < 0) {
+ pa_log_warn("Failed to get memblock from reference memblockq.");
+ return -1;
+ }
reference = pa_memblock_acquire_chunk(&rchunk);
}
#include "processor_holder.h"
#define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+#define DEFAULT_PREBUFFER_MSEC (300)
pa_processor_holder *pa_processor_holder_new(pa_core *core, pa_sample_spec *ss) {
pa_processor_holder *holder;
MEMBLOCKQ_MAXLENGTH,
0,
ss,
- 0,
+ pa_usec_to_bytes(DEFAULT_PREBUFFER_MSEC * PA_USEC_PER_MSEC, ss),
0,
0,
&silence);
pull_queue = holder->input;
+ if (!pa_memblockq_is_readable(pull_queue)) {
+ pa_log_info ("prebuffering for preprocessing. input_queue length(%zu)",
+ pa_memblockq_get_length(pull_queue));
+ return -PROCESSOR_ERR_BUFFERING;
+ }
+
PA_IDXSET_FOREACH(p, holder->processors, idx) {
process_size = pa_processor_get_process_bytes(p);
length = pa_memblockq_get_length(pull_queue);
pa_sample_spec *request_ss,
pa_usec_t process_usec,
pa_processor_reference_method_t method) {
- pa_processor_reference *reference;
+ pa_processor_reference *reference = NULL;
pa_assert(core);
pa_assert(sink_ss);
reference->interface = pa_processor_reference_method_create(method);
if (!reference->interface) {
pa_log_error("Failed to create reference interface");
- return NULL;
+ goto fail;
}
pa_assert(reference->interface->create);
pa_assert(reference->interface->destroy);
if (!(reference->priv = reference->interface->create(request_ss))) {
- pa_processor_reference_free(reference);
pa_log_error("Failed to create custom reference");
- return NULL;
+ goto fail;
}
}
return reference;
+
+fail:
+ pa_processor_reference_free(reference);
+
+ return NULL;
}
pa_processor_reference *pa_processor_reference_new(pa_core *core,
pa_log_info("resampler was created for reference");
}
- pa_log_info("Created reference memblockq rate(%d), channels(%d)", request_ss->rate, request_ss->channels);
+ pa_log_info("Created reference memblockq rate(%d), channels(%d), process_bytes(%zu)",
+ request_ss->rate, request_ss->channels, reference->process_bytes);
return reference;
}
char *pa_processor_reference_dump_index(pa_processor_reference *reference) {
+ int64_t windex, rindex;
+
pa_assert(reference);
- return pa_sprintf_malloc("windex:rindex(%" PRId64 ":%" PRId64 ")",
- pa_memblockq_get_write_index(reference->memblockq),
- pa_memblockq_get_read_index(reference->memblockq));
+ windex = pa_memblockq_get_write_index(reference->memblockq);
+ rindex = pa_memblockq_get_read_index(reference->memblockq);
+
+ return pa_sprintf_malloc("windex:rindex(%" PRId64 ":%" PRId64 ") diff(%" PRId64 ")",
+ windex, rindex, windex - rindex);
}
pa_sink *pa_processor_reference_get_sink(pa_processor_reference *reference) {