mirror of
https://github.com/openharmony/third_party_tinyalsa.git
synced 2026-07-19 15:24:22 -04:00
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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user