Set the stream delay to zero if too low.

- Return a stream warning instead of an error.
- Add a few delay offset tests.

BUG=
TEST=audioproc_unittest

Review URL: https://webrtc-codereview.appspot.com/607004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2316 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andrew@webrtc.org 2012-05-29 21:14:06 +00:00
parent 2fc6e388c0
commit 5f23d64cf2
2 changed files with 18 additions and 6 deletions

View File

@ -450,21 +450,23 @@ int AudioProcessingImpl::AnalyzeReverseStream(AudioFrame* frame) {
} }
int AudioProcessingImpl::set_stream_delay_ms(int delay) { int AudioProcessingImpl::set_stream_delay_ms(int delay) {
Error retval = kNoError;
was_stream_delay_set_ = true; was_stream_delay_set_ = true;
delay += delay_offset_ms_; delay += delay_offset_ms_;
if (delay < 0) { if (delay < 0) {
return kBadParameterError; delay = 0;
retval = kBadStreamParameterWarning;
} }
// TODO(ajm): the max is rather arbitrarily chosen; investigate. // TODO(ajm): the max is rather arbitrarily chosen; investigate.
if (delay > 500) { if (delay > 500) {
stream_delay_ms_ = 500; delay = 500;
return kBadStreamParameterWarning; retval = kBadStreamParameterWarning;
} }
stream_delay_ms_ = delay; stream_delay_ms_ = delay;
return kNoError; return retval;
} }
int AudioProcessingImpl::stream_delay_ms() const { int AudioProcessingImpl::stream_delay_ms() const {

View File

@ -606,16 +606,26 @@ TEST_F(ApmTest, StreamParameters) {
EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_)); EXPECT_EQ(apm_->kNoError, apm_->ProcessStream(frame_));
} }
TEST_F(ApmTest, DelayOffset) { TEST_F(ApmTest, DefaultDelayOffsetIsZero) {
EXPECT_EQ(0, apm_->delay_offset_ms());
EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(50));
EXPECT_EQ(50, apm_->stream_delay_ms());
}
TEST_F(ApmTest, DelayOffsetWithLimitsIsSetProperly) {
// High limit of 500 ms.
apm_->set_delay_offset_ms(100); apm_->set_delay_offset_ms(100);
EXPECT_EQ(100, apm_->delay_offset_ms()); EXPECT_EQ(100, apm_->delay_offset_ms());
EXPECT_EQ(apm_->kBadStreamParameterWarning, apm_->set_stream_delay_ms(450)); EXPECT_EQ(apm_->kBadStreamParameterWarning, apm_->set_stream_delay_ms(450));
EXPECT_EQ(500, apm_->stream_delay_ms());
EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(100)); EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(100));
EXPECT_EQ(200, apm_->stream_delay_ms()); EXPECT_EQ(200, apm_->stream_delay_ms());
// Low limit of 0 ms.
apm_->set_delay_offset_ms(-50); apm_->set_delay_offset_ms(-50);
EXPECT_EQ(-50, apm_->delay_offset_ms()); EXPECT_EQ(-50, apm_->delay_offset_ms());
EXPECT_EQ(apm_->kBadParameterError, apm_->set_stream_delay_ms(20)); EXPECT_EQ(apm_->kBadStreamParameterWarning, apm_->set_stream_delay_ms(20));
EXPECT_EQ(0, apm_->stream_delay_ms());
EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(100)); EXPECT_EQ(apm_->kNoError, apm_->set_stream_delay_ms(100));
EXPECT_EQ(50, apm_->stream_delay_ms()); EXPECT_EQ(50, apm_->stream_delay_ms());
} }