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
This commit is contained in:
dvdli
2021-01-12 14:53:42 +08:00
parent 88e2d3a438
commit a72d982b0d
8 changed files with 9 additions and 4 deletions
+1
View File
@@ -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);
+1
View File
@@ -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);
-4
View File
@@ -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;
+1
View File
@@ -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 {
+2
View File
@@ -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);
+2
View File
@@ -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 {
+1
View File
@@ -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);
+1
View File
@@ -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;
}