Refactor WebRtc_CreateBuffer to return the instance.

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3574 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andrew@webrtc.org 2013-02-27 00:35:06 +00:00
parent ff0cd88e3d
commit 91f325586d
7 changed files with 61 additions and 53 deletions

View File

@ -164,54 +164,57 @@ int WebRtcAec_CreateAec(AecCore** aecInst)
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aec->nearFrBuf, aec->nearFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
FRAME_LEN + PART_LEN, sizeof(int16_t));
sizeof(int16_t)) == -1) { if (!aec->nearFrBuf) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aec->outFrBuf, aec->outFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
FRAME_LEN + PART_LEN, sizeof(int16_t));
sizeof(int16_t)) == -1) { if (!aec->outFrBuf) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aec->nearFrBufH, aec->nearFrBufH = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
FRAME_LEN + PART_LEN, sizeof(int16_t));
sizeof(int16_t)) == -1) { if (!aec->nearFrBufH) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aec->outFrBufH, aec->outFrBufH = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
FRAME_LEN + PART_LEN, sizeof(int16_t));
sizeof(int16_t)) == -1) { if (!aec->outFrBufH) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
// Create far-end buffers. // Create far-end buffers.
if (WebRtc_CreateBuffer(&aec->far_buf, kBufSizePartitions, aec->far_buf = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1) == -1) { sizeof(float) * 2 * PART_LEN1);
if (!aec->far_buf) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aec->far_buf_windowed, kBufSizePartitions, aec->far_buf_windowed = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1) == -1) { sizeof(float) * 2 * PART_LEN1);
if (!aec->far_buf_windowed) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;
} }
#ifdef WEBRTC_AEC_DEBUG_DUMP #ifdef WEBRTC_AEC_DEBUG_DUMP
if (WebRtc_CreateBuffer(&aec->far_time_buf, kBufSizePartitions, aec->far_time_buf = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(int16_t) * PART_LEN) == -1) { sizeof(int16_t) * PART_LEN);
if (!aec->far_time_buf) {
WebRtcAec_FreeAec(aec); WebRtcAec_FreeAec(aec);
aec = NULL; aec = NULL;
return -1; return -1;

View File

@ -72,9 +72,9 @@ WebRtc_Word32 WebRtcAec_Create(void **aecInst)
// Create far-end pre-buffer. The buffer size has to be large enough for // Create far-end pre-buffer. The buffer size has to be large enough for
// largest possible drift compensation (kResamplerBufferSize) + "almost" an // largest possible drift compensation (kResamplerBufferSize) + "almost" an
// FFT buffer (PART_LEN2 - 1). // FFT buffer (PART_LEN2 - 1).
if (WebRtc_CreateBuffer(&aecpc->far_pre_buf, aecpc->far_pre_buf = WebRtc_CreateBuffer(PART_LEN2 + kResamplerBufferSize,
PART_LEN2 + kResamplerBufferSize, sizeof(float));
sizeof(float)) == -1) { if (!aecpc->far_pre_buf) {
WebRtcAec_Free(aecpc); WebRtcAec_Free(aecpc);
aecpc = NULL; aecpc = NULL;
return -1; return -1;
@ -84,9 +84,9 @@ WebRtc_Word32 WebRtcAec_Create(void **aecInst)
aecpc->lastError = 0; aecpc->lastError = 0;
#ifdef WEBRTC_AEC_DEBUG_DUMP #ifdef WEBRTC_AEC_DEBUG_DUMP
if (WebRtc_CreateBuffer(&aecpc->far_pre_buf_s16, aecpc->far_pre_buf_s16 = WebRtc_CreateBuffer(
PART_LEN2 + kResamplerBufferSize, PART_LEN2 + kResamplerBufferSize, sizeof(float));
sizeof(int16_t)) == -1) { if (!aecpc->far_pre_buf_s16) {
WebRtcAec_Free(aecpc); WebRtcAec_Free(aecpc);
aecpc = NULL; aecpc = NULL;
return -1; return -1;

View File

@ -256,32 +256,36 @@ int WebRtcAecm_CreateCore(AecmCore_t **aecmInst)
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aecm->farFrameBuf, FRAME_LEN + PART_LEN, aecm->farFrameBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) sizeof(int16_t));
if (!aecm->farFrameBuf)
{ {
WebRtcAecm_FreeCore(aecm); WebRtcAecm_FreeCore(aecm);
aecm = NULL; aecm = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aecm->nearNoisyFrameBuf, FRAME_LEN + PART_LEN, aecm->nearNoisyFrameBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) sizeof(int16_t));
if (!aecm->nearNoisyFrameBuf)
{ {
WebRtcAecm_FreeCore(aecm); WebRtcAecm_FreeCore(aecm);
aecm = NULL; aecm = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aecm->nearCleanFrameBuf, FRAME_LEN + PART_LEN, aecm->nearCleanFrameBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) sizeof(int16_t));
if (!aecm->nearCleanFrameBuf)
{ {
WebRtcAecm_FreeCore(aecm); WebRtcAecm_FreeCore(aecm);
aecm = NULL; aecm = NULL;
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aecm->outFrameBuf, FRAME_LEN + PART_LEN, aecm->outFrameBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) sizeof(int16_t));
if (!aecm->outFrameBuf)
{ {
WebRtcAecm_FreeCore(aecm); WebRtcAecm_FreeCore(aecm);
aecm = NULL; aecm = NULL;

View File

@ -102,8 +102,9 @@ WebRtc_Word32 WebRtcAecm_Create(void **aecmInst)
return -1; return -1;
} }
if (WebRtc_CreateBuffer(&aecm->farendBuf, kBufSizeSamp, aecm->farendBuf = WebRtc_CreateBuffer(kBufSizeSamp,
sizeof(int16_t)) == -1) sizeof(int16_t));
if (!aecm->farendBuf)
{ {
WebRtcAecm_Free(aecm); WebRtcAecm_Free(aecm);
aecm = NULL; aecm = NULL;

View File

@ -65,34 +65,28 @@ static size_t GetBufferReadRegions(RingBuffer* buf,
return read_elements; return read_elements;
} }
int WebRtc_CreateBuffer(RingBuffer** handle, RingBuffer* WebRtc_CreateBuffer(size_t element_count, size_t element_size) {
size_t element_count,
size_t element_size) {
RingBuffer* self = NULL; RingBuffer* self = NULL;
if (!handle) {
return -1;
}
if (element_count == 0 || element_size == 0) { if (element_count == 0 || element_size == 0) {
return -1; return NULL;
} }
self = malloc(sizeof(RingBuffer)); self = malloc(sizeof(RingBuffer));
if (!self) { if (!self) {
return -1; return NULL;
} }
*handle = self;
self->data = malloc(element_count * element_size); self->data = malloc(element_count * element_size);
if (!self->data) { if (!self->data) {
free(self); free(self);
self = NULL; self = NULL;
return -1; return NULL;
} }
self->element_count = element_count; self->element_count = element_count;
self->element_size = element_size; self->element_size = element_size;
return 0; return self;
} }
int WebRtc_InitBuffer(RingBuffer* self) { int WebRtc_InitBuffer(RingBuffer* self) {

View File

@ -18,9 +18,8 @@
typedef struct RingBuffer RingBuffer; typedef struct RingBuffer RingBuffer;
int WebRtc_CreateBuffer(RingBuffer** handle, // Returns NULL on failure.
size_t element_count, RingBuffer* WebRtc_CreateBuffer(size_t element_count, size_t element_size);
size_t element_size);
int WebRtc_InitBuffer(RingBuffer* handle); int WebRtc_InitBuffer(RingBuffer* handle);
void WebRtc_FreeBuffer(void* handle); void WebRtc_FreeBuffer(void* handle);

View File

@ -58,9 +58,8 @@ static void RandomStressTest(int** data_ptr) {
const int buffer_size = std::max(rand() % kMaxBufferSize, 1); const int buffer_size = std::max(rand() % kMaxBufferSize, 1);
scoped_array<int> write_data(new int[buffer_size]); scoped_array<int> write_data(new int[buffer_size]);
scoped_array<int> read_data(new int[buffer_size]); scoped_array<int> read_data(new int[buffer_size]);
scoped_ring_buffer buffer; scoped_ring_buffer buffer(WebRtc_CreateBuffer(buffer_size, sizeof(int)));
ASSERT_EQ(0, WebRtc_CreateBuffer(buffer.accept(), buffer_size, ASSERT_TRUE(buffer.get() != NULL);
sizeof(int)));
ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get())); ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get()));
int buffer_consumed = 0; int buffer_consumed = 0;
int write_element = 0; int write_element = 0;
@ -112,13 +111,13 @@ TEST(RingBufferTest, RandomStressTestWithNullPtr) {
} }
TEST(RingBufferTest, PassingNulltoReadBufferForcesMemcpy) { TEST(RingBufferTest, PassingNulltoReadBufferForcesMemcpy) {
scoped_ring_buffer buffer;
const size_t kDataSize = 2; const size_t kDataSize = 2;
int write_data[kDataSize]; int write_data[kDataSize];
int read_data[kDataSize]; int read_data[kDataSize];
int* data_ptr; int* data_ptr;
ASSERT_EQ(0, WebRtc_CreateBuffer(buffer.accept(), kDataSize, sizeof(int))); scoped_ring_buffer buffer(WebRtc_CreateBuffer(kDataSize, sizeof(int)));
ASSERT_TRUE(buffer.get() != NULL);
ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get())); ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get()));
SetIncrementingData(write_data, kDataSize, 0); SetIncrementingData(write_data, kDataSize, 0);
@ -137,4 +136,12 @@ TEST(RingBufferTest, PassingNulltoReadBufferForcesMemcpy) {
CheckIncrementingData(read_data, kDataSize, 0); CheckIncrementingData(read_data, kDataSize, 0);
} }
TEST(RingBufferTest, CreateHandlesErrors) {
EXPECT_TRUE(WebRtc_CreateBuffer(0, 1) == NULL);
EXPECT_TRUE(WebRtc_CreateBuffer(1, 0) == NULL);
RingBuffer* buffer = WebRtc_CreateBuffer(1, 1);
EXPECT_TRUE(buffer != NULL);
WebRtc_FreeBuffer(buffer);
}
} // namespace webrtc } // namespace webrtc