source-output: Add exception handling 70/292670/8 accepted/tizen/unified/20230703.143008 accepted/tizen/unified/dev/20230726.115809
authorJaechul Lee <jcsing.lee@samsung.com>
Thu, 11 May 2023 01:17:24 +0000 (10:17 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Thu, 29 Jun 2023 06:33:02 +0000 (15:33 +0900)
Some preprocessors handle a fixed size memblocks. So, if it doesn't have
enough size inside to apply audio-effects, it should wait for more blocks.

If preprocess returns PROCESSOR_ERR_BUFFERING, the I/O thread would do nothing.
And, preprocessor would wait for the next blocks.

[Version] 15.0-20
[Issue Type] Update

Change-Id: I799c083f23cc2add4e57f5ba0f422c6b1cf9b093
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
packaging/pulseaudio.spec
src/pulsecore/source-output.c

index 37f5427..2b95125 100644 (file)
@@ -4,7 +4,7 @@
 Name:             pulseaudio
 Summary:          Improved Linux sound server
 Version:          15.0
-Release:          19
+Release:          20
 Group:            Multimedia/Audio
 License:          LGPL-2.1
 URL:              http://pulseaudio.org
index 82cacd0..43fe0b4 100644 (file)
@@ -939,9 +939,17 @@ void pa_source_output_push(pa_source_output *o, const pa_memchunk *chunk) {
 
         if (!o->thread_info.resampler) {
 #ifdef TIZEN_AEC
-            if (o->preprocess && !o->preprocess(o, &qchunk, &ochunk))
-                o->push(o, &ochunk);
-            else
+            if (o->preprocess) {
+                int ret = o->preprocess(o, &qchunk, &ochunk);
+
+                /* in case of -2(ERR_BUFFERING), pushing a memblock should be skipped.
+                 * Because the preprocess needs more blocks to apply audio-effects */
+                if (ret == 0)
+                    o->push(o, &ochunk);
+                else if (ret != -2)
+                    o->push(o, &qchunk);
+
+            } else
                 o->push(o, &qchunk);
 #else
             o->push(o, &qchunk);
@@ -959,9 +967,15 @@ void pa_source_output_push(pa_source_output *o, const pa_memchunk *chunk) {
 
             if (rchunk.length > 0) {
 #ifdef TIZEN_AEC
-                if (o->preprocess && !o->preprocess(o, &rchunk, &ochunk))
-                    o->push(o, &ochunk);
-                else
+                if (o->preprocess) {
+                    int ret = o->preprocess(o, &rchunk, &ochunk);
+
+                    if (ret == 0)
+                        o->push(o, &ochunk);
+                    else if (ret != -2)
+                        o->push(o, &rchunk);
+
+                } else
                     o->push(o, &rchunk);
 #else
                 o->push(o, &rchunk);