mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 17:47:36 +00:00
Kernel: Allow higher audio sample rates than 65kHZ (u16
)
Executing `asctl set r 96000` no longer results in weird sample rates being set on the audio devices. SB16 checks for a sample rate between 1 and 44100 Hz, while AC97 implements double-rate support which allows sample rates between 8kHz and 96kHZ.
This commit is contained in:
parent
c349634967
commit
f97c9a5968
9 changed files with 56 additions and 28 deletions
|
@ -43,14 +43,20 @@ private:
|
|||
SetMasterOutputVolume = 0x02,
|
||||
SetPCMOutputVolume = 0x18,
|
||||
ExtendedAudioID = 0x28,
|
||||
ExtendedAudioStatusControl = 0x2a,
|
||||
PCMFrontDACRate = 0x2c,
|
||||
};
|
||||
|
||||
enum ExtendedAudioMask : u16 {
|
||||
VariableRatePCMAudio = 1 << 0,
|
||||
DoubleRatePCMAudio = 1 << 1,
|
||||
Revision = 3 << 10,
|
||||
};
|
||||
|
||||
enum ExtendedAudioStatusControlFlag : u16 {
|
||||
DoubleRateAudio = 1 << 1,
|
||||
};
|
||||
|
||||
enum AC97Revision : u8 {
|
||||
Revision21OrEarlier = 0b00,
|
||||
Revision22 = 0b01,
|
||||
|
@ -150,12 +156,13 @@ private:
|
|||
void initialize();
|
||||
void reset_pcm_out();
|
||||
void set_master_output_volume(u8, u8, Muted);
|
||||
void set_pcm_output_sample_rate(u16);
|
||||
ErrorOr<void> set_pcm_output_sample_rate(u32);
|
||||
void set_pcm_output_volume(u8, u8, Muted);
|
||||
ErrorOr<void> write_single_buffer(UserOrKernelBuffer const&, size_t, size_t);
|
||||
|
||||
OwnPtr<Memory::Region> m_buffer_descriptor_list;
|
||||
u8 m_buffer_descriptor_list_index = 0;
|
||||
bool m_double_rate_pcm_enabled = false;
|
||||
IOAddress m_io_mixer_base;
|
||||
IOAddress m_io_bus_base;
|
||||
WaitQueue m_irq_queue;
|
||||
|
@ -163,7 +170,7 @@ private:
|
|||
u8 m_output_buffer_page_count = 4;
|
||||
u8 m_output_buffer_page_index = 0;
|
||||
AC97Channel m_pcm_out_channel;
|
||||
u16 m_sample_rate = 44100;
|
||||
u32 m_sample_rate = 44100;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue