Skip to content

Commit 50805d9

Browse files
authored
feat: comprehensive buffer and period parameter methods (#137)
* feat: add get_periods_min and get_periods_max to HwParams * feat: add period and buffer time/size min, max, and get/set methods to HwParams
1 parent 12d0f02 commit 50805d9

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

src/pcm.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,49 @@ impl<'a> HwParams<'a> {
940940
acheck!(snd_pcm_hw_params_set_period_time_near((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
941941
}
942942

943+
pub fn set_period_size_min(&self, v: Frames, dir: ValueOr) -> Result<Frames> {
944+
let mut d = dir as c_int;
945+
let mut r = v as alsa::snd_pcm_uframes_t;
946+
acheck!(snd_pcm_hw_params_set_period_size_min((self.1).0, self.0, &mut r, &mut d)).map(|_| r as Frames)
947+
}
948+
949+
pub fn set_period_size_max(&self, v: Frames, dir: ValueOr) -> Result<Frames> {
950+
let mut d = dir as c_int;
951+
let mut r = v as alsa::snd_pcm_uframes_t;
952+
acheck!(snd_pcm_hw_params_set_period_size_max((self.1).0, self.0, &mut r, &mut d)).map(|_| r as Frames)
953+
}
954+
955+
pub fn set_period_time(&self, v: u32, dir: ValueOr) -> Result<()> {
956+
acheck!(snd_pcm_hw_params_set_period_time((self.1).0, self.0, v as c_uint, dir as c_int)).map(|_| ())
957+
}
958+
959+
pub fn set_period_time_min(&self, v: u32, dir: ValueOr) -> Result<u32> {
960+
let mut d = dir as c_int;
961+
let mut r = v as c_uint;
962+
acheck!(snd_pcm_hw_params_set_period_time_min((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
963+
}
964+
965+
pub fn set_period_time_max(&self, v: u32, dir: ValueOr) -> Result<u32> {
966+
let mut d = dir as c_int;
967+
let mut r = v as c_uint;
968+
acheck!(snd_pcm_hw_params_set_period_time_max((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
969+
}
970+
971+
pub fn get_period_time(&self) -> Result<u32> {
972+
let (mut v, mut d) = (0,0);
973+
acheck!(snd_pcm_hw_params_get_period_time(self.0, &mut v, &mut d)).map(|_| v as u32)
974+
}
975+
976+
pub fn get_period_time_min(&self) -> Result<u32> {
977+
let (mut v, mut d) = (0,0);
978+
acheck!(snd_pcm_hw_params_get_period_time_min(self.0, &mut v, &mut d)).map(|_| v as u32)
979+
}
980+
981+
pub fn get_period_time_max(&self) -> Result<u32> {
982+
let (mut v, mut d) = (0,0);
983+
acheck!(snd_pcm_hw_params_get_period_time_max(self.0, &mut v, &mut d)).map(|_| v as u32)
984+
}
985+
943986
pub fn get_period_size(&self) -> Result<Frames> {
944987
let (mut v, mut d) = (0,0);
945988
acheck!(snd_pcm_hw_params_get_period_size(self.0, &mut v, &mut d)).map(|_| v as Frames)
@@ -955,15 +998,43 @@ impl<'a> HwParams<'a> {
955998
acheck!(snd_pcm_hw_params_get_period_size_max(self.0, &mut v, &mut d)).map(|_| v as Frames)
956999
}
9571000

1001+
pub fn set_periods_near(&self, v: u32, dir: ValueOr) -> Result<u32> {
1002+
let mut d = dir as c_int;
1003+
let mut r = v as c_uint;
1004+
acheck!(snd_pcm_hw_params_set_periods_near((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
1005+
}
1006+
9581007
pub fn set_periods(&self, v: u32, dir: ValueOr) -> Result<()> {
9591008
acheck!(snd_pcm_hw_params_set_periods((self.1).0, self.0, v as c_uint, dir as c_int)).map(|_| ())
9601009
}
9611010

1011+
pub fn set_periods_min(&self, v: u32, dir: ValueOr) -> Result<u32> {
1012+
let mut d = dir as c_int;
1013+
let mut r = v as c_uint;
1014+
acheck!(snd_pcm_hw_params_set_periods_min((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
1015+
}
1016+
1017+
pub fn set_periods_max(&self, v: u32, dir: ValueOr) -> Result<u32> {
1018+
let mut d = dir as c_int;
1019+
let mut r = v as c_uint;
1020+
acheck!(snd_pcm_hw_params_set_periods_max((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
1021+
}
1022+
9621023
pub fn get_periods(&self) -> Result<u32> {
9631024
let (mut v, mut d) = (0,0);
9641025
acheck!(snd_pcm_hw_params_get_periods(self.0, &mut v, &mut d)).map(|_| v as u32)
9651026
}
9661027

1028+
pub fn get_periods_min(&self) -> Result<u32> {
1029+
let (mut v, mut d) = (0,0);
1030+
acheck!(snd_pcm_hw_params_get_periods_min(self.0, &mut v, &mut d)).map(|_| v as u32)
1031+
}
1032+
1033+
pub fn get_periods_max(&self) -> Result<u32> {
1034+
let (mut v, mut d) = (0,0);
1035+
acheck!(snd_pcm_hw_params_get_periods_max(self.0, &mut v, &mut d)).map(|_| v as u32)
1036+
}
1037+
9671038
pub fn set_buffer_size_near(&self, v: Frames) -> Result<Frames> {
9681039
let mut r = v as alsa::snd_pcm_uframes_t;
9691040
acheck!(snd_pcm_hw_params_set_buffer_size_near((self.1).0, self.0, &mut r)).map(|_| r as Frames)
@@ -989,6 +1060,22 @@ impl<'a> HwParams<'a> {
9891060
acheck!(snd_pcm_hw_params_set_buffer_time_near((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
9901061
}
9911062

1063+
pub fn set_buffer_time(&self, v: u32, dir: ValueOr) -> Result<()> {
1064+
acheck!(snd_pcm_hw_params_set_buffer_time((self.1).0, self.0, v as c_uint, dir as c_int)).map(|_| ())
1065+
}
1066+
1067+
pub fn set_buffer_time_min(&self, v: u32, dir: ValueOr) -> Result<u32> {
1068+
let mut d = dir as c_int;
1069+
let mut r = v as c_uint;
1070+
acheck!(snd_pcm_hw_params_set_buffer_time_min((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
1071+
}
1072+
1073+
pub fn set_buffer_time_max(&self, v: u32, dir: ValueOr) -> Result<u32> {
1074+
let mut d = dir as c_int;
1075+
let mut r = v as c_uint;
1076+
acheck!(snd_pcm_hw_params_set_buffer_time_max((self.1).0, self.0, &mut r, &mut d)).map(|_| r as u32)
1077+
}
1078+
9921079
pub fn get_buffer_size(&self) -> Result<Frames> {
9931080
let mut v = 0;
9941081
acheck!(snd_pcm_hw_params_get_buffer_size(self.0, &mut v)).map(|_| v as Frames)
@@ -1004,6 +1091,11 @@ impl<'a> HwParams<'a> {
10041091
acheck!(snd_pcm_hw_params_get_buffer_size_max(self.0, &mut v)).map(|_| v as Frames)
10051092
}
10061093

1094+
pub fn get_buffer_time(&self) -> Result<u32> {
1095+
let (mut v, mut d) = (0,0);
1096+
acheck!(snd_pcm_hw_params_get_buffer_time(self.0, &mut v, &mut d)).map(|_| v as u32)
1097+
}
1098+
10071099
pub fn get_buffer_time_min(&self) -> Result<u32> {
10081100
let (mut v, mut d) = (0,0);
10091101
acheck!(snd_pcm_hw_params_get_buffer_time_min(self.0, &mut v, &mut d)).map(|_| v as u32)

0 commit comments

Comments
 (0)