You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.0 KiB

#include <stddef.h>
#include <stdio.h>
#include "oi_codec_sbc.h"
#define CODEC_DATA_WORDS(numChannels, numBuffers) \
(((sizeof(int32_t) * SBC_MAX_BLOCKS * (numChannels)*SBC_MAX_BANDS) + \
(sizeof(SBC_BUFFER_T) * SBC_MAX_CHANNELS * SBC_MAX_BANDS * (numBuffers)) + \
(sizeof(uint32_t) - 1)) / \
sizeof(uint32_t))
#define SBC_CODEC_FAST_FILTER_BUFFERS 27
#define SBC_MAX_CHANNELS 2
#define SBC_MAX_BANDS 8
#define SBC_MAX_BLOCKS 16
/* Minimum size of the bit allocation pool used to encode the stream */
#define SBC_MIN_BITPOOL 2
/* Maximum size of the bit allocation pool used to encode the stream */
#define SBC_MAX_BITPOOL 250
#define SBC_MAX_ONE_CHANNEL_BPS 320000
#define SBC_MAX_TWO_CHANNEL_BPS 512000
#define SBC_WBS_BITRATE 62000
#define SBC_WBS_BITPOOL 27
#define SBC_WBS_NROF_BLOCKS 16
#define SBC_WBS_FRAME_LEN 62
#define SBC_WBS_SAMPLES_PER_FRAME 128
#define SBC_HEADER_LEN 4
#define SBC_MAX_SAMPLES_PER_FRAME (SBC_MAX_BANDS * SBC_MAX_BLOCKS)
static OI_CODEC_SBC_DECODER_CONTEXT btif_a2dp_sink_context;
static uint32_t btif_a2dp_sink_context_data[CODEC_DATA_WORDS(
2, SBC_CODEC_FAST_FILTER_BUFFERS)];
static int16_t
btif_a2dp_sink_pcm_data[15 * SBC_MAX_SAMPLES_PER_FRAME * SBC_MAX_CHANNELS];
int LLVMFuzzerInitialize(int argc, char** argv) {
(void)argc;
(void)argv;
OI_CODEC_SBC_DecoderReset(&btif_a2dp_sink_context,
btif_a2dp_sink_context_data,
sizeof(btif_a2dp_sink_context_data), 2, 2, 0);
return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len) {
uint32_t pcmBytes, availPcmBytes;
int16_t* pcmDataPointer =
btif_a2dp_sink_pcm_data; /* Will be overwritten on next packet receipt */
availPcmBytes = sizeof(btif_a2dp_sink_pcm_data);
pcmBytes = availPcmBytes;
OI_CODEC_SBC_DecodeFrame(&btif_a2dp_sink_context, (const OI_BYTE**)&buf,
(uint32_t*)&len, (int16_t*)pcmDataPointer,
(uint32_t*)&pcmBytes);
return 0;
}