Changeset 98554 in webkit


Ignore:
Timestamp:
Oct 27, 2011 5:31:44 AM (12 years ago)
Author:
Philippe Normand
Message:

[GStreamer] WebAudio AudioFileReader implementation
https://bugs.webkit.org/show_bug.cgi?id=69834

.:

Patch by Philippe Normand <pnormand@igalia.com> and Zan Dobersek <zandobersek@gmail.com> on 2011-10-27
Reviewed by Martin Robinson.

  • configure.ac: Check for libfftw and gstreamer-audio if WebAudio

build is enabled.

Source/WebCore:

Patch by Philippe Normand <pnormand@igalia.com> and Zan Dobersek <zandobersek@gmail.com> on 2011-10-27
Reviewed by Martin Robinson.

Basic FileReader implementation, supporting one or 2 audio
channels. An empty AudioDestination is also provided, its complete
implementation is handled in bug 69835.

  • GNUmakefile.am:
  • GNUmakefile.list.am:
  • platform/audio/gstreamer/AudioDestinationGStreamer.cpp: Added.

(WebCore::AudioDestination::create):
(WebCore::AudioDestination::hardwareSampleRate):
(WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
(WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
(WebCore::AudioDestinationGStreamer::start):
(WebCore::AudioDestinationGStreamer::stop):

  • platform/audio/gstreamer/AudioDestinationGStreamer.h: Added.

(WebCore::AudioDestinationGStreamer::isPlaying):
(WebCore::AudioDestinationGStreamer::sampleRate):
(WebCore::AudioDestinationGStreamer::sourceProvider):

  • platform/audio/gstreamer/AudioFileReaderGStreamer.cpp: Added.

(WebCore::getGStreamerAudioCaps):
(WebCore::getFloatFromByteReader):
(WebCore::copyGstreamerBuffersToAudioChannel):
(WebCore::onAppsinkNewBufferCallback):
(WebCore::messageCallback):
(WebCore::onGStreamerDeinterleavePadAddedCallback):
(WebCore::onGStreamerDeinterleaveReadyCallback):
(WebCore::onGStreamerDecodebinPadAddedCallback):
(WebCore::AudioFileReader::AudioFileReader):
(WebCore::AudioFileReader::~AudioFileReader):
(WebCore::AudioFileReader::handleBuffer):
(WebCore::AudioFileReader::handleMessage):
(WebCore::AudioFileReader::handleNewDeinterleavePad):
(WebCore::AudioFileReader::deinterleavePadsConfigured):
(WebCore::AudioFileReader::plugDeinterleave):
(WebCore::AudioFileReader::createBus):
(WebCore::createBusFromAudioFile):
(WebCore::createBusFromInMemoryAudioFile):

  • platform/audio/gtk/AudioBusGtk.cpp: Added.

(WebCore::AudioBus::loadPlatformResource):

Source/WebKit/gtk:

Reviewed by Martin Robinson.

  • GNUmakefile.am: Link against libfftw.

Source/WebKit2:

Reviewed by Martin Robinson.

  • GNUmakefile.am: Link against libfftw.
Location:
trunk
Files:
8 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r98500 r98554  
     12011-10-27  Philippe Normand  <pnormand@igalia.com> and Zan Dobersek  <zandobersek@gmail.com>
     2
     3        [GStreamer] WebAudio AudioFileReader implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=69834
     5
     6        Reviewed by Martin Robinson.
     7
     8        * configure.ac: Check for libfftw and gstreamer-audio if WebAudio
     9        build is enabled.
     10
    1112011-10-26  Alejandro G. Castro  <alex@igalia.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r98552 r98554  
     12011-10-27  Philippe Normand  <pnormand@igalia.com> and Zan Dobersek  <zandobersek@gmail.com>
     2
     3        [GStreamer] WebAudio AudioFileReader implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=69834
     5
     6        Reviewed by Martin Robinson.
     7
     8        Basic FileReader implementation, supporting one or 2 audio
     9        channels. An empty AudioDestination is also provided, its complete
     10        implementation is handled in bug 69835.
     11
     12        * GNUmakefile.am:
     13        * GNUmakefile.list.am:
     14        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp: Added.
     15        (WebCore::AudioDestination::create):
     16        (WebCore::AudioDestination::hardwareSampleRate):
     17        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
     18        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
     19        (WebCore::AudioDestinationGStreamer::start):
     20        (WebCore::AudioDestinationGStreamer::stop):
     21        * platform/audio/gstreamer/AudioDestinationGStreamer.h: Added.
     22        (WebCore::AudioDestinationGStreamer::isPlaying):
     23        (WebCore::AudioDestinationGStreamer::sampleRate):
     24        (WebCore::AudioDestinationGStreamer::sourceProvider):
     25        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp: Added.
     26        (WebCore::getGStreamerAudioCaps):
     27        (WebCore::getFloatFromByteReader):
     28        (WebCore::copyGstreamerBuffersToAudioChannel):
     29        (WebCore::onAppsinkNewBufferCallback):
     30        (WebCore::messageCallback):
     31        (WebCore::onGStreamerDeinterleavePadAddedCallback):
     32        (WebCore::onGStreamerDeinterleaveReadyCallback):
     33        (WebCore::onGStreamerDecodebinPadAddedCallback):
     34        (WebCore::AudioFileReader::AudioFileReader):
     35        (WebCore::AudioFileReader::~AudioFileReader):
     36        (WebCore::AudioFileReader::handleBuffer):
     37        (WebCore::AudioFileReader::handleMessage):
     38        (WebCore::AudioFileReader::handleNewDeinterleavePad):
     39        (WebCore::AudioFileReader::deinterleavePadsConfigured):
     40        (WebCore::AudioFileReader::plugDeinterleave):
     41        (WebCore::AudioFileReader::createBus):
     42        (WebCore::createBusFromAudioFile):
     43        (WebCore::createBusFromInMemoryAudioFile):
     44        * platform/audio/gtk/AudioBusGtk.cpp: Added.
     45        (WebCore::AudioBus::loadPlatformResource):
     46
    1472011-10-27  Philippe Normand  <pnormand@igalia.com>
    248
  • trunk/Source/WebCore/GNUmakefile.am

    r98496 r98554  
    100100        -I$(srcdir)/Source/WebCore/page/gtk \
    101101        -I$(srcdir)/Source/WebCore/platform/cairo \
     102        -I$(srcdir)/Source/WebCore/platform/audio/gstreamer \
    102103        -I$(srcdir)/Source/WebCore/platform/graphics/cairo \
    103104        -I$(srcdir)/Source/WebCore/platform/graphics/gstreamer \
     
    501502FEATURE_DEFINES += ENABLE_WEB_AUDIO=1
    502503webcore_cppflags += -DENABLE_WEB_AUDIO=1
     504
     505if USE_WEBAUDIO_FFTW
     506FEATURE_DEFINES += WTF_USE_WEBAUDIO_FFTW=1
     507webcore_cppflags += -DWTF_USE_WEBAUDIO_FFTW=1
     508webcore_sources += \
     509        Source/WebCore/platform/audio/fftw/FFTFrameFFTW.cpp
     510endif
     511
    503512endif
    504513
     
    816825        $(GTK_CFLAGS) \
    817826        $(HILDON_CFLAGS) \
     827        $(LIBFFTW_CFLAGS) \
    818828        $(LIBSOUP_CFLAGS) \
    819829        $(LIBXML_CFLAGS) \
  • trunk/Source/WebCore/GNUmakefile.list.am

    r98388 r98554  
    150150        DerivedSources/WebCore/JSDOMWindow.cpp \
    151151        DerivedSources/WebCore/JSDOMWindow.h \
     152        DerivedSources/WebCore/JSDynamicsCompressorNode.h \
     153        DerivedSources/WebCore/JSDynamicsCompressorNode.cpp \
    152154        DerivedSources/WebCore/JSElement.cpp \
    153155        DerivedSources/WebCore/JSElement.h \
     
    522524        DerivedSources/WebCore/JSVoidCallback.cpp \
    523525        DerivedSources/WebCore/JSVoidCallback.h \
     526        DerivedSources/WebCore/JSWaveShaperNode.cpp \
     527        DerivedSources/WebCore/JSWaveShaperNode.h \
    524528        DerivedSources/WebCore/JSWebGLActiveInfo.cpp \
    525529        DerivedSources/WebCore/JSWebGLActiveInfo.h \
     
    46024606# Web Audio Support
    46034607# ----
     4608
    46044609if ENABLE_WEB_AUDIO
    46054610webcore_sources += \
     4611        Source/WebCore/bindings/js/JSAudioBufferSourceNodeCustom.cpp \
     4612        Source/WebCore/bindings/js/JSAudioContextCustom.cpp \
     4613        Source/WebCore/bindings/js/JSAudioNodeCustom.cpp \
     4614        Source/WebCore/bindings/js/JSConvolverNodeCustom.cpp \
     4615        Source/WebCore/bindings/js/JSJavaScriptAudioNodeCustom.cpp \
     4616        Source/WebCore/bindings/js/JSWaveShaperNodeCustom.cpp \
     4617        Source/WebCore/webaudio/AsyncAudioDecoder.cpp \
     4618        Source/WebCore/webaudio/AsyncAudioDecoder.h \
    46064619        Source/WebCore/webaudio/AudioBasicProcessorNode.cpp \
    46074620        Source/WebCore/webaudio/AudioBasicProcessorNode.h \
     
    46334646        Source/WebCore/webaudio/AudioParam.cpp \
    46344647        Source/WebCore/webaudio/AudioParam.h \
     4648        Source/WebCore/webaudio/AudioParamTimeline.cpp \
     4649        Source/WebCore/webaudio/AudioParamTimeline.h \
    46354650        Source/WebCore/webaudio/AudioProcessingEvent.cpp \
    46364651        Source/WebCore/webaudio/AudioProcessingEvent.h \
     
    46384653        Source/WebCore/webaudio/BiquadDSPKernel.cpp \
    46394654        Source/WebCore/webaudio/BiquadDSPKernel.h \
     4655        Source/WebCore/webaudio/BiquadFilterNode.cpp \
     4656        Source/WebCore/webaudio/BiquadFilterNode.h \
    46404657        Source/WebCore/webaudio/BiquadProcessor.cpp \
    46414658        Source/WebCore/webaudio/BiquadProcessor.h \
    46424659        Source/WebCore/webaudio/ConvolverNode.cpp \
    46434660        Source/WebCore/webaudio/ConvolverNode.h \
     4661        Source/WebCore/webaudio/DefaultAudioDestinationNode.h \
     4662        Source/WebCore/webaudio/DefaultAudioDestinationNode.cpp \
    46444663        Source/WebCore/webaudio/DelayDSPKernel.cpp \
    46454664        Source/WebCore/webaudio/DelayDSPKernel.h \
     
    46484667        Source/WebCore/webaudio/DelayProcessor.cpp \
    46494668        Source/WebCore/webaudio/DelayProcessor.h \
     4669        Source/WebCore/webaudio/DynamicsCompressorNode.cpp \
     4670        Source/WebCore/webaudio/DynamicsCompressorNode.h \
    46504671        Source/WebCore/webaudio/HighPass2FilterNode.cpp \
    46514672        Source/WebCore/webaudio/HighPass2FilterNode.h \
     
    46544675        Source/WebCore/webaudio/LowPass2FilterNode.cpp \
    46554676        Source/WebCore/webaudio/LowPass2FilterNode.h \
     4677        Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp \
     4678        Source/WebCore/webaudio/MediaElementAudioSourceNode.h \
     4679        Source/WebCore/webaudio/OfflineAudioDestinationNode.h \
     4680        Source/WebCore/webaudio/OfflineAudioDestinationNode.cpp \
     4681        Source/WebCore/webaudio/OfflineAudioCompletionEvent.h \
     4682        Source/WebCore/webaudio/OfflineAudioCompletionEvent.cpp \
    46564683        Source/WebCore/webaudio/RealtimeAnalyser.cpp \
    46574684        Source/WebCore/webaudio/RealtimeAnalyser.h \
    46584685        Source/WebCore/webaudio/RealtimeAnalyserNode.cpp \
    4659         Source/WebCore/webaudio/RealtimeAnalyserNode.h
     4686        Source/WebCore/webaudio/RealtimeAnalyserNode.h \
     4687        Source/WebCore/webaudio/WaveShaperNode.cpp \
     4688        Source/WebCore/webaudio/WaveShaperProcessor.h \
     4689        Source/WebCore/webaudio/WaveShaperDSPKernel.cpp \
     4690        Source/WebCore/webaudio/WaveShaperDSPKernel.h \
     4691        Source/WebCore/webaudio/WaveShaperProcessor.cpp \
     4692        Source/WebCore/webaudio/WaveShaperNode.h \
     4693        Source/WebCore/platform/audio/AudioArray.h \
     4694        Source/WebCore/platform/audio/AudioBus.cpp \
     4695        Source/WebCore/platform/audio/AudioBus.h \
     4696        Source/WebCore/platform/audio/AudioChannel.cpp \
     4697        Source/WebCore/platform/audio/AudioChannel.h \
     4698        Source/WebCore/platform/audio/AudioDestination.h \
     4699        Source/WebCore/platform/audio/AudioDSPKernel.h \
     4700        Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp \
     4701        Source/WebCore/platform/audio/AudioDSPKernelProcessor.h \
     4702        Source/WebCore/platform/audio/AudioFileReader.h \
     4703        Source/WebCore/platform/audio/AudioProcessor.h \
     4704        Source/WebCore/platform/audio/AudioResampler.cpp \
     4705        Source/WebCore/platform/audio/AudioResampler.h \
     4706        Source/WebCore/platform/audio/AudioResamplerKernel.cpp \
     4707        Source/WebCore/platform/audio/AudioResamplerKernel.h \
     4708        Source/WebCore/platform/audio/AudioSourceProvider.h \
     4709        Source/WebCore/platform/audio/AudioUtilities.cpp \
     4710        Source/WebCore/platform/audio/AudioUtilities.h \
     4711        Source/WebCore/platform/audio/Biquad.cpp \
     4712        Source/WebCore/platform/audio/Biquad.h \
     4713        Source/WebCore/platform/audio/Cone.cpp \
     4714        Source/WebCore/platform/audio/Cone.h \
     4715        Source/WebCore/platform/audio/Distance.cpp \
     4716        Source/WebCore/platform/audio/Distance.h \
     4717        Source/WebCore/platform/audio/DynamicsCompressor.h \
     4718        Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp \
     4719        Source/WebCore/platform/audio/DynamicsCompressorKernel.h \
     4720        Source/WebCore/platform/audio/DynamicsCompressor.cpp \
     4721        Source/WebCore/platform/audio/EqualPowerPanner.cpp \
     4722        Source/WebCore/platform/audio/EqualPowerPanner.h \
     4723        Source/WebCore/platform/audio/FFTConvolver.cpp \
     4724        Source/WebCore/platform/audio/FFTConvolver.h \
     4725        Source/WebCore/platform/audio/FFTFrame.cpp \
     4726        Source/WebCore/platform/audio/FFTFrame.h \
     4727        Source/WebCore/platform/audio/FFTFrameStub.cpp \
     4728        Source/WebCore/platform/audio/HRTFDatabase.cpp \
     4729        Source/WebCore/platform/audio/HRTFDatabase.h \
     4730        Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp \
     4731        Source/WebCore/platform/audio/HRTFDatabaseLoader.h \
     4732        Source/WebCore/platform/audio/HRTFElevation.cpp \
     4733        Source/WebCore/platform/audio/HRTFElevation.h \
     4734        Source/WebCore/platform/audio/HRTFKernel.cpp \
     4735        Source/WebCore/platform/audio/HRTFKernel.h \
     4736        Source/WebCore/platform/audio/HRTFPanner.cpp \
     4737        Source/WebCore/platform/audio/HRTFPanner.h \
     4738        Source/WebCore/platform/audio/Panner.cpp \
     4739        Source/WebCore/platform/audio/Panner.h \
     4740        Source/WebCore/platform/audio/ReverbAccumulationBuffer.cpp \
     4741        Source/WebCore/platform/audio/ReverbAccumulationBuffer.h \
     4742        Source/WebCore/platform/audio/ReverbConvolver.cpp \
     4743        Source/WebCore/platform/audio/ReverbConvolver.h \
     4744        Source/WebCore/platform/audio/ReverbConvolverStage.cpp \
     4745        Source/WebCore/platform/audio/ReverbConvolverStage.h \
     4746        Source/WebCore/platform/audio/Reverb.cpp \
     4747        Source/WebCore/platform/audio/Reverb.h \
     4748        Source/WebCore/platform/audio/ReverbInputBuffer.cpp \
     4749        Source/WebCore/platform/audio/ReverbInputBuffer.h \
     4750        Source/WebCore/platform/audio/SincResampler.cpp \
     4751        Source/WebCore/platform/audio/SincResampler.h \
     4752        Source/WebCore/platform/audio/VectorMath.cpp \
     4753        Source/WebCore/platform/audio/VectorMath.h \
     4754        Source/WebCore/platform/audio/ZeroPole.cpp \
     4755        Source/WebCore/platform/audio/ZeroPole.h \
     4756        Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp \
     4757        Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.h \
     4758        Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp \
     4759        Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp
    46604760webcore_built_sources += \
    46614761        DerivedSources/WebCore/JSAudioBuffer.cpp \
    46624762        DerivedSources/WebCore/JSAudioBuffer.h \
     4763        DerivedSources/WebCore/JSAudioBufferCallback.cpp \
     4764        DerivedSources/WebCore/JSAudioBufferCallback.h \
    46634765        DerivedSources/WebCore/JSAudioBufferSourceNode.cpp \
    46644766        DerivedSources/WebCore/JSAudioBufferSourceNode.h \
     
    46674769        DerivedSources/WebCore/JSAudioChannelSplitter.cpp \
    46684770        DerivedSources/WebCore/JSAudioChannelSplitter.h \
    4669         DerivedSources/WebCore/JSAudioContext.cpp \
    4670         DerivedSources/WebCore/JSAudioContext.h \
    46714771        DerivedSources/WebCore/JSAudioDestinationNode.cpp \
    46724772        DerivedSources/WebCore/JSAudioDestinationNode.h \
     
    46794779        DerivedSources/WebCore/JSAudioNode.cpp \
    46804780        DerivedSources/WebCore/JSAudioNode.h \
    4681         DerivedSources/WebCore/JSAudioPannerNode.cpp \
    4682         DerivedSources/WebCore/JSAudioPannerNode.h \
    46834781        DerivedSources/WebCore/JSAudioParam.cpp \
    46844782        DerivedSources/WebCore/JSAudioParam.h \
     
    46874785        DerivedSources/WebCore/JSAudioSourceNode.cpp \
    46884786        DerivedSources/WebCore/JSAudioSourceNode.h \
     4787        DerivedSources/WebCore/JSBiquadFilterNode.cpp \
     4788        DerivedSources/WebCore/JSBiquadFilterNode.h \
    46894789        DerivedSources/WebCore/JSConvolverNode.cpp \
    46904790        DerivedSources/WebCore/JSConvolverNode.h \
     
    46954795        DerivedSources/WebCore/JSJavaScriptAudioNode.cpp \
    46964796        DerivedSources/WebCore/JSJavaScriptAudioNode.h \
     4797        DerivedSources/WebCore/JSOfflineAudioCompletionEvent.cpp \
     4798        DerivedSources/WebCore/JSOfflineAudioCompletionEvent.h \
    46974799        DerivedSources/WebCore/JSLowPass2FilterNode.cpp \
    46984800        DerivedSources/WebCore/JSLowPass2FilterNode.h \
     4801        DerivedSources/WebCore/JSMediaElementAudioSourceNode.cpp \
     4802        DerivedSources/WebCore/JSMediaElementAudioSourceNode.h \
    46994803        DerivedSources/WebCore/JSRealtimeAnalyserNode.cpp \
    47004804        DerivedSources/WebCore/JSRealtimeAnalyserNode.h
    47014805endif
     4806
    47024807
    47034808# ----
  • trunk/Source/WebKit/gtk/ChangeLog

    r98500 r98554  
     12011-10-27  Philippe Normand  <pnormand@igalia.com>
     2
     3        [GStreamer] WebAudio AudioFileReader implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=69834
     5
     6        Reviewed by Martin Robinson.
     7
     8        * GNUmakefile.am: Link against libfftw.
     9
    1102011-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>
    211
  • trunk/Source/WebKit/gtk/GNUmakefile.am

    r97901 r98554  
    6767        $(GTK_CFLAGS) \
    6868        $(HILDON_CFLAGS) \
     69        $(LIBFFTW_CFLAGS) \
    6970        $(LIBSOUP_CFLAGS) \
    7071        $(LIBXML_CFLAGS) \
     
    9798        $(HILDON_LIBS) \
    9899        $(JPEG_LIBS) \
     100        $(LIBFFTW_LIBS) \
    99101        $(LIBSOUP_LIBS) \
    100102        $(LIBXML_LIBS) \
  • trunk/Source/WebKit2/ChangeLog

    r98526 r98554  
     12011-10-27  Philippe Normand  <pnormand@igalia.com>
     2
     3        [GStreamer] WebAudio AudioFileReader implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=69834
     5
     6        Reviewed by Martin Robinson.
     7
     8        * GNUmakefile.am: Link against libfftw.
     9
    1102011-10-26  Alexey Proskuryakov  <ap@apple.com>
    211
  • trunk/Source/WebKit2/GNUmakefile.am

    r98498 r98554  
    13771377        $(XT_LIBS) \
    13781378        $(WINMM_LIBS) \
     1379        $(LIBFFTW_LIBS) \
    13791380        $(ZLIB_LIBS)
    13801381
  • trunk/configure.ac

    r98500 r98554  
    278278GSTREAMER_PLUGINS_BASE_REQUIRED_VERSION=0.10.30
    279279ENCHANT_REQUIRED_VERSION=0.22
     280LIBFFTW_REQUIRED_VERSION=3.2.2
    280281
    281282# Available modules
     
    10361037
    10371038# check if gstreamer is available
    1038 if test "$enable_video" = "yes"; then
     1039if test "$enable_video" = "yes" || test "$enable_web_audio" = "yes"; then
    10391040   PKG_CHECK_MODULES([GSTREAMER],
    10401041                     [gstreamer-0.10 >= $GSTREAMER_REQUIRED_VERSION
    10411042                     gstreamer-app-0.10
     1043                     gstreamer-audio-0.10
    10421044                     gstreamer-base-0.10
    10431045                     gstreamer-interfaces-0.10
     
    10491051   AC_SUBST([GSTREAMER_CFLAGS])
    10501052   AC_SUBST([GSTREAMER_LIBS])
     1053fi
     1054
     1055# check if libfftw is available
     1056if test "$enable_web_audio" = "yes"; then
     1057   PKG_CHECK_MODULES([LIBFFTW],
     1058                     [fftw3 >= $LIBFFTW_REQUIRED_VERSION
     1059                     fftw3f >= $LIBFFTW_REQUIRED_VERSION],
     1060                     [have_fftw=yes])
     1061
     1062    AC_SUBST([LIBFFTW_CFLAGS])
     1063    AC_SUBST([LIBFFTW_LIBS])
    10511064fi
    10521065
     
    11231136# GStreamer feature conditional
    11241137AM_CONDITIONAL([USE_GSTREAMER], [test "$have_gstreamer" = "yes"])
     1138
     1139# Web Audio feature conditional
     1140AM_CONDITIONAL([USE_WEBAUDIO_FFTW], [test "$have_fftw" = "yes"])
    11251141
    11261142# WebKit feature conditionals
Note: See TracChangeset for help on using the changeset viewer.