Opened 14 years ago
Closed 9 years ago
#43 closed enhancement (fixed)
JACK input device doesn't link on OS X
Reported by: | Hanspeter Niederstrasser | Owned by: | |
---|---|---|---|
Priority: | wish | Component: | avformat |
Version: | git-master | Keywords: | jack osx roundup |
Cc: | Michael Niedermayer | Blocked By: | |
Blocking: | Reproduced by developer: | yes | |
Analyzed by developer: | no |
Description
This is copied from the old roundup #976
https://roundup.libav.org/issue976
On OS X, using --enable-indev=jack, the build fails with
CC libavdevice/jack_audio.o /src/ffmpeg/libavdevice/jack_audio.c: In function 'audio_read_packet': /src/ffmpeg/libavdevice/jack_audio.c:277: warning: implicit declaration of function 'sem_timedwait' AR libavdevice/libavdevice.a LD libavdevice/libavdevice.52.dylib Undefined symbols: "_sem_timedwait", referenced from: _audio_read_packet in jack_audio.o ld: symbol(s) not found collect2: ld returned 1 exit status make: *** [libavdevice/libavdevice.52.dylib] Error 1
sem_* is semaphore_* on OS X.
Attachments (2)
Change History (14)
by , 14 years ago
Attachment: | ffmpeg-jack-osx.patch added |
---|
comment:2 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed by disabling jack when sem_timedwait() is unavailable.
About the patch, i think thread synchronization functions should be used that are available on a wider range of platforms, not tons of #ifdefs to make it work on osx & linux and then still fail on openbsd which the patch would sadly.
comment:3 by , 14 years ago
Component: | undetermined → avformat |
---|---|
Priority: | normal → wish |
Resolution: | fixed |
Status: | closed → reopened |
Type: | defect → enhancement |
Version: | git → git-master |
Rethinking this should be a enhancement request of course, as our jack code should use wider available therad sync functions.
comment:4 by , 13 years ago
Keywords: | jack osx added |
---|
comment:5 by , 12 years ago
Keywords: | roundup added |
---|
comment:6 by , 11 years ago
Reproduced by developer: | set |
---|---|
Status: | reopened → open |
The patch can still be used but the resulting executable does not work here:
$ ffmpeg -f jack -i ffmpeg -y out.wav ffmpeg version N-58952-gf8d8d2e Copyright (c) 2000-2013 the FFmpeg developers built on Dec 10 2013 15:22:26 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) configuration: libavutil 52. 58.100 / 52. 58.100 libavcodec 55. 45.100 / 55. 45.100 libavformat 55. 22.100 / 55. 22.100 libavdevice 55. 5.102 / 55. 5.102 libavfilter 3. 92.100 / 3. 92.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 [jack @ 0x7fa5db820200] JACK client registered and activated (rate=44100Hz, buffer_size=512 frames) [jack @ 0x7fa5db820200] Input error: timed out when waiting for JACK process callback output Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, jack, from 'ffmpeg': Duration: N/A, bitrate: 2822 kb/s Stream #0:0: Audio: pcm_f32le, 44100 Hz, stereo, flt, 2822 kb/s Output #0, wav, to 'out.wav': Metadata: ISFT : Lavf55.22.100 Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s Stream mapping: Stream #0:0 -> #0:0 (pcm_f32le -> pcm_s16le) Press [q] to stop, [?] for help [jack @ 0x7fa5db820200] Input error: timed out when waiting for JACK process callback output ffmpeg: Input/output error size= 0kB time=00:00:00.00 bitrate=N/A video:0kB audio:0kB subtitle:0 global headers:0kB muxing overhead inf% Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
comment:8 by , 9 years ago
Cc: | added |
---|
comment:9 by , 9 years ago
I don't know. I haven't touched any of this in 4 years, and jack on OS X has changed dramatically since then (major version bump) and I know nothing about it. Removing the sem_timedwait() check in configure still causes the Ffmpeg build failure on 10.9+ffmpeg/HEAD, but I no longer have the setup to see if the not very good patch I posted even works on a current system.
comment:10 by , 9 years ago
Compiling FFmpeg with ./configure --enable-indev=jack
builds however it seems that it's not actually being built into FFmpeg.
$ ./ffmpeg_g -formats |grep 'jack' ffmpeg version N-77197-gdf2ce13 Copyright (c) 2000-2015 the FFmpeg developers built with Apple LLVM version 7.0.2 (clang-700.1.81) configuration: --enable-indev=jack libavutil 55. 10.100 / 55. 10.100 libavcodec 57. 17.100 / 57. 17.100 libavformat 57. 19.100 / 57. 19.100 libavdevice 57. 0.100 / 57. 0.100 libavfilter 6. 20.100 / 6. 20.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 $ ./ffmpeg_g -f jack -i ffmpeg -y out.wav ffmpeg version N-77197-gdf2ce13 Copyright (c) 2000-2015 the FFmpeg developers built with Apple LLVM version 7.0.2 (clang-700.1.81) configuration: --enable-indev=jack libavutil 55. 10.100 / 55. 10.100 libavcodec 57. 17.100 / 57. 17.100 libavformat 57. 19.100 / 57. 19.100 libavdevice 57. 0.100 / 57. 0.100 libavfilter 6. 20.100 / 6. 20.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 Unknown input format: 'jack'
by , 9 years ago
Attachment: | jack-indev-osx.patch added |
---|
updated patch to use libdispatch when available
comment:11 by , 9 years ago
$ ./ffmpeg_g -f jack -i ffmpeg -y out.wav ffmpeg version N-78597-g9dd4dcd Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 7.0.2 (clang-700.1.81) configuration: --enable-indev=jack libavutil 55. 18.100 / 55. 18.100 libavcodec 57. 24.103 / 57. 24.103 libavformat 57. 25.101 / 57. 25.101 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 34.100 / 6. 34.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 Cannot connect to server socket err = No such file or directory Cannot connect to server request channel jackdmp 1.9.11 Copyright 2001-2005 Paul Davis and others. Copyright 2004-2015 Grame. jackdmp comes with ABSOLUTELY NO WARRANTY This is free software, and you are welcome to redistribute it under certain conditions; see the file COPYING for details JACK server starting in realtime mode with priority 10 self-connect-mode is "Don't restrict self connect requests" Default input and output devices are not the same !! Cannot open default device in duplex mode, so aggregate default input and default output CreateAggregateDeviceAux : devices do not share the same clock!! clock drift compensation would be needed... Separated input = 'Built-in Microphone' Separated output = 'Built-in Output' 2016-02-18 21:05:02.852 jackd[86281:278269] 21:05:02.850 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API's in AudioComponent.h. Input channel = 0 ==> JACK input port = 0 Input channel = 1 ==> JACK input port = 1 JACK output port = 0 ==> output channel = 0 JACK output port = 1 ==> output channel = 1 DeviceNotificationCallback kAudioDeviceProcessorOverload CoreAudio driver is running... [jack @ 0x7faeb1008000] JACK client registered and activated (rate=44100Hz, buffer_size=256 frames) Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, jack, from 'ffmpeg': Duration: N/A, start: 1455829503.154074, bitrate: 2822 kb/s Stream #0:0: Audio: pcm_f32le, 44100 Hz, 2 channels, flt, 2822 kb/s Output #0, wav, to 'out.wav': Metadata: ISFT : Lavf57.25.101 Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s Metadata: encoder : Lavc57.24.103 pcm_s16le Stream mapping: Stream #0:0 -> #0:0 (pcm_f32le (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help size= 3762kB time=00:00:21.83 bitrate=1411.2kbits/s speed= 1x video:0kB audio:3762kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.002025% JackTemporaryException : now quits... Jack main caught signal 2 $ mpv out.wav Playing: out.wav (+) Audio --aid=1 (pcm_s16le) AO: [coreaudio] 44100Hz stereo 2ch s16 A: 00:00:15 / 00:00:21 (69%) Exiting... (Quit)
Is the output with the updated patch upon the latest git on OSX 10.11.3
comment:12 by , 9 years ago
Resolution: | → fixed |
---|---|
Status: | open → closed |
Fixed by Josh de Kock in 67f8a0be54554715a93a4e288da3247c9a5d4e1c
provides semaphore_* when HAVE_MACH_SEMAPHORE_H is set