diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mixer.c | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/src/mixer.c b/src/mixer.c index 8fe53cb..a60118d 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -176,6 +176,10 @@ void xas_mixer_destroy(xas_mixer *mixer) {      while (input) {          xas_mixer_input *next = input->next; +        if (input->flags & XAS_MIXER_INPUT_STREAM_MANAGED) { +            xas_audio_stream_destroy(input->stream); +        } +          free(input);          input = next; @@ -231,6 +235,7 @@ xas_mixer_input *xas_mixer_input_add(xas_mixer *mixer,      input->stream = stream;      input->gain   = gain; +    input->flags  = 0;      input->next   = NULL;      input_set_pan(input, pan); @@ -250,6 +255,32 @@ error_invalid_stream:      return NULL;  } +xas_mixer_input *xas_mixer_object_add(xas_mixer *mixer, +                                          xas_object *object, +                                          float gain, +                                          float pan) { +    xas_mixer_input *input; +    xas_audio_stream *stream; + +    if ((stream = xas_object_stream_new(object)) == NULL) { +        goto error_object_stream_new; +    } + +    if ((input = xas_mixer_input_add(mixer, stream, gain, pan)) == NULL) { +        goto error_input_add; +    } + +    input->flags |= XAS_MIXER_INPUT_STREAM_MANAGED; + +    return input; + +error_input_add: +    xas_audio_stream_destroy(stream); + +error_object_stream_new: +    return NULL; +} +  void xas_mixer_input_set_gain(xas_mixer_input *input, float gain) {      if (gain < 0.0 || gain > 1.0) {          return; | 
 
    