preprocessor: Improve AEC performance 08/301008/2
authorJaechul Lee <jcsing.lee@samsung.com>
Tue, 7 Nov 2023 04:37:48 +0000 (13:37 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Fri, 10 Nov 2023 02:08:03 +0000 (11:08 +0900)
Added exception handlings instead of using silence blocks

[Version] 15.0.65
[Issue Type] Update

Change-Id: I888b4f0d92b88e770fa3866af1b6fbb2b846c127
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/preprocessor/module-tizenaudio-preprocessor.c
src/preprocessor/processor.c
src/preprocessor/processor_holder.c
src/preprocessor/processor_reference.c

index d752c03..e1e2d8b 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          15.0.64
+Version:          15.0.65
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index c8369c1..5b64cfb 100644 (file)
@@ -293,7 +293,10 @@ static pa_processor_holder *build_processor_holder(pa_core *core, pa_source_outp
     }
 
     processors_list = pa_proplist_gets(data->proplist, PA_PROP_MEDIA_PREPROCESSOR_METHOD);
-    pa_assert(processors_list);
+    if (!processors_list) {
+        pa_log_error("Failed to get preprocessor method");
+        goto fail;
+    }
 
     if (proplist_get_fragment_size_usec(data->source->proplist, &data->source->sample_spec, &process_usec) < 0)
         pa_log_warn("Failed to get source fragment usec. use default process usec");
index e44e870..889801f 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <assert.h>
 #include "processor.h"
+#include "processor-def.h"
 
 #ifdef __DEBUG__
 #include <stdio.h>
@@ -263,9 +264,9 @@ int pa_processor_process(pa_processor *processor, pa_memchunk *chunk) {
     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.");
-            return -1;
+        if ((r = pa_processor_reference_pull(processor->reference, &rchunk)) < 0) {
+            pa_log_warn("Failed to get memblock from reference memblockq. ret(%d)", r);
+            return -PROCESSOR_ERR_BUFFERING;
         }
 
         reference = pa_memblock_acquire_chunk(&rchunk);
index ceed0d3..31f4a7d 100644 (file)
@@ -34,7 +34,7 @@
 #include "processor_holder.h"
 
 #define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
-#define DEFAULT_PREBUFFER_MSEC (600)
+#define DEFAULT_PREBUFFER_MSEC (300)
 
 pa_processor_holder *pa_processor_holder_new(pa_core *core, pa_sample_spec *ss) {
     pa_processor_holder *holder;
index 0b0ece0..b41ca99 100644 (file)
@@ -208,6 +208,7 @@ int pa_processor_reference_push(pa_processor_reference *reference, pa_memchunk *
 int pa_processor_reference_pull(pa_processor_reference *reference, pa_memchunk *chunk) {
     int r;
     size_t length;
+    size_t memblock_length;
 
     pa_assert(reference);
     pa_assert(chunk);
@@ -238,6 +239,14 @@ int pa_processor_reference_pull(pa_processor_reference *reference, pa_memchunk *
     }
 
 exit:
+    memblock_length = pa_memblockq_get_length(reference->memblockq);
+    if (memblock_length < length) {
+        pa_log_info("reference memblockq has less memblocks. memblock_length(%zu), length(%zu)",
+                        memblock_length, length);
+
+        return -1;
+    }
+
     if ((r = pa_memblockq_peek_fixed_size(reference->memblockq, length, chunk)) < 0) {
         pa_log_error("Failed to get memblock from reference memblockq");
         return r;