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;
}
if (WebRtc_CreateBuffer(&aec->nearFrBuf,
FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) {
aec->nearFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t));
if (!aec->nearFrBuf) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
if (WebRtc_CreateBuffer(&aec->outFrBuf,
FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) {
aec->outFrBuf = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t));
if (!aec->outFrBuf) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
if (WebRtc_CreateBuffer(&aec->nearFrBufH,
FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) {
aec->nearFrBufH = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t));
if (!aec->nearFrBufH) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
if (WebRtc_CreateBuffer(&aec->outFrBufH,
FRAME_LEN + PART_LEN,
sizeof(int16_t)) == -1) {
aec->outFrBufH = WebRtc_CreateBuffer(FRAME_LEN + PART_LEN,
sizeof(int16_t));
if (!aec->outFrBufH) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
// Create far-end buffers.
if (WebRtc_CreateBuffer(&aec->far_buf, kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1) == -1) {
aec->far_buf = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1);
if (!aec->far_buf) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
if (WebRtc_CreateBuffer(&aec->far_buf_windowed, kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1) == -1) {
aec->far_buf_windowed = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(float) * 2 * PART_LEN1);
if (!aec->far_buf_windowed) {
WebRtcAec_FreeAec(aec);
aec = NULL;
return -1;
}
#ifdef WEBRTC_AEC_DEBUG_DUMP
if (WebRtc_CreateBuffer(&aec->far_time_buf, kBufSizePartitions,
sizeof(int16_t) * PART_LEN) == -1) {
aec->far_time_buf = WebRtc_CreateBuffer(kBufSizePartitions,
sizeof(int16_t) * PART_LEN);
if (!aec->far_time_buf) {
WebRtcAec_FreeAec(aec);
aec = NULL;
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
// largest possible drift compensation (kResamplerBufferSize) + "almost" an
// FFT buffer (PART_LEN2 - 1).
if (WebRtc_CreateBuffer(&aecpc->far_pre_buf,
PART_LEN2 + kResamplerBufferSize,
sizeof(float)) == -1) {
aecpc->far_pre_buf = WebRtc_CreateBuffer(PART_LEN2 + kResamplerBufferSize,
sizeof(float));
if (!aecpc->far_pre_buf) {
WebRtcAec_Free(aecpc);
aecpc = NULL;
return -1;
@ -84,9 +84,9 @@ WebRtc_Word32 WebRtcAec_Create(void **aecInst)
aecpc->lastError = 0;
#ifdef WEBRTC_AEC_DEBUG_DUMP
if (WebRtc_CreateBuffer(&aecpc->far_pre_buf_s16,
PART_LEN2 + kResamplerBufferSize,
sizeof(int16_t)) == -1) {
aecpc->far_pre_buf_s16 = WebRtc_CreateBuffer(
PART_LEN2 + kResamplerBufferSize, sizeof(float));
if (!aecpc->far_pre_buf_s16) {
WebRtcAec_Free(aecpc);
aecpc = NULL;
return -1;

View File

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

View File

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

View File

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

View File

@ -18,9 +18,8 @@
typedef struct RingBuffer RingBuffer;
int WebRtc_CreateBuffer(RingBuffer** handle,
size_t element_count,
size_t element_size);
// Returns NULL on failure.
RingBuffer* WebRtc_CreateBuffer(size_t element_count, size_t element_size);
int WebRtc_InitBuffer(RingBuffer* 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);
scoped_array<int> write_data(new int[buffer_size]);
scoped_array<int> read_data(new int[buffer_size]);
scoped_ring_buffer buffer;
ASSERT_EQ(0, WebRtc_CreateBuffer(buffer.accept(), buffer_size,
sizeof(int)));
scoped_ring_buffer buffer(WebRtc_CreateBuffer(buffer_size, sizeof(int)));
ASSERT_TRUE(buffer.get() != NULL);
ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get()));
int buffer_consumed = 0;
int write_element = 0;
@ -112,13 +111,13 @@ TEST(RingBufferTest, RandomStressTestWithNullPtr) {
}
TEST(RingBufferTest, PassingNulltoReadBufferForcesMemcpy) {
scoped_ring_buffer buffer;
const size_t kDataSize = 2;
int write_data[kDataSize];
int read_data[kDataSize];
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()));
SetIncrementingData(write_data, kDataSize, 0);
@ -137,4 +136,12 @@ TEST(RingBufferTest, PassingNulltoReadBufferForcesMemcpy) {
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