Opened 13 years ago

Closed 8 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)

ffmpeg-jack-osx.patch (3.5 KB ) - added by Hanspeter Niederstrasser 13 years ago.
provides semaphore_* when HAVE_MACH_SEMAPHORE_H is set
jack-indev-osx.patch (2.8 KB ) - added by ethe 8 years ago.
updated patch to use libdispatch when available

Download all attachments as: .zip

Change History (14)

by Hanspeter Niederstrasser, 13 years ago

Attachment: ffmpeg-jack-osx.patch added

provides semaphore_* when HAVE_MACH_SEMAPHORE_H is set

comment:1 by cbsrobot, 13 years ago

this patch fixes the issue on osx 10.6.6

comment:2 by Michael Niedermayer, 13 years ago

Resolution: fixed
Status: newclosed

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 Michael Niedermayer, 13 years ago

Component: undeterminedavformat
Priority: normalwish
Resolution: fixed
Status: closedreopened
Type: defectenhancement
Version: gitgit-master

Rethinking this should be a enhancement request of course, as our jack code should use wider available therad sync functions.

comment:4 by Carl Eugen Hoyos, 12 years ago

Keywords: jack osx added

comment:5 by Carl Eugen Hoyos, 11 years ago

Keywords: roundup added

comment:6 by Carl Eugen Hoyos, 10 years ago

Reproduced by developer: set
Status: reopenedopen

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:7 by Michael Niedermayer, 9 years ago

Does this still affect modern osx ?

comment:8 by Michael Niedermayer, 9 years ago

Cc: Michael Niedermayer added

comment:9 by Hanspeter Niederstrasser, 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 ethe, 8 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 ethe, 8 years ago

Attachment: jack-indev-osx.patch added

updated patch to use libdispatch when available

comment:11 by ethe, 8 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 Carl Eugen Hoyos, 8 years ago

Resolution: fixed
Status: openclosed

Fixed by Josh de Kock in 67f8a0be54554715a93a4e288da3247c9a5d4e1c

Note: See TracTickets for help on using tickets.