Changeset 89478 in webkit


Ignore:
Timestamp:
Jun 22, 2011, 2:14:38 PM (14 years ago)
Author:
crogers@google.com
Message:

2011-06-22 Chris Rogers <crogers@google.com>

Reviewed by Kenneth Russell.

AudioContext needs non-blocking call to create AudioBuffer from audio file data
https://bugs.webkit.org/show_bug.cgi?id=61947

No new tests since audio API is not yet implemented.

  • DerivedSources.make:
  • WebCore.gypi:
  • WebCore.xcodeproj/project.pbxproj:
  • webaudio/AsyncAudioDecoder.cpp: Added. (WebCore::AsyncAudioDecoder::AsyncAudioDecoder): (WebCore::AsyncAudioDecoder::~AsyncAudioDecoder): (WebCore::AsyncAudioDecoder::decodeAsync): (WebCore::AsyncAudioDecoder::threadEntry): (WebCore::AsyncAudioDecoder::runLoop): (WebCore::AsyncAudioDecoder::DecodingTask::DecodingTask): (WebCore::AsyncAudioDecoder::DecodingTask::decode): (WebCore::AsyncAudioDecoder::DecodingTask::notifyCompleteDispatch): (WebCore::AsyncAudioDecoder::DecodingTask::notifyComplete):
  • webaudio/AsyncAudioDecoder.h: Added. (WebCore::AsyncAudioDecoder::DecodingTask::audioData): (WebCore::AsyncAudioDecoder::DecodingTask::sampleRate): (WebCore::AsyncAudioDecoder::DecodingTask::successCallback): (WebCore::AsyncAudioDecoder::DecodingTask::errorCallback): (WebCore::AsyncAudioDecoder::DecodingTask::audioBuffer):
  • webaudio/AudioBufferCallback.h: Added. (WebCore::AudioBufferCallback::~AudioBufferCallback):
  • webaudio/AudioBufferCallback.idl: Added.
  • webaudio/AudioContext.cpp: (WebCore::AudioContext::decodeAudioData):
  • webaudio/AudioContext.h:
  • webaudio/AudioContext.idl:
