Merge remote-tracking branch 'lukaszmluki/master'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 18 Apr 2014 02:38:44 +0000 (04:38 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 18 Apr 2014 02:57:23 +0000 (04:57 +0200)
* lukaszmluki/master:
  lavd/pulse_audio_enc: implement pause messages
  lavd/pulse_audio_enc: implement volume messages
  lavd/avdevice: add volume messages
  lavd/pulse_audio_enc: add buffer fullness messages
  lavd/pulse_audio_enc: add nonblocking mode
  lavd/pulse_audio_enc: replace simple API with async API
  lavd/pulse_audio_enc: cosmetics
  lavd/pulse_audio_common: add context helper functions
  lavd/pulse_audio_common: rename variables and enums

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavdevice/pulse_audio_enc.c

@@@ -173,16 -688,63 +688,63 @@@ static int pulse_get_device_list(AVForm
      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 }
  };