MODULE_LDFLAGS = $(AM_LDFLAGS) $(PACORE_LDFLAGS) $(PA_LDFLAGS) -module -disable-static -avoid-version
MODULE_LIBADD = $(AM_LIBADD) $(PACORE_LIBS) $(PA_LIBS)
-pulsemodlibexec_LTLIBRARIES = \
- libhal-interface.la \
- libcommunicator.la \
+pulsemodlibexec_LTLIBRARIES = libhal-interface.la libcommunicator.la
+
+if ENABLE_PREPROCESSOR
+pulsemodlibexec_LTLIBRARIES += libprocessor.la
+endif
+
+pulsemodlibexec_LTLIBRARIES += \
module-tizenaudio-sink.la \
module-tizenaudio-source.la \
module-tizenaudio-sink2.la \
pulsemodlibexec_LTLIBRARIES += module-acm-sink.la
endif
if ENABLE_PREPROCESSOR
-pulsemodlibexec_LTLIBRARIES += libprocessor.la module-tizenaudio-preprocessor.la
+pulsemodlibexec_LTLIBRARIES += module-tizenaudio-preprocessor.la
endif
pulsemodlibexec_LTLIBRARIES += libtizenaudio-util.la
module_tizenaudio_sink_la_LIBADD = $(MODULE_LIBADD) libhal-interface.la
module_tizenaudio_sink_la_CFLAGS = $(MODULE_CFLAGS) -DPA_MODULE_NAME=module_tizenaudio_sink
+if ENABLE_PREPROCESSOR
+module_tizenaudio_sink_la_LIBADD += libprocessor.la
+module_tizenaudio_sink_la_CFLAGS += -DENABLE_PREPROCESSOR
+endif
+
module_tizenaudio_source_la_SOURCES = src/module-tizenaudio-source.c
module_tizenaudio_source_la_LDFLAGS = $(MODULE_LDFLAGS)
module_tizenaudio_source_la_LIBADD = $(MODULE_LIBADD) libhal-interface.la
#include "hal-interface.h"
+#ifdef ENABLE_PREPROCESSOR
+#include "preprocessor/processor-def.h"
+#include "preprocessor/processor_holder.h"
+#include "preprocessor/processor_reference.h"
+#endif
+
PA_MODULE_AUTHOR("Tizen");
PA_MODULE_DESCRIPTION("Tizen Audio Sink");
PA_MODULE_VERSION(PACKAGE_VERSION);
uint64_t small_avail_count;
uint64_t write_count;
pa_hal_interface *hal_interface;
+
+#ifdef ENABLE_PREPROCESSOR
+ bool preprocess_state;
+ pa_msgobject *preprocessor;
+ pa_asyncmsgq *preprocessor_asyncmsgq;
+ void *holder;
+ pa_rtpoll_item *preprocessor_poll_item;
+#endif
};
static const char* const valid_modargs[] = {
*((pa_usec_t*)data) = latency;
return 0;
}
+#ifdef ENABLE_PREPROCESSOR
+ case PA_SINK_MESSAGE_PREPROCESSOR_REBUILD_RTPOLL: {
+ struct arguments {
+ pa_msgobject *o;
+ pa_asyncmsgq *q;
+ void *holder;
+ } *args;
+
+ args = (struct arguments *)data;
+
+ if (args) {
+ u->preprocessor = args->o;
+ u->preprocessor_asyncmsgq = args->q;
+ u->holder = args->holder;
+ u->preprocessor_poll_item = pa_rtpoll_item_new_asyncmsgq_write(u->rtpoll, PA_RTPOLL_EARLY, args->q);
+ u->preprocess_state = true;
+ } else {
+ pa_rtpoll_item_free(u->preprocessor_poll_item);
+ u->preprocessor_poll_item = NULL;
+ u->preprocessor = NULL;
+ u->holder = NULL;
+ u->preprocess_state = false;
+ }
+
+ return 0;
+ }
+ case PA_SINK_MESSAGE_SET_STATE: {
+ struct state_data {
+ pa_sink_state_t state;
+ pa_suspend_cause_t suspend_cause;
+ } state;
+
+ pa_processor_reference *reference;
+ pa_sink *sink;
+
+ state = *((struct state_data *)data);
+
+ if (!u->holder)
+ break;
+
+ reference = pa_processor_holder_get_connected_processor_reference(u->holder);
+ if (!reference)
+ break;
+
+ sink = pa_processor_reference_get_sink(reference);
+ if (!sink)
+ break;
+
+ if (sink == u->sink && state.state == PA_SINK_RUNNING) {
+ u->preprocess_state = true;
+ pa_asyncmsgq_post(u->preprocessor_asyncmsgq, u->preprocessor,
+ PA_SOURCE_MESSAGE_PREPROCESSOR_RESET_REFERENCE, (void *)true, 0, NULL, NULL);
+ } else {
+ u->preprocess_state = false;
+ }
+
+ break;
+ }
+#endif
}
return pa_sink_process_msg(o, code, data, offset, chunk);
pa_log_warn("write takes long time %" PRIu64 " : (%" PRIu64 " - %" PRIu64 ")", 10 * PA_USEC_PER_MSEC, after_write, before_write);
pa_memblock_release(chunk.memblock);
+
+#ifdef ENABLE_PREPROCESSOR
+ if (u->preprocess_state) {
+ pa_asyncmsgq_post(u->preprocessor_asyncmsgq, u->preprocessor,
+ PA_SOURCE_MESSAGE_PREPROCESSOR_PUSH_REFERENCE, u->holder, 0, &chunk, NULL);
+ }
+#endif
+
pa_memblock_unref(chunk.memblock);
u->timestamp += pa_bytes_to_usec(chunk.length, &u->sink->sample_spec);
u->timestamp_written = pa_rtclock_now();