Location:
trunk/Source/WebCore
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r89475 r89478  
     12011-06-22  Chris Rogers  <crogers@google.com>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        AudioContext needs non-blocking call to create AudioBuffer from audio file data
     6        https://bugs.webkit.org/show_bug.cgi?id=61947
     7
     8        No new tests since audio API is not yet implemented.
     9
     10        * DerivedSources.make:
     11        * WebCore.gypi:
     12        * WebCore.xcodeproj/project.pbxproj:
     13        * webaudio/AsyncAudioDecoder.cpp: Added.
     14        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
     15        (WebCore::AsyncAudioDecoder::~AsyncAudioDecoder):
     16        (WebCore::AsyncAudioDecoder::decodeAsync):
     17        (WebCore::AsyncAudioDecoder::threadEntry):
     18        (WebCore::AsyncAudioDecoder::runLoop):
     19        (WebCore::AsyncAudioDecoder::DecodingTask::DecodingTask):
     20        (WebCore::AsyncAudioDecoder::DecodingTask::decode):
     21        (WebCore::AsyncAudioDecoder::DecodingTask::notifyCompleteDispatch):
     22        (WebCore::AsyncAudioDecoder::DecodingTask::notifyComplete):
     23        * webaudio/AsyncAudioDecoder.h: Added.
     24        (WebCore::AsyncAudioDecoder::DecodingTask::audioData):
     25        (WebCore::AsyncAudioDecoder::DecodingTask::sampleRate):
     26        (WebCore::AsyncAudioDecoder::DecodingTask::successCallback):
     27        (WebCore::AsyncAudioDecoder::DecodingTask::errorCallback):
     28        (WebCore::AsyncAudioDecoder::DecodingTask::audioBuffer):
     29        * webaudio/AudioBufferCallback.h: Added.
     30        (WebCore::AudioBufferCallback::~AudioBufferCallback):
     31        * webaudio/AudioBufferCallback.idl: Added.
     32        * webaudio/AudioContext.cpp:
     33        (WebCore::AudioContext::decodeAudioData):
     34        * webaudio/AudioContext.h:
     35        * webaudio/AudioContext.idl:
     36
    1372011-06-22  Beth Dakin  <bdakin@apple.com>
    238
  • trunk/Source/WebCore/DerivedSources.make

    r89406 r89478  
    5656    Attr \
    5757    AudioBuffer \
     58    AudioBufferCallback \
    5859    AudioBufferSourceNode \
    5960    AudioChannelSplitter \
  • trunk/Source/WebCore/WebCore.gypi

    r89452 r89478  
    14161416            'storage/StorageInfoUsageCallback.idl',
    14171417            'webaudio/AudioBuffer.idl',
     1418            'webaudio/AudioBufferCallback.idl',
    14181419            'webaudio/AudioBufferSourceNode.idl',
    14191420            'webaudio/AudioChannelMerger.idl',
     
    59935994            'webaudio/AudioBuffer.cpp',
    59945995            'webaudio/AudioBuffer.h',
     5996            'webaudio/AudioBufferCallback.h',
    59955997            'webaudio/AudioBufferSourceNode.cpp',
    59965998            'webaudio/AudioBufferSourceNode.h',
     
    60236025            'webaudio/AudioProcessingEvent.h',
    60246026            'webaudio/AudioSourceNode.h',
     6027            'webaudio/AsyncAudioDecoder.cpp',
     6028            'webaudio/AsyncAudioDecoder.h',
    60256029            'webaudio/BiquadDSPKernel.cpp',
    60266030            'webaudio/BiquadDSPKernel.h',
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r89431 r89478  
    58355835                FD537356137B653B00008DCE /* DynamicsCompressorKernel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD537354137B653B00008DCE /* DynamicsCompressorKernel.cpp */; };
    58365836                FD537357137B653B00008DCE /* DynamicsCompressorKernel.h in Headers */ = {isa = PBXBuildFile; fileRef = FD537355137B653B00008DCE /* DynamicsCompressorKernel.h */; };
     5837                FD5686C913AC180200B69C68 /* AsyncAudioDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD5686C713AC180200B69C68 /* AsyncAudioDecoder.cpp */; };
     5838                FD5686CA13AC180200B69C68 /* AsyncAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5686C813AC180200B69C68 /* AsyncAudioDecoder.h */; };
     5839                FD5686CC13AC181400B69C68 /* AudioBufferCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5686CB13AC181400B69C68 /* AudioBufferCallback.h */; };
    58375840                FD6ED2C3136B8E42003CF072 /* DynamicsCompressorNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD6ED2C1136B8E42003CF072 /* DynamicsCompressorNode.cpp */; };
    58385841                FD6ED2C4136B8E42003CF072 /* DynamicsCompressorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6ED2C2136B8E42003CF072 /* DynamicsCompressorNode.h */; };
     
    58965899                FDF6BAF8134A4C9800822920 /* JSOfflineAudioCompletionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDF6BAF6134A4C9800822920 /* JSOfflineAudioCompletionEvent.cpp */; };
    58975900                FDF6BAF9134A4C9800822920 /* JSOfflineAudioCompletionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF6BAF7134A4C9800822920 /* JSOfflineAudioCompletionEvent.h */; };
     5901                FDF7E9C313AC21DB00A51EAC /* JSAudioBufferCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDF7E9C113AC21DB00A51EAC /* JSAudioBufferCallback.cpp */; };
     5902                FDF7E9C413AC21DB00A51EAC /* JSAudioBufferCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF7E9C213AC21DB00A51EAC /* JSAudioBufferCallback.h */; };
    58985903                FE6FD4880F676E5700092873 /* Coordinates.h in Headers */ = {isa = PBXBuildFile; fileRef = FE6FD4850F676E5700092873 /* Coordinates.h */; settings = {ATTRIBUTES = (Private, ); }; };
    58995904                FE6FD48D0F676E9300092873 /* JSCoordinates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE6FD48B0F676E9300092873 /* JSCoordinates.cpp */; };
     
    1253212537                FD537354137B653B00008DCE /* DynamicsCompressorKernel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicsCompressorKernel.cpp; sourceTree = "<group>"; };
    1253312538                FD537355137B653B00008DCE /* DynamicsCompressorKernel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicsCompressorKernel.h; sourceTree = "<group>"; };
     12539                FD5686C713AC180200B69C68 /* AsyncAudioDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AsyncAudioDecoder.cpp; sourceTree = "<group>"; };
     12540                FD5686C813AC180200B69C68 /* AsyncAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncAudioDecoder.h; sourceTree = "<group>"; };
     12541                FD5686CB13AC181400B69C68 /* AudioBufferCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioBufferCallback.h; sourceTree = "<group>"; };
     12542                FD5686CD13AC183E00B69C68 /* AudioBufferCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AudioBufferCallback.idl; sourceTree = "<group>"; };
    1253412543                FD6ED2C1136B8E42003CF072 /* DynamicsCompressorNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicsCompressorNode.cpp; sourceTree = "<group>"; };
    1253512544                FD6ED2C2136B8E42003CF072 /* DynamicsCompressorNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicsCompressorNode.h; sourceTree = "<group>"; };
     
    1259612605                FDF6BAF6134A4C9800822920 /* JSOfflineAudioCompletionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSOfflineAudioCompletionEvent.cpp; sourceTree = "<group>"; };
    1259712606                FDF6BAF7134A4C9800822920 /* JSOfflineAudioCompletionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSOfflineAudioCompletionEvent.h; sourceTree = "<group>"; };
     12607                FDF7E9C113AC21DB00A51EAC /* JSAudioBufferCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioBufferCallback.cpp; sourceTree = "<group>"; };
     12608                FDF7E9C213AC21DB00A51EAC /* JSAudioBufferCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAudioBufferCallback.h; sourceTree = "<group>"; };
    1259812609                FE49EF970DC51462004266E1 /* DashboardSupportCSSPropertyNames.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DashboardSupportCSSPropertyNames.in; sourceTree = "<group>"; };
    1259912610                FE6FD4850F676E5700092873 /* Coordinates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Coordinates.h; sourceTree = "<group>"; };
     
    1981119822                        isa = PBXGroup;
    1981219823                        children = (
     19824                                FD5686C713AC180200B69C68 /* AsyncAudioDecoder.cpp */,
     19825                                FD5686C813AC180200B69C68 /* AsyncAudioDecoder.h */,
    1981319826                                FD315FAC12B0267500C1A359 /* AudioBasicProcessorNode.cpp */,
    1981419827                                FD315FAD12B0267500C1A359 /* AudioBasicProcessorNode.h */,
     
    1981619829                                FD315FAF12B0267500C1A359 /* AudioBuffer.h */,
    1981719830                                FD315FB012B0267500C1A359 /* AudioBuffer.idl */,
     19831                                FD5686CB13AC181400B69C68 /* AudioBufferCallback.h */,
     19832                                FD5686CD13AC183E00B69C68 /* AudioBufferCallback.idl */,
    1981819833                                FD315FB112B0267500C1A359 /* AudioBufferSourceNode.cpp */,
    1981919834                                FD315FB212B0267500C1A359 /* AudioBufferSourceNode.h */,
     
    1999120006                                FDA15E8112B03EE1003A583A /* JSAudioBuffer.cpp */,
    1999220007                                FDA15E8212B03EE1003A583A /* JSAudioBuffer.h */,
     20008                                FDF7E9C113AC21DB00A51EAC /* JSAudioBufferCallback.cpp */,
     20009                                FDF7E9C213AC21DB00A51EAC /* JSAudioBufferCallback.h */,
    1999320010                                FDA15E8312B03EE1003A583A /* JSAudioBufferSourceNode.cpp */,
    1999420011                                FDA15E8412B03EE1003A583A /* JSAudioBufferSourceNode.h */,
     
    2301523032                                FD537353137B651800008DCE /* ZeroPole.h in Headers */,
    2301623033                                985BB96E13A94058007A0B69 /* LinkRelAttribute.h in Headers */,
     23034                                FD5686CA13AC180200B69C68 /* AsyncAudioDecoder.h in Headers */,
     23035                                FD5686CC13AC181400B69C68 /* AudioBufferCallback.h in Headers */,
     23036                                FDF7E9C413AC21DB00A51EAC /* JSAudioBufferCallback.h in Headers */,
    2301723037                                B1AD4E5D13A12A0B00846B27 /* CueIndex.h in Headers */,
    2301823038                                B1AD4E5F13A12A0B00846B27 /* LoadableTextTrack.h in Headers */,
     
    2577125791                                FD537352137B651800008DCE /* ZeroPole.cpp in Sources */,
    2577225792                                985BB96D13A94058007A0B69 /* LinkRelAttribute.cpp in Sources */,
     25793                                FD5686C913AC180200B69C68 /* AsyncAudioDecoder.cpp in Sources */,
     25794                                FDF7E9C313AC21DB00A51EAC /* JSAudioBufferCallback.cpp in Sources */,
    2577325795                                B1AD4E5C13A12A0B00846B27 /* CueIndex.cpp in Sources */,
    2577425796                                B1AD4E5E13A12A0B00846B27 /* LoadableTextTrack.cpp in Sources */,
  • trunk/Source/WebCore/webaudio/AudioContext.cpp

    r88380 r89478  
    3030
    3131#include "ArrayBuffer.h"
     32#include "AsyncAudioDecoder.h"
    3233#include "AudioBuffer.h"
     34#include "AudioBufferCallback.h"
    3335#include "AudioBufferSourceNode.h"
    3436#include "AudioChannelMerger.h"
     
    247249}
    248250
     251void AudioContext::decodeAudioData(ArrayBuffer* audioData, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback, ExceptionCode& ec)
     252{
     253    if (!audioData) {
     254        ec = SYNTAX_ERR;
     255        return;
     256    }
     257    m_audioDecoder.decodeAsync(audioData, sampleRate(), successCallback, errorCallback);
     258}
     259
    249260PassRefPtr<AudioBufferSourceNode> AudioContext::createBufferSource()
    250261{
  • trunk/Source/WebCore/webaudio/AudioContext.h

    r88380 r89478  
    2727
    2828#include "ActiveDOMObject.h"
     29#include "AsyncAudioDecoder.h"
    2930#include "AudioBus.h"
    3031#include "AudioDestinationNode.h"
     
    4546class ArrayBuffer;
    4647class AudioBuffer;
     48class AudioBufferCallback;
    4749class AudioBufferSourceNode;
    4850class AudioChannelMerger;
     
    9395    PassRefPtr<AudioBuffer> createBuffer(unsigned numberOfChannels, size_t numberOfFrames, double sampleRate);
    9496    PassRefPtr<AudioBuffer> createBuffer(ArrayBuffer* arrayBuffer, bool mixToMono);
     97
     98    // Asynchronous audio file data decoding.
     99    void decodeAudioData(ArrayBuffer*, PassRefPtr<AudioBufferCallback>, PassRefPtr<AudioBufferCallback>, ExceptionCode& ec);
    95100
    96101    // Keep track of this buffer so we can release memory after the context is shut down...
     
    292297   
    293298    bool m_isOfflineContext;
     299
     300    AsyncAudioDecoder m_audioDecoder;
    294301};
    295302
  • trunk/Source/WebCore/webaudio/AudioContext.idl

    r89148 r89478  
    5353        [Custom] AudioBuffer createBuffer()
    5454            raises(DOMException);
     55           
     56        // Asynchronous audio file data decoding.
     57        void decodeAudioData(in ArrayBuffer audioData, in [Callback] AudioBufferCallback successCallback, in [Optional, Callback] AudioBufferCallback errorCallback)
     58            raises(DOMException);
    5559
    5660        // Source
Note: See TracChangeset for help on using the changeset viewer.