diff options
author | dvdli <dvdli@google.com> | 2021-01-28 15:03:17 +0800 |
---|---|---|
committer | dvdli <dvdli@google.com> | 2021-01-28 15:14:34 +0800 |
commit | 3694925022aa16b10978c92b9a2a69661dbbcdcf (patch) | |
tree | 9394851d20a337e98081bbc3379f61531d6fbe76 | |
parent | c0f924738de2b8f5478e8b454b4ad5521802f3f6 (diff) |
Let pcm_mmap_read/write call pcm_readi/writei
The pcm_readi and pcm_writei also can deal with the mmap read/write.
Also mark the pcm_mmap_read/write functions as deprecated functions and
update the test case.
Add mmap playback support to tinyplay
-rw-r--r-- | include/tinyalsa/pcm.h | 4 | ||||
-rw-r--r-- | src/pcm.c | 8 | ||||
-rw-r--r-- | tests/src/pcm_out_test.cc | 6 | ||||
-rw-r--r-- | utils/tinyplay.c | 3 |
4 files changed, 12 insertions, 9 deletions
diff --git a/include/tinyalsa/pcm.h b/include/tinyalsa/pcm.h index 6569146..b40550c 100644 --- a/include/tinyalsa/pcm.h +++ b/include/tinyalsa/pcm.h @@ -335,9 +335,9 @@ int pcm_write(struct pcm *pcm, const void *data, unsigned int count) TINYALSA_DE int pcm_read(struct pcm *pcm, void *data, unsigned int count) TINYALSA_DEPRECATED; -int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count); +int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count) TINYALSA_DEPRECATED; -int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count); +int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count) TINYALSA_DEPRECATED; int pcm_mmap_begin(struct pcm *pcm, void **areas, unsigned int *offset, unsigned int *frames); @@ -1547,10 +1547,10 @@ int pcm_mmap_transfer(struct pcm *pcm, void *buffer, unsigned int frames) int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count) { if ((~pcm->flags) & (PCM_OUT | PCM_MMAP)) - return -ENOSYS; + return -EINVAL; unsigned int frames = pcm_bytes_to_frames(pcm, count); - int res = pcm_mmap_transfer(pcm, (void *) data, frames); + int res = pcm_writei(pcm, (void *) data, frames); if (res < 0) { return res; @@ -1562,10 +1562,10 @@ int pcm_mmap_write(struct pcm *pcm, const void *data, unsigned int count) int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count) { if ((~pcm->flags) & (PCM_IN | PCM_MMAP)) - return -ENOSYS; + return -EINVAL; unsigned int frames = pcm_bytes_to_frames(pcm, count); - int res = pcm_mmap_transfer(pcm, data, frames); + int res = pcm_readi(pcm, data, frames); if (res < 0) { return res; diff --git a/tests/src/pcm_out_test.cc b/tests/src/pcm_out_test.cc index cbc6983..f8d4345 100644 --- a/tests/src/pcm_out_test.cc +++ b/tests/src/pcm_out_test.cc @@ -192,13 +192,13 @@ TEST_F(PcmOutMmapTest, Write) { buffer[i] = static_cast<char>(i); } - int written_frames = 0; + int res = 0; unsigned int frames = pcm_bytes_to_frames(pcm_object, buffer_size); pcm_start(pcm_object); auto start = std::chrono::steady_clock::now(); for (uint32_t i = 0; i < write_count; ++i) { - written_frames = pcm_mmap_write(pcm_object, buffer.get(), buffer_size); - ASSERT_EQ(written_frames, frames); + res = pcm_mmap_write(pcm_object, buffer.get(), buffer_size); + ASSERT_EQ(res, 0); } pcm_stop(pcm_object); diff --git a/utils/tinyplay.c b/utils/tinyplay.c index 2689158..4c7ccf6 100644 --- a/utils/tinyplay.c +++ b/utils/tinyplay.c @@ -303,6 +303,9 @@ int main(int argc, char **argv) case 'i': cmd.filetype = opts.optarg; break; + case 'M': + cmd.flags |= PCM_MMAP; + break; case 'h': print_usage(argv[0]); return EXIT_SUCCESS; |