cb68e26afa7b3c34853523efef00ed6e06e9b180
[AGL/meta-agl.git] / meta-ivi-common / recipes-multimedia / pulseaudio / pulseaudio / 0013-add-internal-corking-state-for-sink-input.patch
1 --- a/src/pulsecore/sink-input.c        2016-04-13 11:44:04.389999429 +0200
2 +++ b/src/pulsecore/sink-input.c        2016-04-13 11:52:45.167998560 +0200
3 @@ -786,6 +786,9 @@
4      update_n_corked(i, state);
5      i->state = state;
6  
7 +    i->corked = false;
8 +    i->corked_internal = false;
9 +
10      /* We might need to update the sink's volume if we are in flat volume mode. */
11      if (pa_sink_flat_volume_enabled(i->sink))
12          pa_sink_set_volume(i->sink, NULL, false, i->save_volume);
13 @@ -1493,13 +1496,38 @@
14      }
15  }
16  
17 +static void pa_sink_input_cork_really(pa_sink_input *i, bool b) {
18 +    pa_sink_input_assert_ref(i);
19 +    pa_assert_ctl_context();
20 +    pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
21 +
22 +    if (i->corked_internal == false && i->corked == false)
23 +        b = false;
24 +    else
25 +        b = true;
26 +
27 +    sink_input_set_state(i, b ? PA_SINK_INPUT_CORKED : PA_SINK_INPUT_RUNNING);
28 +}
29 +
30  /* Called from main context */
31  void pa_sink_input_cork(pa_sink_input *i, bool b) {
32      pa_sink_input_assert_ref(i);
33      pa_assert_ctl_context();
34      pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
35  
36 -    sink_input_set_state(i, b ? PA_SINK_INPUT_CORKED : PA_SINK_INPUT_RUNNING);
37 +    i->corked = b;
38 +
39 +    pa_sink_input_cork_really(i, b);
40 +}
41 +
42 +void pa_sink_input_cork_internal(pa_sink_input *i, bool b) {
43 +    pa_sink_input_assert_ref(i);
44 +    pa_assert_ctl_context();
45 +    pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
46 +
47 +    i->corked_internal = b;
48 +
49 +    pa_sink_input_cork_really(i, b);
50  }
51  
52  /* Called from main context */
53 --- a/src/pulsecore/sink-input.h        2016-04-13 11:44:28.035999390 +0200
54 +++ b/src/pulsecore/sink-input.h        2016-04-13 11:53:56.325998441 +0200
55 @@ -126,6 +126,9 @@
56      /* for volume ramps */
57      pa_cvolume_ramp_int ramp;
58  
59 +    bool corked;
60 +    bool corked_internal;
61 +
62      pa_resample_method_t requested_resample_method, actual_resample_method;
63  
64      /* Returns the chunk of audio data and drops it from the
65 @@ -357,6 +360,7 @@
66  void pa_sink_input_request_rewind(pa_sink_input *i, size_t nbytes, bool rewrite, bool flush, bool dont_rewind_render);
67  
68  void pa_sink_input_cork(pa_sink_input *i, bool b);
69 +void pa_sink_input_cork_internal(pa_sink_input *i, bool b);
70  
71  int pa_sink_input_set_rate(pa_sink_input *i, uint32_t rate);
72  int pa_sink_input_update_rate(pa_sink_input *i);