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:
parent
ff0cd88e3d
commit
91f325586d
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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) {
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user