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

Unified Diff: media/audio/linux/alsa_output.h

Issue 2008010: Fixes in AlsaPcmOutputStream. (Closed)
Patch Set: - Created 10 years, 7 months 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 | « no previous file | media/audio/linux/alsa_output.cc » ('j') | media/audio/linux/alsa_output_unittest.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/linux/alsa_output.h
diff --git a/media/audio/linux/alsa_output.h b/media/audio/linux/alsa_output.h
index 192186b506c94c9f8894675d81b13ef490692841..da77cf2d5e46d538b834562c6e42cf989d9ea23f 100644
--- a/media/audio/linux/alsa_output.h
+++ b/media/audio/linux/alsa_output.h
@@ -39,6 +39,10 @@
#include "media/audio/audio_output.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
+namespace media {
+class SeekableBuffer;
+}; // namespace media
+
class AlsaWrapper;
class AudioManagerLinux;
@@ -94,7 +98,7 @@ class AlsaPcmOutputStream :
FRIEND_TEST(AlsaPcmOutputStreamTest, BufferPacket_Negative);
FRIEND_TEST(AlsaPcmOutputStreamTest, BufferPacket_StopStream);
FRIEND_TEST(AlsaPcmOutputStreamTest, BufferPacket_Underrun);
- FRIEND_TEST(AlsaPcmOutputStreamTest, BufferPacket_UnfinishedPacket);
+ FRIEND_TEST(AlsaPcmOutputStreamTest, BufferPacket_FullBuffer);
FRIEND_TEST(AlsaPcmOutputStreamTest, ConstructedState);
FRIEND_TEST(AlsaPcmOutputStreamTest, LatencyFloor);
FRIEND_TEST(AlsaPcmOutputStreamTest, OpenClose);
@@ -110,22 +114,6 @@ class AlsaPcmOutputStream :
virtual ~AlsaPcmOutputStream();
- // In-memory buffer to hold sound samples before pushing to the sound device.
- // TODO(ajwong): There are now about 3 buffer/packet implementations. Factor
- // them out.
- struct Packet {
- explicit Packet(uint32 new_capacity)
- : capacity(new_capacity),
- size(0),
- used(0),
- buffer(new char[capacity]) {
- }
- uint32 capacity;
- uint32 size;
- uint32 used;
- scoped_array<char> buffer;
- };
-
// Flags indicating the state of the stream.
enum InternalState {
kInError = 0,
@@ -144,13 +132,12 @@ class AlsaPcmOutputStream :
// Functions to get another packet from the data source and write it into the
// ALSA device.
- void BufferPacket(Packet* packet);
- void WritePacket(Packet* packet);
+ void BufferPacket();
+ void WritePacket();
void WriteTask();
- void ScheduleNextWrite(Packet* current_packet);
+ void ScheduleNextWrite();
// Utility functions for talking with the ALSA API.
- static uint32 FramesInPacket(const Packet& packet, uint32 bytes_per_frame);
static uint32 FramesToMicros(uint32 frames, uint32 sample_rate);
static uint32 FramesToMillis(uint32 frames, uint32 sample_rate);
std::string FindDeviceForChannels(uint32 channels);
@@ -159,6 +146,7 @@ class AlsaPcmOutputStream :
uint32 latency);
bool CloseDevice(snd_pcm_t* handle);
snd_pcm_sframes_t GetAvailableFrames();
+ snd_pcm_sframes_t GetCurrentDelay();
// Attempts to find the best matching linux audio device for the given number
// of channels. This function will set |device_name_| and |should_downmix_|.
@@ -227,8 +215,10 @@ class AlsaPcmOutputStream :
std::string device_name_;
bool should_downmix_;
uint32 latency_micros_;
+ uint32 packet_size_;
uint32 micros_per_packet_;
uint32 bytes_per_output_frame_;
+ uint32 alsa_buffer_frames_;
// Flag indicating the code should stop reading from the data source or
// writing to the ALSA device. This is set because the device has entered
@@ -246,7 +236,7 @@ class AlsaPcmOutputStream :
// Handle to the actual PCM playback device.
snd_pcm_t* playback_handle_;
- scoped_ptr<Packet> packet_;
+ scoped_ptr<media::SeekableBuffer> buffer_;
uint32 frames_per_packet_;
// Used to check which message loop is allowed to call the public APIs.
« no previous file with comments | « no previous file | media/audio/linux/alsa_output.cc » ('j') | media/audio/linux/alsa_output_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698