eo_do(in, ecore_audio_obj_volume_set(0.7));
eo_do(in, ecore_audio_obj_vio_set(&vio, NULL, NULL));
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
ecore_main_loop_begin();
ecore_audio_obj_in_length_get(&length));
printf("Start: %s (%0.2fs)\n", name, length);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
}
else
{
ecore_audio_obj_in_length_get(&length));
printf("Start: %s (%0.2fs)\n", name, length);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
}
}
else if (!strncmp(cmd, "l", bread))
eo_do(in, ecore_audio_obj_name_get(&name));
printf("Start: %s\n", name);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
}
else
{
printf("Start: %s (%0.2fs)\n", name, length);
out = eo_add(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
/* Disable canonical mode for stdin */
out = eo_add(ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS, NULL);
eo_do(out, ecore_audio_obj_source_set("foo.ogg"));
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
ecore_main_loop_begin();
Ecore_Audio_Input *in;
Eo *input = va_arg(*list, Eo *);
+ Eina_Bool *ret = va_arg(*list, Eina_Bool *);
in = eo_data_get(input, ECORE_AUDIO_OBJ_IN_CLASS);
obj->inputs = eina_list_append(obj->inputs, input);
+ if (ret)
+ *ret = EINA_TRUE;
}
static void _input_detach(Eo *eo_obj, void *_pd, va_list *list)
#define ECORE_AUDIO_OBJ_OUT_ID(sub_id) (ECORE_AUDIO_OBJ_OUT_BASE_ID + EO_TYPECHECK(enum Ecore_Audio_Obj_Out_Sub_Ids, sub_id))
-#define ecore_audio_obj_out_input_attach(input) ECORE_AUDIO_OBJ_OUT_ID(ECORE_AUDIO_OBJ_OUT_SUB_ID_INPUT_ATTACH), EO_TYPECHECK(Eo *, input)
+#define ecore_audio_obj_out_input_attach(input, ret) ECORE_AUDIO_OBJ_OUT_ID(ECORE_AUDIO_OBJ_OUT_SUB_ID_INPUT_ATTACH), EO_TYPECHECK(Eo *, input), EO_TYPECHECK(Eina_Bool *, ret)
#define ecore_audio_obj_out_input_detach(input) ECORE_AUDIO_OBJ_OUT_ID(ECORE_AUDIO_OBJ_OUT_SUB_ID_INPUT_DETACH), EO_TYPECHECK(Eo *, input)
pa_operation_unref(pa_stream_update_sample_rate(stream, samplerate * speed, NULL, NULL));
}
-static void _input_attach_internal(Eo *eo_obj, Eo *in)
+static Eina_Bool _input_attach_internal(Eo *eo_obj, Eo *in)
{
const char *name;
pa_sample_spec ss;
double speed;
pa_stream *stream;
+ Eina_Bool ret;
Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS);
ss.format = PA_SAMPLE_FLOAT32LE;
stream = pa_stream_new(class_vars.context, name, &ss, NULL);
if (!stream) {
ERR("Could not create stream");
- return;
+ return EINA_FALSE;
}
- eo_do_super(eo_obj, MY_CLASS, ecore_audio_obj_out_input_attach(in));
+ eo_do_super(eo_obj, MY_CLASS, ecore_audio_obj_out_input_attach(in, &ret));
eo_do(in, eo_event_callback_add(ECORE_AUDIO_EV_IN_SAMPLERATE_CHANGED, _update_samplerate_cb, eo_obj));
pa_stream_set_write_callback(stream, _write_cb, in);
pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_VARIABLE_RATE, NULL, NULL);
+
+ return ret;
}
static Eina_Bool _delayed_attach_cb(void *data, Eo *eo_obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
static void _input_attach(Eo *eo_obj, void *_pd EINA_UNUSED, va_list *list)
{
+ Eina_Bool retval = EINA_TRUE;
+
Eo *in = va_arg(*list, Eo *);
+ Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (class_vars.state != PA_CONTEXT_READY) {
DBG("Delaying input_attach because PA context is not ready.");
eo_do(eo_obj, eo_event_callback_add(ECORE_AUDIO_EV_OUT_PULSE_CONTEXT_READY, _delayed_attach_cb, in));
} else {
- _input_attach_internal(eo_obj, in);
+ retval = _input_attach_internal(eo_obj, in);
}
+ if (ret)
+ *ret = retval;
}
static void _drain_cb(pa_stream *stream, int success EINA_UNUSED, void *data EINA_UNUSED)
Ecore_Audio_Output *out_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_OUT_CLASS);
Eo *in = va_arg(*list, Eo *);
+ Eina_Bool *ret = va_arg(*list, Eina_Bool *);
- eo_do_super(eo_obj, MY_CLASS, ecore_audio_obj_out_input_attach(in));
+ eo_do_super(eo_obj, MY_CLASS, ecore_audio_obj_out_input_attach(in, ret));
eo_do(in, ecore_audio_obj_in_samplerate_get(&obj->sfinfo.samplerate));
eo_do(in, ecore_audio_obj_in_channels_get(&obj->sfinfo.channels));
if (!out)
out = eo_add(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
}
}
return EINA_TRUE;
if (!out)
out = eo_add(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
}
}
return EINA_TRUE;
eo_do(out, ecore_audio_obj_format_set(ECORE_AUDIO_FORMAT_WAV));
eo_do(out, ecore_audio_obj_source_set(SOUNDS_DIR"/tmp.wav"));
- eo_do(out, ecore_audio_obj_out_input_attach(in));
+ eo_do(out, ecore_audio_obj_out_input_attach(in, NULL));
eo_do(in, eo_event_callback_add(ECORE_AUDIO_EV_IN_STOPPED, _finished_cb, NULL));
fail_if(eina_list_count(in3) != 0);
- fail_if(!eo_do(out, ecore_audio_obj_out_input_attach(in)));
+ fail_if(!eo_do(out, ecore_audio_obj_out_input_attach(in, NULL)));
fail_if(!eo_do(in, ecore_audio_obj_in_output_get(&out2)));
fail_if(eina_list_count(in3) != 1);
fail_if(eina_list_data_get(in3) != in);
- fail_if(!eo_do(out, ecore_audio_obj_out_input_attach(in2)));
+ fail_if(!eo_do(out, ecore_audio_obj_out_input_attach(in2, NULL)));
fail_if(!eo_do(out, ecore_audio_obj_out_inputs_get(&in3)));