Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Unified Diff: media/audio/win/waveout_output_win.h

Issue 8753001: Revert 112147 - Did not get LGTM from all reviewers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_util.cc ('k') | media/audio/win/waveout_output_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/win/waveout_output_win.h
===================================================================
--- media/audio/win/waveout_output_win.h (revision 112232)
+++ media/audio/win/waveout_output_win.h (working copy)
@@ -11,8 +11,6 @@
#include <mmreg.h>
#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
#include "base/win/scoped_handle.h"
#include "media/audio/audio_io.h"
#include "media/audio/audio_parameters.h"
@@ -30,9 +28,9 @@
// you are keeping state in it.
class PCMWaveOutAudioOutputStream : public AudioOutputStream {
public:
- // The ctor takes all the usual parameters, plus |manager| which is the the
- // audio manager who is creating this object and |device_id| which is provided
- // by the operating system.
+ // The ctor takes all the usual parameters, plus |manager| which is the
+ // the audio manager who is creating this object and |device_id| which
+ // is provided by the operating system.
PCMWaveOutAudioOutputStream(AudioManagerWin* manager,
const AudioParameters& params,
int num_buffers,
@@ -55,27 +53,20 @@
PCMA_BRAND_NEW, // Initial state.
PCMA_READY, // Device obtained and ready to play.
PCMA_PLAYING, // Playing audio.
- PCMA_STOPPING, // Audio is stopping, do not "feed" data to Windows.
PCMA_CLOSED // Device has been released.
};
- // Returns pointer to the n-th buffer.
- inline WAVEHDR* GetBuffer(int n) const;
+ // Windows calls us back to feed more data to the device here. See msdn
+ // documentation for 'waveOutProc' for details about the parameters.
+ static void CALLBACK WaveCallback(HWAVEOUT hwo, UINT msg, DWORD_PTR instance,
+ DWORD_PTR param1, DWORD_PTR param2);
- // Size of one buffer in bytes, rounded up if necessary.
- inline size_t BufferSize() const;
-
- // Windows calls us back asking for more data when buffer_event_ signalled.
- // See MSDN for help on RegisterWaitForSingleObject() and waveOutOpen().
- static void NTAPI BufferCallback(PVOID lpParameter, BOOLEAN);
-
// If windows reports an error this function handles it and passes it to
// the attached AudioSourceCallback::OnError().
void HandleError(MMRESULT error);
-
- // Allocates and prepares the memory that will be used for playback.
+ // Allocates and prepares the memory that will be used for playback. Only
+ // two buffers are created.
void SetupBuffers();
-
// Deallocates the memory allocated in SetupBuffers.
void FreeBuffers();
@@ -116,19 +107,19 @@
// Handle to the instance of the wave device.
HWAVEOUT waveout_;
- // Handle to the buffer event.
- base::win::ScopedHandle buffer_event_;
+ // Pointer to the first allocated audio buffer. This object owns it.
+ WAVEHDR* buffer_;
- // Handle returned by RegisterWaitForSingleObject().
- base::win::ScopedHandle waiting_handle_;
+ // Lock used to prevent stopping the hardware callback thread while it is
+ // pending for data or feeding it to audio driver, because doing that causes
+ // the deadlock. Main thread gets that lock before stopping the playback.
+ // Callback tries to acquire that lock before entering critical code. If
+ // acquire fails then main thread is stopping the playback, callback should
+ // immediately return.
+ // Use Windows-specific lock, not Chrome one, because there is limited set of
+ // functions callback can use.
+ CRITICAL_SECTION lock_;
- // Pointer to the allocated audio buffers, we allocate all buffers in one big
- // chunk. This object owns them.
- scoped_array<char> buffers_;
-
- // Lock used to avoid the conflict when callbacks are called simultaneously.
- base::Lock lock_;
-
DISALLOW_COPY_AND_ASSIGN(PCMWaveOutAudioOutputStream);
};
« no previous file with comments | « media/audio/audio_util.cc ('k') | media/audio/win/waveout_output_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698