return ff_pulse_audio_get_devices(device_list, s->server, 1);
}
- case AV_APP_TO_DEV_GET_MUTE:
+ static int pulse_control_message(AVFormatContext *h, int type,
+ void *data, size_t data_size)
+ {
+ PulseData *s = h->priv_data;
+ int ret;
+
+ switch(type) {
+ case AV_APP_TO_DEV_PAUSE:
+ return pulse_set_pause(s, 1);
+ case AV_APP_TO_DEV_PLAY:
+ return pulse_set_pause(s, 0);
+ case AV_APP_TO_DEV_TOGGLE_PAUSE:
+ return pulse_set_pause(s, !pa_stream_is_corked(s->stream));
+ case AV_APP_TO_DEV_MUTE:
+ if (!s->mute) {
+ s->mute = 1;
+ return pulse_set_mute(s);
+ }
+ return 0;
+ case AV_APP_TO_DEV_UNMUTE:
+ if (s->mute) {
+ s->mute = 0;
+ return pulse_set_mute(s);
+ }
+ return 0;
+ case AV_APP_TO_DEV_TOGGLE_MUTE:
+ s->mute = !s->mute;
+ return pulse_set_mute(s);
+ case AV_APP_TO_DEV_SET_VOLUME:
+ return pulse_set_volume(s, *(double *)data);
+ case AV_APP_TO_DEV_GET_VOLUME:
+ s->last_volume = PA_VOLUME_INVALID;
+ pa_threaded_mainloop_lock(s->mainloop);
+ ret = pulse_update_sink_input_info(h);
+ pa_threaded_mainloop_unlock(s->mainloop);
+ return ret;
++ case AV_APP_TO_DEV_GET_MUTE:
+ s->mute = -1;
+ pa_threaded_mainloop_lock(s->mainloop);
+ ret = pulse_update_sink_input_info(h);
+ pa_threaded_mainloop_unlock(s->mainloop);
+ return ret;
+ default:
+ break;
+ }
+ return AVERROR(ENOSYS);
+ }
+
#define OFFSET(a) offsetof(PulseData, a)
#define E AV_OPT_FLAG_ENCODING_PARAM
-
static const AVOption options[] = {
- { "server", "set PulseAudio server", OFFSET(server), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
- { "name", "set application name", OFFSET(name), AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT}, 0, 0, E },
- { "stream_name", "set stream description", OFFSET(stream_name), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
- { "device", "set device name", OFFSET(device), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
- { "buffer_size", "set buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
- { "buffer_duration", "set buffer duration in millisecs", OFFSET(buffer_duration), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
+ { "server", "set PulseAudio server", OFFSET(server), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
+ { "name", "set application name", OFFSET(name), AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT}, 0, 0, E },
+ { "stream_name", "set stream description", OFFSET(stream_name), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
+ { "device", "set device name", OFFSET(device), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
+ { "buffer_size", "set buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
+ { "buffer_duration", "set buffer duration in millisecs", OFFSET(buffer_duration), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ NULL }
};