diff options
author | dvdli <dvdli@google.com> | 2021-01-12 14:53:42 +0800 |
---|---|---|
committer | dvdli <dvdli@google.com> | 2021-01-12 15:55:49 +0800 |
commit | 855354a87d2983e190088bc5330c129094b900ca (patch) | |
tree | 40c092f7c992e9c6f83edcaf41e9cb0706698890 | |
parent | 565fc0e3da9bf0ccea99eb4386a4890cdba56134 (diff) |
remove pcm_prepare in pcm_open
For the dynamic pcm device, it is valid to specify the backend after
opening it. However, it is invalid to call prepare on a dynamic pcm
device without connecting any backend device. We should not do
pcm_prepare in pcm_open.
See also: Issue #197
-rw-r--r-- | examples/pcm-readi.c | 1 | ||||
-rw-r--r-- | examples/pcm-writei.c | 1 | ||||
-rw-r--r-- | src/pcm.c | 4 | ||||
-rw-r--r-- | tests/src/pcm_in_test.cc | 1 | ||||
-rw-r--r-- | tests/src/pcm_loopback_test.cc | 2 | ||||
-rw-r--r-- | tests/src/pcm_out_test.cc | 2 | ||||
-rw-r--r-- | utils/tinycap.c | 1 | ||||
-rw-r--r-- | utils/tinyplay.c | 1 |
8 files changed, 9 insertions, 4 deletions
diff --git a/examples/pcm-readi.c b/examples/pcm-readi.c index 8722b41..dc18b63 100644 --- a/examples/pcm-readi.c +++ b/examples/pcm-readi.c @@ -29,6 +29,7 @@ static size_t read_frames(void **frames) fprintf(stderr, "failed to open PCM\n"); return 0; } + pcm_prepare(pcm); unsigned int frame_size = pcm_frames_to_bytes(pcm, 1); unsigned int frames_per_sec = pcm_get_rate(pcm); diff --git a/examples/pcm-writei.c b/examples/pcm-writei.c index 19eafac..46b1a3d 100644 --- a/examples/pcm-writei.c +++ b/examples/pcm-writei.c @@ -70,6 +70,7 @@ static int write_frames(const void * frames, size_t byte_count){ fprintf(stderr, "failed to open PCM\n"); return -1; } + pcm_prepare(pcm); unsigned int frame_count = pcm_bytes_to_frames(pcm, byte_count); @@ -1101,10 +1101,6 @@ struct pcm *pcm_open(unsigned int card, unsigned int device, } #endif - /* prepare here so the user does not need to do this later */ - if (pcm_prepare(pcm)) - goto fail; - pcm->xruns = 0; return pcm; diff --git a/tests/src/pcm_in_test.cc b/tests/src/pcm_in_test.cc index e912abb..5491b00 100644 --- a/tests/src/pcm_in_test.cc +++ b/tests/src/pcm_in_test.cc @@ -47,6 +47,7 @@ class PcmInTest : public ::testing::Test { pcm_object = pcm_open(kLoopbackCard, kLoopbackCaptureDevice, PCM_IN, &kDefaultConfig); ASSERT_NE(pcm_object, nullptr); ASSERT_TRUE(pcm_is_ready(pcm_object)); + pcm_prepare(pcm_object); } virtual void TearDown() override { diff --git a/tests/src/pcm_loopback_test.cc b/tests/src/pcm_loopback_test.cc index 6a3ffb8..9685364 100644 --- a/tests/src/pcm_loopback_test.cc +++ b/tests/src/pcm_loopback_test.cc @@ -160,6 +160,7 @@ TEST(PcmLoopbackTest, LoopbackS16le) { }; pcm *pcm_in = pcm_open(kLoopbackCard, kLoopbackCaptureDevice, PCM_IN, &kInConfig); ASSERT_TRUE(pcm_is_ready(pcm_in)); + pcm_prepare(pcm_in); static constexpr pcm_config kOutConfig = { .channels = kDefaultChannels, @@ -174,6 +175,7 @@ TEST(PcmLoopbackTest, LoopbackS16le) { }; pcm *pcm_out = pcm_open(kLoopbackCard, kLoopbackPlaybackDevice, PCM_OUT, &kOutConfig); ASSERT_TRUE(pcm_is_ready(pcm_out)); + pcm_prepare(pcm_out); ASSERT_EQ(pcm_link(pcm_in, pcm_out), 0); diff --git a/tests/src/pcm_out_test.cc b/tests/src/pcm_out_test.cc index cbc6983..ca984a6 100644 --- a/tests/src/pcm_out_test.cc +++ b/tests/src/pcm_out_test.cc @@ -47,6 +47,7 @@ class PcmOutTest : public ::testing::Test { pcm_object = pcm_open(kLoopbackCard, kLoopbackPlaybackDevice, PCM_OUT, &kDefaultConfig); ASSERT_NE(pcm_object, nullptr); ASSERT_TRUE(pcm_is_ready(pcm_object)); + pcm_prepare(pcm_object); } virtual void TearDown() override { @@ -176,6 +177,7 @@ class PcmOutMmapTest : public PcmOutTest { &kDefaultConfig); ASSERT_NE(pcm_object, nullptr); ASSERT_TRUE(pcm_is_ready(pcm_object)); + pcm_prepare(pcm_object); } virtual void TearDown() override { diff --git a/utils/tinycap.c b/utils/tinycap.c index 7d4b8a4..e3aa9df 100644 --- a/utils/tinycap.c +++ b/utils/tinycap.c @@ -231,6 +231,7 @@ unsigned int capture_sample(FILE *file, unsigned int card, unsigned int device, pcm_get_error(pcm)); return 0; } + pcm_prepare(pcm); size = pcm_frames_to_bytes(pcm, pcm_get_buffer_size(pcm)); buffer = malloc(size); diff --git a/utils/tinyplay.c b/utils/tinyplay.c index 2689158..482ad24 100644 --- a/utils/tinyplay.c +++ b/utils/tinyplay.c @@ -192,6 +192,7 @@ int ctx_init(struct ctx* ctx, const struct cmd *cmd) pcm_close(ctx->pcm); return -1; } + pcm_prepare(ctx->pcm); return 0; } |