Name: pulseaudio
Summary: Improved Linux sound server
Version: 13.0
-Release: 4
+Release: 5
Group: Multimedia/Audio
License: LGPL-2.1
URL: http://pulseaudio.org
--with-access-group=pulse-access \
--enable-dlog \
--enable-buffer-attr \
- --enable-pcm-dump \
+ --disable-pcm-dump \
--enable-security \
--enable-udev-with-usb-only \
--enable-paready \
%if "%{tizen_profile_name}" == "tv"
--enable-prelink \
--enable-lwipc \
- --disable-pcm-dump \
%endif
%__make %{?_smp_mflags} V=0
pactl_LDADD = $(AM_LDADD) libpulse.la libpulsecommon-@PA_MAJORMINOR@.la $(LIBSNDFILE_LIBS)
pactl_CFLAGS = $(AM_CFLAGS) $(LIBSNDFILE_CFLAGS) -fPIE
pactl_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -pie
-if TIZEN_PCM_DUMP
-pactl_CFLAGS += $(VCONF_CFLAGS) -DTIZEN_PCM_DUMP
-pactl_LDADD += $(VCONF_LIBS)
-endif
pasuspender_SOURCES = utils/pasuspender.c
pasuspender_LDADD = $(AM_LDADD) libpulse.la libpulsecommon-@PA_MAJORMINOR@.la
pa_context_set_event_callback;
pa_context_set_name;
pa_context_set_pcm_dump;
-pa_context_set_pcm_dump_option;
pa_context_set_sink_input_mute;
pa_context_set_sink_input_volume;
pa_context_set_sink_mute_by_index;
return o;
}
-
-pa_operation* pa_context_set_pcm_dump_option(pa_context *c, uint32_t dump_option, int dump_option_enable, pa_context_success_cb_t cb, void *userdata) {
- pa_operation *o;
- pa_tagstruct *t;
- uint32_t tag;
-
- pa_assert(c);
- pa_assert(PA_REFCNT_VALUE(c) >= 1);
-
- PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
- PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
-
- o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
-
- t = pa_tagstruct_command(c, PA_COMMAND_SET_PCM_DUMP_OPTION, &tag);
- pa_tagstruct_putu32(t, dump_option);
- pa_tagstruct_put_boolean(t, dump_option_enable);
- pa_pstream_send_tagstruct(c->pstream, t);
- pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
-
- return o;
-}
#endif
#ifdef __TIZEN__
pa_operation* pa_context_set_pcm_dump(pa_context *c, uint32_t dump_type, int dump_type_enable, pa_context_success_cb_t cb, void *userdata);
-pa_operation* pa_context_set_pcm_dump_option(pa_context *c, uint32_t dump_option, int dump_option_enable, pa_context_success_cb_t cb, void *userdata);
#endif
/** @} */
c->state = PA_CORE_RUNNING;
#ifdef TIZEN_PCM_DUMP
c->pcm_dump = 0;
- c->pcm_dump_option = 0;
#endif
#ifdef TIZEN_EMPTY_POP
c->empty_pop_threshold = 10;
#ifdef __TIZEN__
#define PA_PCM_DUMP_PATH_PREFIX "/tmp/pcm"
-#define PA_PCM_DUMP_VCONF_KEY "memory/private/sound/pcm_dump"
enum {
- PA_PCM_DUMP_GST_DECODER_OUT = 0x00000001U,
- PA_PCM_DUMP_GST_RESAMPLER_IN = 0x00000008U,
- PA_PCM_DUMP_GST_RESAMPLER_OUT = 0x00000010U,
- PA_PCM_DUMP_GST_AUDIO_SINK_IN = 0x00000400U,
- PA_PCM_DUMP_PA_STREAM_WRITE = 0x00000800U,
- PA_PCM_DUMP_PA_SINK_INPUT = 0x00002000U,
- PA_PCM_DUMP_PA_SINK = 0x00004000U,
- PA_PCM_DUMP_PA_SOURCE = 0x00020000U,
- PA_PCM_DUMP_PA_SOURCE_OUTPUT = 0x00040000U,
- PA_PCM_DUMP_PA_STREAM_READ = 0x00100000U,
- PA_PCM_DUMP_GST_AUDIO_SRC_OUT = 0x00200000U,
- PA_PCM_DUMP_GST_ENCODER_IN = 0x80000000U,
-};
-
-enum {
- PA_PCM_DUMP_OPTION_SEPARATED = 0x0001U,
- PA_PCM_DUMP_OPTION_MONITOR = 0x0002U,
+ PA_PCM_DUMP_SINK_INPUT = 0x00002000U,
+ PA_PCM_DUMP_SINK = 0x00004000U,
+ PA_PCM_DUMP_SOURCE = 0x00020000U,
+ PA_PCM_DUMP_SOURCE_OUTPUT = 0x00040000U,
+ PA_PCM_DUMP_SEPARATED = 0x10000000U,
+ PA_PCM_DUMP_MONITOR = 0x20000000U,
};
#endif
pa_hook hooks[PA_CORE_HOOK_MAX];
#ifdef __TIZEN__
uint32_t pcm_dump;
- uint32_t pcm_dump_option;
unsigned empty_pop_threshold;
#endif
};
pa_pstream_send_simple_ack(c->pstream, tag);
}
-
-static void command_set_pcm_dump_option(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
- pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
- uint32_t dump_option;
- bool dump_option_enable;
-
- pa_native_connection_assert_ref(c);
- pa_assert(t);
-
- if (pa_tagstruct_getu32(t, &dump_option) < 0 ||
- pa_tagstruct_get_boolean(t, &dump_option_enable) < 0 ||
- !pa_tagstruct_eof(t)) {
- protocol_error(c);
- return;
- }
-
- CHECK_VALIDITY(c->pstream, c->authorized, tag, PA_ERR_ACCESS);
-
- if (dump_option_enable)
- c->protocol->core->pcm_dump_option |= dump_option;
- else
- c->protocol->core->pcm_dump_option &= ~dump_option;
-
- pa_pstream_send_simple_ack(c->pstream, tag);
-}
#endif
static const pa_pdispatch_cb_t command_table[PA_COMMAND_MAX] = {
[PA_COMMAND_ERROR] = NULL,
[PA_COMMAND_EXTENSION] = command_extension,
#ifdef TIZEN_PCM_DUMP
[PA_COMMAND_SET_PCM_DUMP] = command_set_pcm_dump,
- [PA_COMMAND_SET_PCM_DUMP_OPTION] = command_set_pcm_dump_option,
#endif
#ifdef TIZEN_SECURITY
[PA_COMMAND_CHECK_PRIVILEGE] = command_check_privilege,
char datetime[7];
/* open file for dump pcm */
- if (i->core->pcm_dump & PA_PCM_DUMP_PA_SINK_INPUT && !i->pcm_dump_fp && i->state == PA_SINK_INPUT_RUNNING) {
+ if (i->core->pcm_dump & PA_PCM_DUMP_SINK_INPUT && !i->pcm_dump_fp && i->state == PA_SINK_INPUT_RUNNING) {
pa_gettimeofday(&now);
localtime_r(&now.tv_sec, &tm);
memset(&datetime[0], 0x00, sizeof(datetime));
pa_xfree(dump_time);
pa_xfree(dump_path_surfix);
/* close file for dump pcm when config is changed */
- } else if (~i->core->pcm_dump & PA_PCM_DUMP_PA_SINK_INPUT && i->pcm_dump_fp) {
+ } else if (~i->core->pcm_dump & PA_PCM_DUMP_SINK_INPUT && i->pcm_dump_fp) {
fclose(i->pcm_dump_fp);
pa_log_info("%s closed", i->dump_path);
pa_xfree(i->dump_path);
pa_sink_input_set_state_within_thread(ssync, state);
}
#ifdef TIZEN_PCM_DUMP
- if (i->state == PA_SINK_INPUT_RUNNING && i->pcm_dump_fp && (i->core->pcm_dump_option & PA_PCM_DUMP_OPTION_SEPARATED)) {
+ if (i->state == PA_SINK_INPUT_RUNNING && i->pcm_dump_fp && (i->core->pcm_dump & PA_PCM_DUMP_SEPARATED)) {
/* close file for dump pcm */
fclose(i->pcm_dump_fp);
pa_log_info("%s closed", i->dump_path);
char datetime[7];
/* open file for dump pcm */
- if (s->core->pcm_dump & PA_PCM_DUMP_PA_SINK && !s->pcm_dump_fp && s->state == PA_SINK_RUNNING) {
+ if (s->core->pcm_dump & PA_PCM_DUMP_SINK && !s->pcm_dump_fp && s->state == PA_SINK_RUNNING) {
pa_gettimeofday(&now);
localtime_r(&now.tv_sec, &tm);
memset(&datetime[0], 0x00, sizeof(datetime));
pa_xfree(dump_time);
pa_xfree(dump_path_surfix);
/* close file for dump pcm when config is changed */
- } else if (~s->core->pcm_dump & PA_PCM_DUMP_PA_SINK && s->pcm_dump_fp) {
+ } else if (~s->core->pcm_dump & PA_PCM_DUMP_SINK && s->pcm_dump_fp) {
fclose(s->pcm_dump_fp);
pa_log_info("%s closed", s->dump_path);
pa_xfree(s->dump_path);
#ifdef TIZEN_PCM_DUMP
/* close file for dump pcm */
- if (s->pcm_dump_fp && (s->core->pcm_dump_option & PA_PCM_DUMP_OPTION_SEPARATED) && suspending) {
+ if (s->pcm_dump_fp && (s->core->pcm_dump & PA_PCM_DUMP_SEPARATED) && suspending) {
fclose(s->pcm_dump_fp);
pa_log_info("%s closed", s->dump_path);
pa_xfree(s->dump_path);
char datetime[7];
/* open file for dump pcm */
- if (o->core->pcm_dump & PA_PCM_DUMP_PA_SOURCE_OUTPUT && !o->pcm_dump_fp && o->state == PA_SOURCE_OUTPUT_RUNNING) {
+ if (o->core->pcm_dump & PA_PCM_DUMP_SOURCE_OUTPUT && !o->pcm_dump_fp && o->state == PA_SOURCE_OUTPUT_RUNNING) {
pa_gettimeofday(&now);
localtime_r(&now.tv_sec, &tm);
memset(&datetime[0], 0x00, sizeof(datetime));
pa_xfree(dump_time);
pa_xfree(dump_path_surfix);
/* close file for dump pcm when config is changed */
- } else if (~o->core->pcm_dump & PA_PCM_DUMP_PA_SOURCE_OUTPUT && o->pcm_dump_fp) {
+ } else if (~o->core->pcm_dump & PA_PCM_DUMP_SOURCE_OUTPUT && o->pcm_dump_fp) {
fclose(o->pcm_dump_fp);
pa_log_info("%s closed", o->dump_path);
pa_xfree(o->dump_path);
pa_source_output_set_state_within_thread(o, state);
#ifdef TIZEN_PCM_DUMP
- if (o->state == PA_SOURCE_OUTPUT_RUNNING && o->pcm_dump_fp && (o->core->pcm_dump_option & PA_PCM_DUMP_OPTION_SEPARATED)) {
+ if (o->state == PA_SOURCE_OUTPUT_RUNNING && o->pcm_dump_fp && (o->core->pcm_dump & PA_PCM_DUMP_SEPARATED)) {
/* close file for dump pcm */
fclose(o->pcm_dump_fp);
pa_log_info("%s closed", o->dump_path);
char datetime[7];
/* open file for dump pcm */
- if (s->core->pcm_dump & PA_PCM_DUMP_PA_SOURCE && !s->pcm_dump_fp && s->state == PA_SOURCE_RUNNING &&
- !(~s->core->pcm_dump_option & PA_PCM_DUMP_OPTION_MONITOR && s->monitor_of)) {
+ if (s->core->pcm_dump & PA_PCM_DUMP_SOURCE && !s->pcm_dump_fp && s->state == PA_SOURCE_RUNNING &&
+ !(~s->core->pcm_dump & PA_PCM_DUMP_MONITOR && s->monitor_of)) {
pa_gettimeofday(&now);
localtime_r(&now.tv_sec, &tm);
memset(&datetime[0], 0x00, sizeof(datetime));
pa_xfree(dump_time);
pa_xfree(dump_path_surfix);
/* close file for dump pcm when config is changed */
- } else if (~s->core->pcm_dump & PA_PCM_DUMP_PA_SOURCE && s->pcm_dump_fp) {
+ } else if (~s->core->pcm_dump & PA_PCM_DUMP_SOURCE && s->pcm_dump_fp) {
fclose(s->pcm_dump_fp);
pa_log_info("%s closed", s->dump_path);
pa_xfree(s->dump_path);
#ifdef TIZEN_PCM_DUMP
/* close file for dump pcm */
- if (s->pcm_dump_fp && (s->core->pcm_dump_option & PA_PCM_DUMP_OPTION_SEPARATED) && suspending) {
+ if (s->pcm_dump_fp && (s->core->pcm_dump & PA_PCM_DUMP_SEPARATED) && suspending) {
fclose(s->pcm_dump_fp);
pa_log_info("%s closed", s->dump_path);
pa_xfree(s->dump_path);
#include <sndfile.h>
+#ifdef TIZEN_PCM_DUMP
+#include <pulsecore/core.h>
+#endif
+
#include <pulse/pulseaudio.h>
#include <pulse/ext-device-restore.h>
static bool nl = false;
+#ifdef TIZEN_PCM_DUMP
+static uint32_t pcm_dump_type = 0;
+static int pcm_dump_type_enable;
+#endif
+
static enum {
NONE,
EXIT,
SET_SINK_FORMATS,
SET_PORT_LATENCY_OFFSET,
SUBSCRIBE
+#ifdef TIZEN_PCM_DUMP
+ ,SET_PCM_DUMP
+#endif
} action = NONE;
static void quit(int ret) {
NULL);
break;
+#ifdef TIZEN_PCM_DUMP
+ case SET_PCM_DUMP:
+ o = pa_context_set_pcm_dump(c, pcm_dump_type, pcm_dump_type_enable, simple_callback, NULL);
+ break;
+#endif
default:
pa_assert_not_reached();
}
printf("%s %s %s %s\n", argv0, _("[options]"), "set-sink-formats", _("#N FORMATS"));
printf("%s %s %s %s\n", argv0, _("[options]"), "set-port-latency-offset", _("CARD-NAME|CARD-#N PORT OFFSET"));
printf("%s %s %s\n", argv0, _("[options]"), "subscribe");
+#ifdef TIZEN_PCM_DUMP
+ printf("%s %s %s %s\n", argv0, _("[options]"), "set-pcm-dump", _("[TYPE] 1|0"));
+#endif
printf(_("\nThe special names @DEFAULT_SINK@, @DEFAULT_SOURCE@ and @DEFAULT_MONITOR@\n"
"can be used to specify the default sink, source and monitor.\n"));
ret = 0;
goto quit;
}
+#ifdef TIZEN_PCM_DUMP
+ else if (pa_streq(argv[optind], "set-pcm-dump")) {
+ int i, b;
+
+ action = SET_PCM_DUMP;
+
+ if (argc == optind+2) {
+ pcm_dump_type |= PA_PCM_DUMP_SINK_INPUT | PA_PCM_DUMP_SINK;
+ pcm_dump_type |= PA_PCM_DUMP_SOURCE | PA_PCM_DUMP_SOURCE_OUTPUT;
+ } else {
+ for (i = optind+1; i < argc-1; i++) {
+ if (pa_streq(argv[i], "playback")) {
+ pcm_dump_type |= PA_PCM_DUMP_SINK_INPUT | PA_PCM_DUMP_SINK;
+ } else if (pa_streq(argv[i], "sink-input")) {
+ pcm_dump_type |= PA_PCM_DUMP_SINK_INPUT;
+ } else if (pa_streq(argv[i], "sink")) {
+ pcm_dump_type |= PA_PCM_DUMP_SINK;
+ } else if (pa_streq(argv[i], "capture")) {
+ pcm_dump_type |= PA_PCM_DUMP_SOURCE | PA_PCM_DUMP_SOURCE_OUTPUT;
+ } else if (pa_streq(argv[i], "source")) {
+ pcm_dump_type |= PA_PCM_DUMP_SOURCE;
+ } else if (pa_streq(argv[i], "source-output")) {
+ pcm_dump_type |= PA_PCM_DUMP_SOURCE_OUTPUT;
+ } else if (pa_streq(argv[i], "separate")) {
+ pcm_dump_type |= PA_PCM_DUMP_SEPARATED;
+ } else {
+ pa_log(_("Specify nothing, or one of: %s"), "playback, "
+ "sink-input, sink, capture, source, source-output, separate");
+ }
+ }
+ }
+
+ if ((b = pa_parse_boolean(argv[argc-1])) < 0) {
+ pa_log(_("Invalid dump specification."));
+ goto quit;
+ }
+
+ pcm_dump_type_enable = !!b;
+
+ if (!pcm_dump_type)
+ goto quit;
+ }
+#endif
}
if (action == NONE) {