Commit graph

109 commits

Author SHA1 Message Date
Ilya Konstantinov
f676079e95 osxaudio: fix latency property query on RemoteIO
AudioUnitGetProperty would fail with kParamErr (-50) every time,
simply because size wasn't initialized.

Now it returns zero latency, but at least it doesn't fail.

https://bugzilla.gnome.org/show_bug.cgi?id=750868
2015-06-12 22:43:59 +02:00
Ilya Konstantinov
36decd3b39 osxaudio: fix spelling in debug message
https://bugzilla.gnome.org//show_bug.cgi?id=747936
2015-04-17 00:36:04 +01:00
Ilya Konstantinov
6af516b21f osxaudio: Fix string format warning on 32-bit
UInt32 (Darwin, not C99's uint32_t) is 'unsigned long' on 32-bit
platforms.
2015-03-23 19:48:43 +05:30
Tim-Philipp Müller
c4fa54da17 Fix double semicolons 2015-03-10 09:31:20 +00:00
Ilya Konstantinov
b528c527b7 osxaudio: stream format is an SPDIF-only field 2015-03-10 09:14:57 +05:30
Ilya Konstantinov
7b365042f0 osxaudio: fix spaces 2015-03-10 09:14:57 +05:30
Ilya Konstantinov
8f62f50a98 osxaudio: add type check macro 2015-03-10 09:14:57 +05:30
Ilya Konstantinov
d450b1cac1 osxaudio: rename gst_core_audio_set_channels_layout()
to gst_core_audio_get_channel_layout().
2015-03-10 09:14:57 +05:30
Ilya Konstantinov
4637b3eb82 osxaudio: remove unused finalize 2015-03-10 09:14:57 +05:30
Arun Raghavan
995ba701b7 osxaudiosrc: Allow caps renegotiation
The ringbuffer does allow renegotiation, so we do not have to report
fixed caps once it is acquired (based on a similar patch for the sink
side by Ilya Konstantinov <ilya.konstantinov@gmail.com>).
2015-03-03 23:26:58 +05:30
Ilya Konstantinov
fd25ef137e osxaudiosink: Allow renegotiating caps
Once osxaudiosink's device is open, it fixates on the initial caps and
refuses to accept new caps. This is erroneous since the Audio Unit is
can accept a new ASBD, and GstAudioRingBuffer supports reconfiguration
as well.

https://bugzilla.gnome.org/show_bug.cgi?id=743925
2015-03-03 23:26:58 +05:30
Ilya Konstantinov
8ca40fa86f osxaudiosrc: iOS resampling causes stuttering
Fixes stuttering audio when iOS AU is resampling. To make AU resample,
one has to request a rate that differs from AVAudioSession's
sampleRate. The resampling itself is not the culprit, but rather our
API misuse.

AudioUnitRender modifies the mDataByteSize members with the
actual read bytes count. Therefore, they must be reinitialized
before each AudioUnitRender. (The buffers themselves can be
preallocated.)

The "stutter" was caused by one AudioUnitRender making the buffer
too small for other AudioUnitRender invocations, making them fail
with -50 (paramErr). By way of luck, when AU didn't resample, all
AudioUnitRender invocations read the same number of bytes.

(This patch addresses some non-interleaved audio concerns, but
at this moment the elements do not support non-interleaved audio
and non-interleaved is untested.)

https://bugzilla.gnome.org/show_bug.cgi?id=744922
2015-02-24 16:21:11 +05:30
Sebastian Dröge
11d6be2dcb osxaudio: Directly return the ringbuffer's caps if it is acquired 2014-12-22 15:33:51 +01:00
Sebastian Dröge
fc1670b75d osxaudio: Put all audio formats into the template caps
We report the proper caps later from the get_caps() vfunc implementation after
probing the selected device.
2014-12-22 12:56:19 +01:00
Sebastian Dröge
b83cd14a12 osxaudio: Also set the big endian flag for floating point samples 2014-12-22 12:56:05 +01:00
Sebastian Dröge
e7b10a107d osxaudio: Fix deadlock and property change notification in device selection code
After creating the ringbuffer we have to set the device on the ringbuffer as
it defaults to kAudioDeviceUnknown. At this point it can't have changed to
anything else yet and we don't have to notify about changes to the sink/src
"device" property. It's also not a good idea because GstAudioBaseSrc has the
object lock taken while the ringbuffer is created, which might cause a
deadlock if something calls back into the element from "notify::device".

Once the base class is done with the NULL_TO_READY state change, it has opened
the device via the ringbuffer and this might have chosen a different device.
Especially if we initially used kAudioDeviceUnknown. Also notify about this
property change as initially intended by this code.
2014-12-22 10:29:01 +01:00
Arun Raghavan
db91486aa8 osxaudiosink: Prefer filter caps order while getting caps
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:22:44 +05:30
Arun Raghavan
f573f028d2 osxaudiosink: Add some error handling around channel layout parsing
For now we just spit a warning and ignore the channel layout if we can't
support it.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
d18a6b0a2c osxaudio: Take lock around sink/source before accessing the ringbuffer
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
4a58ebf487 osxaudiosrc: Probe channel layout too
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
df610a7c18 osxaudiosink: Only fix up channels/layout for PCM caps while probing
It's unlikely that setting a channel layout will do much for AC3/DTS
streams. If we find at some point that it does make sense, we can
perform the structure copying unconditionally (i.e., the current code is
wrong, since AC3/DTS will get two structures now - one with the channel
layout, one without).

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
bd1502862c osxaudiosrc: Implement caps probing
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
48872dbc56 osxaudio: Bind audio device to audio unit early
We want to bind the device during open so that subsequent format queries
on the audio unit are as specific as possible from that point onwards.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:52 +05:30
Arun Raghavan
2d0391c6e1 osxaudiosink: Fix up caps querying a bit
This should make caps queries correct in PAUSED and higher as well.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
f967f0742f osxaudio: Move osxaudiosrc-specific code out of the generic path
Avoids one layering violation (GstCoreAudio referring to
GstOsxAudioSrc).

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
ffcb1577fa osxaudio: Clean up a GstCoreAudio -> GstOsxAudioSrc/Sink reference
Now that device selection has no sink/source-specific bits, we can have
generic device selection for this path. We do need to now track state
changes so we can look up the final device_id once the device is open,
though.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
5c2f041286 osxaudiosink: Move device caps probing to get_caps()
This should be preferred to running the probe at device open time.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
945aaa0a35 osxaudio: Make some debug code compile conditionally
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
b06ae28061 osxaudio: Move device selection to ringbuffer->open_device()
This is conceptually the right thing to do, and allows us to correctly
catch errors in device selection as well, which we could not do while
creating the ringbuffer.

https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Arun Raghavan
199461bb2e osxaudio: Consolidate input and output code paths a bit
https://bugzilla.gnome.org/show_bug.cgi?id=740987
2014-12-15 11:19:51 +05:30
Sebastian Dröge
d8a4435fd8 osxaudio: OSStatus is not a fourcc, so don't print it as one... 2014-09-17 13:55:18 +03:00
Tim-Philipp Müller
c9597298f9 docs: remove outdated and pointless 'Last reviewed' lines from docs
They are very confusing for people, and more often than not
also just not very accurate. Seeing 'last reviewed: 2005' in
your docs is not very confidence-inspiring. Let's just remove
those comments.
2014-04-26 23:35:17 +01:00
Thijs Vermeir
0de0a1f1db osxaudio: remove unused variables 2014-02-19 22:21:54 +01:00
Sebastian Dröge
5b1c0a4cfd osx: Make OSX version checks more consistent
And especially also consider update versions, e.g. 10.5 with updates
will be 1051 or similar and thus bigger than MAC_OS_X_VERSION_10_5 but
still won't have the API we want to use.
2013-12-31 10:11:24 +01:00
Andoni Morales Alastruey
619f4f5c5a osxaudiosink: fix segfault when we can't get the channels layout 2013-11-07 00:53:48 +01:00
Alessandro Decina
0df7af07ce osxaudiosink: intersect the probed caps with the filter passed to get_caps() 2013-07-25 08:24:45 +02:00
Todd Agulnick
a30634a248 osxaudio: Use gst_audio_channel_positions_to_mask() to create mask
https://bugzilla.gnome.org/show_bug.cgi?id=698807
2013-04-25 09:57:26 +02:00
Todd Agulnick
e7710c2655 osxaudio: Remove unused code 2013-04-25 09:56:57 +02:00
Sebastian Dröge
3230182a61 osxaudio: Include gstaudioringbuffer.h to fix compilation in 1.0 2013-04-18 09:37:30 +02:00
Philippe Normand
d352201a34 osxaudiosink: channel-mask configuration fixes
Set channel-mask according to sink's layout in case of stereo layout.
Also initialize and reset the mask when an unrecognized channel is detected.

https://bugzilla.gnome.org/show_bug.cgi?id=698224
2013-04-18 09:16:19 +02:00
Sebastian Dröge
27248393e4 osxaudio: Fix merge conflicts 2013-04-17 20:24:48 +02:00
Sebastian Dröge
2b1f967101 osxaudioringbuffer: First check the type, then cast 2013-04-17 09:52:14 +02:00
Takashi Nakajima
ce5246ed71 osxaudio: use GST_IS_OSX_AUDIO_SINK in ring buffer. 2013-04-17 09:52:14 +02:00
Takashi Nakajima
efda79b084 osxaudio: call set_channel_positions() in osxaudioringbuffer acquire() 2013-04-17 09:52:14 +02:00
Todd Agulnick
c2c85a094a osxaudio: use GST_AUDIO_INFO_* accessors
Changes include the following:

 * Update classname references
 * Replace GST_BOILERPLATE_FULL with G_DEFINE_TYPE
 * Use new GstAudioInfo struct and methods
 * Use new buffer memory allocation scheme

Conflicts:
	sys/osxaudio/gstosxaudioringbuffer.c
2013-04-17 09:52:13 +02:00
Todd Agulnick
ed94ef79f9 osxaudio: adjust for changes to glib mutex api. 2013-04-17 09:52:13 +02:00
Takashi Nakajima
09e980d2c9 osxaudio: try to fix up according to Sebastian's comments 2013-04-17 09:52:13 +02:00
Philippe Normand
ab64837bf2 osxaudio: build fixes
Enable the osxaudio plugin build in configure.ac and fix some
include directive order issues.
2013-04-17 09:52:13 +02:00
ted-n
d5d53ec611 osxaudio: fix layout for osxaudiosrc 2013-04-17 09:52:13 +02:00
ted-n
b217b6fdfb osxaudio: port to v.1.0 2013-04-17 09:52:13 +02:00