CoreAudio support was initially introduced by commit
62e29b39f4 as an experimental feature.
It played basic sounds, but suffered from drawbacks: it was controlling
the master channel, and therefore any sound played by ecore_audio would
shut down a previous sound (e.g. background music) for the time of the
sound being played. So that wasn't exactly great... Also, after some
time, some hangs have been reported when playing a sound on input. Most
of the time, it translated as a pause in the main loop (see T3797).
More recently (several months ago), ecore_audio with CoreAudio stopped
working during 1.19 development...
So... CoreAudio support on macOS has never been great. And now it's fully
broken. Instead of trying to revive the thing, let just use PulseAudio.
PulseAudio can be installed without any trouble on macOS thanks to
package managers such as Homebrew. Actually, the efl package provided by
Homebrew already provides PulseAudio as a dependency. And it actually
just works very fine. Dropping CoreAudio seems therefore a nice option:
removes unmaintained code, fixes bugs, and add features.
Efl.Object.event_callback_call no longer calls legacy smart callbacks;
calling only event callbacks registered with the given event description
pointer.
Create the method Efl.Object.event_callback_legacy_call to inherit the old
behavior from Efl.Object.event_callback_call, calling both Efl.Object events
and legacy smart callbacks.
Update all other files accordingly in order to still supply legacy
callbacks while they are necessary.
This removes some useless code in various places, where the
switch from eo_do() to standard function call was not properly
refactored.
This changes:
type ret = 0;
ret = my_eo_function();
return ret;
To:
return my_eo_function();
This was code for sndfile. sndfile module should have been
used instead of the pulseaudio one.
It led to a build break when having sndfile but not pulseaudio.
Ref: 879d93377b
so drop trying to appease the openbsd packages and stick to "upstream
so major versions" and let users fix their systems with symlinks. also
report what we are looking for so they have a chance to symlink to
make efl happy.
at some point we should make a single simple runtime lib linker
subsystem in efl so all these errors are reported in the same way,
input libray names are listed in a simple consistent way etc. etc.
for now we have 3 locations in efl that do this and they are roughly
similar. we can unify it later.
so libpuls and libsndfile suck in dependencies. they suck in so much
that by the time linking is done we've written to about 230kb of
PRIVATE MEMORY as dirty pages in symbol tablesm global veriables etc.
etc. - this is just horrible. especially if an app never makes any
sound... it's just wasted memory. this stuff is invisible to normal
memory debug tools. so this begins to address things. please see
T4227. my numbers now put me at:
1780Kb total dirty writable mapped from library file pages. down from
2012Kb.
This fixes some memory bloat reported in the above ticket, but there
is more to fix for sure.
@fix
Basically everyone should have it. If not, maybe we should consider
to test the value of _POSIX_C_SOURCE before testing platform specific
defines, or adding a feature check.
Fixes the following warning on DragonFlyBSD:
lib/ecore_audio/ecore_audio_obj_out_pulse.c:282:60: warning: implicit declaration of function 'basename' [-Wimplicit-function-declaration]
class_vars.context = pa_context_new(class_vars.api, basename(argv[0]));
^
lib/ecore_audio/ecore_audio_obj_out_pulse.c:282:60: warning: passing argument 2 of 'pa_context_new' makes pointer from integer without a cast [-Wint-conversion]
In file included from /usr/local/include/pulse/pulseaudio.h:29:0,
from lib/ecore_audio/ecore_audio_private.h:17,
from lib/ecore_audio/ecore_audio_obj_out_pulse.c:18:
/usr/local/include/pulse/context.h:172:13: note: expected 'const char *' but argument is of type 'int'
pa_context *pa_context_new(pa_mainloop_api *mainloop, const char *name);
^
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This lets me narrow down the remaining cases of pointers across the EFL.
The void pointers will later need to be reevaluated on per-case basis and
replaced appropriately where possible/feasible.
Complex types (i.e. list, array, hash, accessor etc.) now do not require
pointers with them anymore (the pointer is implied) and the same goes for
class handles. Eolian now explicitly disallows creating pointers to these
as well. This is the first part of the work to remove pointers from Eolian
completely, with the goal of simplifying the DSL (higher level) and therefore
making it easier for bindings (as well as easier API usage).
@feature
Previously events used to use class name as a prefix and ignored eo_prefix
when specified. This is no longer the case. Events follow eo_prefix by default
now. In order to get around this for classes where this is undesirable, a new
field event_prefix was added which takes priority over eo_prefix. If neither
is specified, class name is used like previously.
@feature
Eolian had a restriction due to the C++ generator that classes and
namespaces would be named differently. Now that the C++ generator is
fixed, eolian dropped the restriction and we can finally fix the wrong
namespaces in ecore audio.
This patch fixes a compiler warning where eo_del was being called on
an Ecore_Job.
ref c1141c7b0b
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
I just ran my script (email to follow) to migrate all of the EFL
automatically. This commit is *only* the automatic conversion, so it can
be easily reverted and re-run.
==27523== Invalid write of size 8
==27523== at 0x9E855F5: _ecore_time_wrapper (ecore_audio_pulse_ml.c:132)
==27523== by 0x647E5CF: _ecore_call_task_cb (ecore_private.h:336)
==27523== by 0x647FB8B: _ecore_timer_expired_call (ecore_timer.c:733)
==27523== by 0x647F9EE: _ecore_timer_expired_timers_call (ecore_timer.c:686)
==27523== by 0x647B4CE: _ecore_main_loop_iterate_internal (ecore_main.c:1814)
==27523== by 0x647998E: ecore_main_loop_begin (ecore_main.c:983)
==27523== by 0x4E4F676: elm_run (elm_main.c:1099)
==27523== by 0x12801B: elm_main (test.c:1010)
==27523== by 0x1280C4: main (test.c:1021)
==27523== Address 0x20537208 is 8 bytes inside a block of size 56 free'd
==27523== at 0x4A07D6A: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==27523== by 0x9E858ED: _ecore_pa_time_free (ecore_audio_pulse_ml.c:204)
==27523== by 0x108DB350: free_events (socket-client.c:109)
==27523== by 0x108DBA53: do_call (socket-client.c:157)
==27523== by 0x9E855F0: _ecore_time_wrapper (ecore_audio_pulse_ml.c:131)
==27523== by 0x647E5CF: _ecore_call_task_cb (ecore_private.h:336)
==27523== by 0x647FB8B: _ecore_timer_expired_call (ecore_timer.c:733)
==27523== by 0x647F9EE: _ecore_timer_expired_timers_call (ecore_timer.c:686)
==27523== by 0x647B4CE: _ecore_main_loop_iterate_internal (ecore_main.c:1814)
==27523== by 0x647998E: ecore_main_loop_begin (ecore_main.c:983)
==27523== by 0x4E4F676: elm_run (elm_main.c:1099)
==27523== by 0x12801B: elm_main (test.c:1010)
==27523== by 0x1280C4: main (test.c:1021)
@fix
This was not really useful and against the Eolian guidelines.
While I promised I won't break things until the 27th, I was ill
(still am), so I'm giving myself a 1 day pass. :P
From now on, constructors should return a value, usually the object
being worked on, or NULL (if the constructor failed). This can also
be used for implementing singletons, by just always returning the same
object from the constructor.
This is one of the final steps towards stabilizing Eo.
@feature
Instead of "@in type name;" we now use "@in name: type;". This change
is done because of consistency with the rest of Eolian; pretty much
every other part of Eolian syntax uses the latter form.
This is a big breaking change in the .eo format, so please update your
.eo files accordingly and compile Elementary together with the EFL.
@feature
Summary:
Ecore_Audio now supports Apple's CoreAudio to play sounds read by libsndfile.
edje_multisense integrates this new feature to enable PLAY_SAMPLE on OS X.
Test Plan:
Compiles, links and installs fine on OS X.
Run terminology and elementary_test to hear sound played on user input.
Reviewers: raster, naguirre, cedric
Reviewed By: cedric
Subscribers: plamot, cedric
Differential Revision: https://phab.enlightenment.org/D2295
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
Fixes warning:
lib/ecore_audio/ecore_audio_obj_out_pulse.c:275:60: warning: implicit declaration of function 'basename' is invalid in C99
[-Wimplicit-function-declaration]
class_vars.context = pa_context_new(class_vars.api, basename(argv[0]));
^
lib/ecore_audio/ecore_audio_obj_out_pulse.c:275:60: warning: incompatible integer to pointer conversion passing 'int' to parameter of
type 'const char *' [-Wint-conversion]
class_vars.context = pa_context_new(class_vars.api, basename(argv[0]));
^~~~~~~~~~~~~~~~~
/usr/local/include/pulse/context.h:174:67: note: passing argument to parameter 'name' here
pa_context *pa_context_new(pa_mainloop_api *mainloop, const char *name);
^
Test Plan: It now compiles without warning.
Projects: #efl
Differential Revision: https://phab.enlightenment.org/D2313
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary: Fix implicit function declaration of basename() which led to a violent crash when used.
Reviewers: cedric, naguirre, raoulh, raster
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D1162
Signed-off-by: Cedric BAIL <c.bail@partner.samsung.com>
legacy set to null was used for every function to not generate a legacy
API. legacy_prefix set to null indicates no legacy has to be generated
for all the class.
Being annoyed by different types of eina critical macros - CRI, CRIT,
CRITICAL -, I concluded to unify them to one. Discussed on IRC and
finally, CRI was chosen to meet the consistency with other macros -
ERR, WRN, INF, DBG - in terms of the number of characters.
If there is any missing bits, please let me know.
This reverts commit 1714fe93f4.
We actually want this type, it makes things clearer.
Conflicts:
src/tests/eo/function_overrides/function_overrides_inherit2.c
src/tests/eo/function_overrides/function_overrides_simple.c
src/tests/eo/suite/eo_test_class_simple.c
well well well. i WASN'T crazy. there WAS a leak. it was
ecore-audio+multisense. if a pulse audio output doesn't connect... NO
ONE KNOWS. all audio streams keep being appended to it forever just
consuming more memory indefinitely. there is no way to handle it.
expose events so it CAN be handled.
valid fd before calling read().
Reuse returned fd variable in the callback to save extra function call
to ecore_main_fd_handler_fd_get (since we already acquired the fd
above).
Signed-off-by: Chris Michael <cp.michael@samsung.com>