Index: media/audio/mac/audio_synchronized_mac.h |
diff --git a/media/audio/mac/audio_synchronized_mac.h b/media/audio/mac/audio_synchronized_mac.h |
deleted file mode 100644 |
index a6db48e3037d8ee53e72106cdba96adad0018047..0000000000000000000000000000000000000000 |
--- a/media/audio/mac/audio_synchronized_mac.h |
+++ /dev/null |
@@ -1,216 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef MEDIA_AUDIO_MAC_AUDIO_SYNCHRONIZED_MAC_H_ |
-#define MEDIA_AUDIO_MAC_AUDIO_SYNCHRONIZED_MAC_H_ |
- |
-#include <AudioToolbox/AudioToolbox.h> |
-#include <AudioUnit/AudioUnit.h> |
-#include <CoreAudio/CoreAudio.h> |
- |
-#include "base/compiler_specific.h" |
-#include "base/synchronization/lock.h" |
-#include "media/audio/audio_io.h" |
-#include "media/audio/audio_parameters.h" |
-#include "media/base/audio_bus.h" |
-#include "media/base/audio_fifo.h" |
- |
-namespace media { |
- |
-class AudioManagerMac; |
-class ChannelMixer; |
- |
-// AudioSynchronizedStream allows arbitrary combinations of input and output |
-// devices running off different clocks and using different drivers, with |
-// potentially differing sample-rates. It implements AudioOutputStream |
-// and shuttles its synchronized I/O data using AudioSourceCallback. |
-// |
-// It is required to first acquire the native sample rate of the selected |
-// output device and then use the same rate when creating this object. |
-// |
-// ............................................................................ |
-// Theory of Operation: |
-// . |
-// INPUT THREAD . OUTPUT THREAD |
-// +-----------------+ +------+ . |
-// | Input AudioUnit | --> | | . |
-// +-----------------+ | | . |
-// | FIFO | . |
-// | | +-----------+ |
-// | | -----> | Varispeed | |
-// | | +-----------+ |
-// +------+ . | |
-// . | +-----------+ |
-// . OnMoreIOData() --> | Output AU | |
-// . +-----------+ |
-// |
-// The input AudioUnit's InputProc is called on one thread which feeds the |
-// FIFO. The output AudioUnit's OutputProc is called on a second thread |
-// which pulls on the varispeed to get the current input data. The varispeed |
-// handles mismatches between input and output sample-rate and also clock drift |
-// between the input and output drivers. The varispeed consumes its data from |
-// the FIFO and adjusts its rate dynamically according to the amount |
-// of data buffered in the FIFO. If the FIFO starts getting too much data |
-// buffered then the varispeed will speed up slightly to compensate |
-// and similarly if the FIFO doesn't have enough data buffered then the |
-// varispeed will slow down slightly. |
-// |
-// Finally, once the input data is available then OnMoreIOData() is called |
-// which is given this input, and renders the output which is finally sent |
-// to the Output AudioUnit. |
-class AudioSynchronizedStream : public AudioOutputStream { |
- public: |
- // The ctor takes all the usual parameters, plus |manager| which is the |
- // the audio manager who is creating this object. |
- AudioSynchronizedStream(AudioManagerMac* manager, |
- const AudioParameters& params, |
- AudioDeviceID input_id, |
- AudioDeviceID output_id); |
- |
- virtual ~AudioSynchronizedStream(); |
- |
- // Implementation of AudioOutputStream. |
- virtual bool Open() OVERRIDE; |
- virtual void Close() OVERRIDE; |
- virtual void Start(AudioSourceCallback* callback) OVERRIDE; |
- virtual void Stop() OVERRIDE; |
- |
- virtual void SetVolume(double volume) OVERRIDE; |
- virtual void GetVolume(double* volume) OVERRIDE; |
- |
- OSStatus SetInputDeviceAsCurrent(AudioDeviceID input_id); |
- OSStatus SetOutputDeviceAsCurrent(AudioDeviceID output_id); |
- AudioDeviceID GetInputDeviceID() { return input_info_.id_; } |
- AudioDeviceID GetOutputDeviceID() { return output_info_.id_; } |
- |
- bool IsRunning(); |
- |
- private: |
- // Initialization. |
- OSStatus CreateAudioUnits(); |
- OSStatus SetupInput(AudioDeviceID input_id); |
- OSStatus EnableIO(); |
- OSStatus SetupOutput(AudioDeviceID output_id); |
- OSStatus SetupCallbacks(); |
- OSStatus SetupStreamFormats(); |
- void AllocateInputData(); |
- |
- // Handlers for the AudioUnit callbacks. |
- OSStatus HandleInputCallback(AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- OSStatus HandleVarispeedCallback(AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- OSStatus HandleOutputCallback(AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- // AudioUnit callbacks. |
- static OSStatus InputProc(void* user_data, |
- AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- static OSStatus VarispeedProc(void* user_data, |
- AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- static OSStatus OutputProc(void* user_data, |
- AudioUnitRenderActionFlags* io_action_flags, |
- const AudioTimeStamp* time_stamp, |
- UInt32 bus_number, |
- UInt32 number_of_frames, |
- AudioBufferList* io_data); |
- |
- // Our creator. |
- AudioManagerMac* manager_; |
- |
- // Client parameters. |
- AudioParameters params_; |
- |
- double input_sample_rate_; |
- double output_sample_rate_; |
- |
- // Pointer to the object that will provide the audio samples. |
- AudioSourceCallback* source_; |
- |
- // Values used in Open(). |
- AudioDeviceID input_id_; |
- AudioDeviceID output_id_; |
- |
- // The input AudioUnit renders its data here. |
- AudioBufferList* input_buffer_list_; |
- |
- // Holds the actual data for |input_buffer_list_|. |
- scoped_ptr<AudioBus> input_bus_; |
- |
- // Used to overlay AudioBufferLists. |
- scoped_ptr<AudioBus> wrapper_bus_; |
- |
- class AudioDeviceInfo { |
- public: |
- AudioDeviceInfo() |
- : id_(kAudioDeviceUnknown), |
- is_input_(false), |
- buffer_size_frames_(0) {} |
- void Initialize(AudioDeviceID inID, bool isInput); |
- bool IsInitialized() const { return id_ != kAudioDeviceUnknown; } |
- |
- AudioDeviceID id_; |
- bool is_input_; |
- UInt32 buffer_size_frames_; |
- }; |
- |
- AudioDeviceInfo input_info_; |
- AudioDeviceInfo output_info_; |
- |
- // Used for input to output buffering. |
- AudioFifo fifo_; |
- |
- // The optimal number of frames we'd like to keep in the FIFO at all times. |
- int target_fifo_frames_; |
- |
- // A running average of the measured delta between actual number of frames |
- // in the FIFO versus |target_fifo_frames_|. |
- double average_delta_; |
- |
- // A varispeed rate scalar which is calculated based on FIFO drift. |
- double fifo_rate_compensation_; |
- |
- // AudioUnits. |
- AudioUnit input_unit_; |
- AudioUnit varispeed_unit_; |
- AudioUnit output_unit_; |
- |
- double first_input_time_; |
- |
- bool is_running_; |
- int hardware_buffer_size_; |
- int channels_; |
- |
- // Channel mixer used to transform mono to stereo data. It is only created |
- // if the input_hardware_channels is mono. |
- scoped_ptr<ChannelMixer> channel_mixer_; |
- scoped_ptr<AudioBus> mixer_bus_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AudioSynchronizedStream); |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_AUDIO_MAC_AUDIO_SYNCHRONIZED_MAC_H_ |