Commit graph

61 commits

Author SHA1 Message Date
Nirbheek Chauhan 4af7637012 meson: Add build files for androidmedia and opensles
Note that androidmedia requires Android gstgl
2018-08-29 14:58:19 +05:30
Nicolas Dufresne 4261692187 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Thibault Saunier 78022a6e0c docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Fredrik Fornwall c611c6c6c0 opensles: Add opensles.h to noinst_HEADERS
https://bugzilla.gnome.org/show_bug.cgi?id=770326
2016-08-24 13:35:45 +03:00
Vineeth TM 8cdfb13658 bad: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763081
2016-03-24 14:56:51 +02:00
Sebastian Dröge 0acdcc1b37 openslesringbuffer: Warn if the position reported by OpenSL is higher than what we queued up so far
This would hint at wrong position reporting, and apparently sometimes happens
after a seek.
2016-03-16 12:03:53 +02:00
Vineeth TM 7c42ba97d7 plugins-bad: Fix example pipelines
rename gst-launch --> gst-launch-1.0
replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
fix caps in examples

https://bugzilla.gnome.org/show_bug.cgi?id=759432
2015-12-15 10:30:49 +00:00
Arun Raghavan c7eb883e22 opensles: Fix build with Android API level < 14
Headers were broken on older Android versions, apparently.

https://bugzilla.gnome.org/show_bug.cgi?id=744459
2015-06-13 16:03:58 +05:30
Arun Raghavan e3ed00e4eb openslessink: Allow setting the stream type via a property 2015-06-13 16:03:00 +05:30
Arun Raghavan 6b728f184f openslessrc: Implement recording presets
This allows us to signal what kind of audio we are expecting to record,
which should tell the system to apply filters (such as echo
cancellation, noise suppression, etc.) if required.
2015-06-13 16:03:00 +05:30
Arun Raghavan b40adec9c1 opensles: Explicitly specify layout=interleaved in caps
This is fine to hard-code. Section 9.1.8 of the OpenSL ES 1.1
specification, it is expected that multi-channel audio is always
interleaved.
2015-04-08 15:38:17 +05:30
Arun Raghavan df43022899 opensles: Make debug category naming a bit more consistent 2015-02-13 15:05:07 +05:30
Sebastian Dröge 4ccd425772 openslesringbuffer: Only allocate at most half the number of internal buffers as external audioringbuffer ones
Otherwise we might end up reading too much from the audioringbuffer, which
would result in reading silence.
2015-02-10 16:18:34 +01:00
Sebastian Dröge 83e5fe2f70 openslesringbuffer: Only pre-roll a single buffer
There is no reason to pre-roll more buffers here as we have our own ringbuffer
with more segments around it, and we can immediately provide more buffers to
OpenSL ES when it requests that from the callback.

Pre-rolling a single buffer before starting is necessary though, as otherwise
we will only output silence.

Lowers latency a bit, depending on latency-time and buffer-time settings.
2015-02-05 12:28:22 +01:00
Sebastian Dröge 141fb455e8 openslesringbuffer: Allocate at most 4 internal buffers
4 is the "typical" number of buffers defined by Android's OpenSL ES
implementation, and its code is optimized for this. Also because we
have our own ringbuffer around this, we will always have enough
buffering on our side already.

Allows for more efficient processing.
2015-02-05 12:28:13 +01:00
Sebastian Dröge 616cb1bdc6 openslessink/src: Lower default buffer time to 200ms like alsasink 2015-02-05 12:21:55 +01:00
Tim-Philipp Müller 7b8bd35d18 Fix up one-element lists in template caps 2014-09-10 17:24:39 +01:00
Sebastian Dröge 8d5217141a openslesringbuffer: Provide the size of our array to GetDestinationOutputDeviceIDs
Otherwise it does not and just fails. It needs to know the size of the
array to not write too much to it.
2014-07-17 00:18:41 +02:00
Sebastian Dröge fe42739a3e openslessink: Silence some error debug output to log output
These are not really errors, just unsupported features we don't
necessarily need.
2014-07-17 00:18:41 +02:00
Sebastian Dröge aa5f55cebe openslessrc: Classification of the element factory should be Source/ not Src/
https://bugzilla.gnome.org/show_bug.cgi?id=727811
2014-06-23 20:34:24 +02:00
Sebastian Dröge c842df1c3d opensles: Work around race condition in Android < 4.2 that leads to deadlocks on shutdown
We need to sleep a bit before destroying the player object
because of a bug in Android in versions < 4.2.

OpenSLES is using AudioTrack for rendering the sound. AudioTrack
has a thread that pulls raw audio from the buffer queue and then
passes it forward to AudioFlinger (AudioTrack::processAudioBuffer()).
This thread is calling various callbacks on events, e.g. when
an underrun happens or to request data. OpenSLES sets this callback
on AudioTrack (audioTrack_callBack_pullFromBuffQueue() from
android_AudioPlayer.cpp). Among other things this is taking a lock
on the player interface.

Now if we destroy the player interface object, it will first of all
take the player interface lock (IObject_Destroy()). Then it destroys
the audio player instance (android_audioPlayer_destroy()) which then
calls stop() on the AudioTrack and deletes it. Now the destructor of
AudioTrack will wait until the rendering thread (AudioTrack::processAudioBuffer())
has finished.

