blob: 95bd091c5a4aab421bfa1c56f1e0455b5043be69 [file] [log] [blame]
/* Copyright 2019 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <stdlib.h>
extern "C" {
#include "cras_audio_codec.h"
#include "sbc_codec_stub.h"
}
namespace {
static int create_fail;
static int create_called;
static int msbc_create_called;
static int destroy_called;
static uint8_t freq_val;
static uint8_t mode_val;
static uint8_t subbands_val;
static uint8_t alloc_val;
static uint8_t blocks_val;
static uint8_t bitpool_val;
static struct cras_audio_codec* sbc_codec;
static size_t decode_out_decoded_return_val;
static int decode_fail;
static size_t encode_out_encoded_return_val;
static int encode_fail;
static int cras_sbc_get_frame_length_val;
static int cras_sbc_get_codesize_val;
}; // namespace
void sbc_codec_stub_reset() {
create_fail = 0;
create_called = 0;
msbc_create_called = 0;
destroy_called = 0;
freq_val = 0;
mode_val = 0;
subbands_val = 0;
alloc_val = 0;
blocks_val = 0;
bitpool_val = 0;
sbc_codec = NULL;
decode_out_decoded_return_val = 0;
encode_out_encoded_return_val = 0;
decode_fail = 0;
encode_fail = 0;
cras_sbc_get_frame_length_val = 5;
cras_sbc_get_codesize_val = 5;
}
void set_sbc_codec_create_fail(int fail) {
create_fail = fail;
}
int get_sbc_codec_create_called() {
return create_called;
}
int get_msbc_codec_create_called() {
return msbc_create_called;
}
uint8_t get_sbc_codec_create_freq_val() {
return freq_val;
}
uint8_t get_sbc_codec_create_mode_val() {
return mode_val;
}
uint8_t get_sbc_codec_create_subbands_val() {
return subbands_val;
}
uint8_t get_sbc_codec_create_alloc_val() {
return alloc_val;
}
uint8_t get_sbc_codec_create_blocks_val() {
return blocks_val;
}
uint8_t get_sbc_codec_create_bitpool_val() {
return bitpool_val;
}
int get_sbc_codec_destroy_called() {
return destroy_called;
}
void set_sbc_codec_decoded_out(size_t ret) {
decode_out_decoded_return_val = ret;
}
void set_sbc_codec_decoded_fail(int fail) {
decode_fail = fail;
}
void set_sbc_codec_encoded_out(size_t ret) {
encode_out_encoded_return_val = ret;
}
void set_sbc_codec_encoded_fail(int fail) {
encode_fail = fail;
}
int decode(struct cras_audio_codec* codec,
const void* input,
size_t input_len,
void* output,
size_t output_len,
size_t* count) {
*count = decode_out_decoded_return_val;
return decode_fail ? -1 : input_len;
}
int encode(struct cras_audio_codec* codec,
const void* input,
size_t input_len,
void* output,
size_t output_len,
size_t* count) {
// Written half the output buffer.
*count = encode_out_encoded_return_val;
return encode_fail ? -1 : input_len;
}
struct cras_audio_codec* cras_sbc_codec_create(uint8_t freq,
uint8_t mode,
uint8_t subbands,
uint8_t alloc,
uint8_t blocks,
uint8_t bitpool) {
if (!create_fail) {
sbc_codec = (struct cras_audio_codec*)calloc(1, sizeof(*sbc_codec));
sbc_codec->decode = decode;
sbc_codec->encode = encode;
}
create_called++;
freq_val = freq;
mode_val = mode;
subbands_val = subbands;
alloc_val = alloc;
blocks_val = blocks;
bitpool_val = bitpool;
return sbc_codec;
}
struct cras_audio_codec* cras_msbc_codec_create() {
msbc_create_called++;
sbc_codec = (struct cras_audio_codec*)calloc(1, sizeof(*sbc_codec));
sbc_codec->decode = decode;
sbc_codec->encode = encode;
return sbc_codec;
}
void cras_sbc_codec_destroy(struct cras_audio_codec* codec) {
destroy_called++;
free(codec);
}
int cras_sbc_get_codesize(struct cras_audio_codec* codec) {
return cras_sbc_get_codesize_val;
}
int cras_sbc_get_frame_length(struct cras_audio_codec* codec) {
return cras_sbc_get_frame_length_val;
}