If all this happens with bad timing it can happen that the rendering
thread is currently e.g. handling underrun but did not lock the player
interface object yet. Then destroying happens and takes the lock and waits
for the thread to finish. Then the thread tries to take the lock and waits
forever.

We wait a bit before destroying the player object to make sure that
the rendering thread finished whatever it was doing, and then stops
(note: we called gst_opensles_ringbuffer_stop() before this already).
2014-05-16 09:10:48 +02:00
Sebastian Dröge 2b7446e2d2 opensles: Include string.h for memcpy() 2013-03-21 15:43:50 +01:00
Sebastian Dröge a63ed8cfc7 opensles: Only include <gst/audio/audio.h> 2013-03-03 12:30:44 +01:00
Tim-Philipp Müller 9e1b75fda3 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-04 00:09:59 +00:00
Sebastian Dröge 9e4f1e7346 opensles: Fix compilation with debugging enabled 2012-11-02 11:25:21 +01:00
Sebastian Dröge 1f6944efc1 opensles: Remove unused variable 2012-11-01 15:38:32 +01:00
Sebastian Dröge 40ca6ed977 opensles: Make sure to only ever create a single engine object
The OpenSL ES spec defines:

An implementation shall enable creation of at least one such object, but
attempting to create more instances (either by a single application or by
several different applications) may fail.
2012-11-01 15:38:23 +01:00
Sebastian Dröge e0026d7203 opensles: Port to 1.0 2012-10-25 14:05:49 +02:00
Sebastian Dröge 9c1543bd79 opensles: Integrate into build system 2012-10-18 14:03:10 +02:00
Josep Torra e4810c3420 openslessink: Return 0 delay if the player object is in PAUSED state 2012-10-18 14:03:10 +02:00
Josep Torra 7c3a9c2974 opensles: fixes noise on seekeing 2012-10-18 14:03:10 +02:00
Josep Torra adcf73e43f opensles: chain up on _clear_all 2012-10-18 14:03:10 +02:00
Josep Torra 69426572f8 opensles: implement the ringbuffer clear_all vmethod too 2012-10-18 14:03:09 +02:00
Josep Torra fc087f6419 opensles: initial attempt to reduce the src latency 2012-10-18 14:03:09 +02:00
Josep Torra 920354eb0d opensles: sprinkle comments and cosmetic fixes 2012-10-18 14:03:09 +02:00
Josep Torra 78e3b9f428 opensles: check for device outputs in the mixer 2012-10-18 14:03:09 +02:00
Josep Torra 1d9f48a33d opensles: drop 48kHz sample rate
OpenSL ES implementation in Android is just a 'facade' API on top of
AudioFlinger which will downsample 48kHz into 44.1kHz before
delivering the audio to the underlaying hardware.

We found that it suffer some sort of underrun when the downsample
enters in action so relay on our good resampler to take care of that
and fix the clicks issue. And get an extra bonus of a lower latency.
2012-10-18 14:03:09 +02:00
Josep Torra 9cc7e6a74d opensles: change the defaults to use 20 ms ringbuffer segments
In my nexus7 seems that the internal min buffer size is 20 ms so make
our segments match.
2012-10-18 14:03:09 +02:00
Josep Torra 97a1ccfab1 opensles: ensure that we register the callback only in STOPPED
Fixes the error registering the callback on the PLAYING -> PAUSE ->
PLAYING state change sequence.
2012-10-18 14:03:09 +02:00
Josep Torra e265cec514 opensles: cap queue size
Just in case we want to tweak the sink behaviour with buffer-time and
latency-time properties cap the queue size to something reasonable.
2012-10-18 14:03:09 +02:00
Josep Torra cc6fc15674 opensles: sink to provide the audioclock by default 2012-10-18 14:03:09 +02:00
Josep Torra 08ef2e3eed opensles: only drain half ringbuffer on start
At start drain half ringbuffer into the OpenSL so the writting/reading
pointers will start at half ringbuffer distance.
2012-10-18 14:03:09 +02:00
Josep Torra 3698d98921 opensles: monitor some player events 2012-10-18 14:03:09 +02:00
Josep Torra 3ff51bb88b opensles: rework around the _delay function 2012-10-18 14:03:09 +02:00
Josep Torra 27cdb7c2ca opensles: implement _delay function 2012-10-18 14:03:09 +02:00
Josep Torra 9fcfa00680 opensles: refactor to behave more like other sinks
Reflect the queue in our own data buffer.
Drop the _commit hook that wasn't usefull.
Don't mess with the segsize/segtotal.
2012-10-18 14:03:09 +02:00
Josep Torra ed5870b605 opensles: read player position and show it in the log 2012-10-18 14:03:09 +02:00
Josep Torra 1e69918f3e opensles: do not provide a clock in the sink element. 2012-10-18 14:03:08 +02:00
Josep Torra b00049a9f6 opensles: rework on start/stop operations and callback function handling 2012-10-18 14:03:08 +02:00
Josep Torra f00d5a5cac opensles: fixes 8 bit format which is unsigned on android. 2012-10-18 14:03:08 +02:00