goflac/callbacks.c
DataHoarder 3057bde44c
All checks were successful
continuous-integration/drone/push Build is passing
Implement read callbacks for encoder
2022-04-17 20:18:02 +02:00

120 lines
3.1 KiB
C

#include "FLAC/stream_decoder.h"
#include "FLAC/stream_encoder.h"
#include "_cgo_export.h"
void
decoderErrorCallback_cgo(const FLAC__StreamDecoder *decoder,
FLAC__StreamDecoderErrorStatus status,
void *data)
{
decoderErrorCallback((FLAC__StreamDecoder *)decoder, status, data);
}
void
decoderMetadataCallback_cgo(const FLAC__StreamDecoder *decoder,
const FLAC__StreamMetadata *metadata,
void *data)
{
decoderMetadataCallback((FLAC__StreamDecoder *)decoder,
(FLAC__StreamMetadata *)metadata, data);
}
FLAC__StreamDecoderWriteStatus
decoderWriteCallback_cgo(const FLAC__StreamDecoder *decoder,
const FLAC__Frame *frame,
const FLAC__int32 **buffer,
void *data)
{
return decoderWriteCallback((FLAC__StreamDecoder *)decoder,
(FLAC__Frame *)frame,
(FLAC__int32 **)buffer, data);
}
FLAC__StreamDecoderReadStatus
decoderReadCallback_cgo(const FLAC__StreamDecoder *decoder,
const FLAC__byte buffer[],
size_t *bytes,
void *data)
{
return decoderReadCallback((FLAC__StreamDecoder *)decoder,
(FLAC__byte *)buffer,
bytes, data);
}
FLAC__StreamEncoderReadStatus
encoderReadCallback_cgo(const FLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
size_t *bytes,
void *data)
{
return encoderReadCallback((FLAC__StreamEncoder *)encoder,
(FLAC__byte *)buffer, bytes, data);
}
FLAC__StreamEncoderWriteStatus
encoderWriteCallback_cgo(const FLAC__StreamEncoder *encoder,
const FLAC__byte buffer[],
size_t bytes, unsigned samples,
unsigned current_frame,
void *data)
{
return encoderWriteCallback((FLAC__StreamEncoder *)encoder,
(FLAC__byte *)buffer, bytes, samples,
current_frame, data);
}
FLAC__StreamEncoderSeekStatus
encoderSeekCallback_cgo(const FLAC__StreamEncoder *encoder,
FLAC__uint64 absolute_byte_offset,
void *data)
{
return encoderSeekCallback((FLAC__StreamEncoder *)encoder,
absolute_byte_offset, data);
}
FLAC__StreamEncoderTellStatus
encoderTellCallback_cgo(const FLAC__StreamEncoder *encoder,
FLAC__uint64 *absolute_byte_offset,
void *data)
{
return encoderTellCallback((FLAC__StreamEncoder *)encoder,
absolute_byte_offset, data);
}
extern const char *
get_decoder_error_str(FLAC__StreamDecoderErrorStatus status)
{
return FLAC__StreamDecoderErrorStatusString[status];
}
extern int
get_decoder_channels(FLAC__StreamMetadata *metadata)
{
return metadata->data.stream_info.channels;
}
extern int
get_decoder_depth(FLAC__StreamMetadata *metadata)
{
return metadata->data.stream_info.bits_per_sample;
}
extern int
get_decoder_rate(FLAC__StreamMetadata *metadata)
{
return metadata->data.stream_info.sample_rate;
}
extern void
get_audio_samples(int32_t *output, const FLAC__int32 **input,
unsigned int blocksize, unsigned int channels)
{
unsigned int i, j, samples = blocksize * channels;
for (i = 0; i < blocksize; i++)
for (j = 0; j < channels; j++)
output[i * channels + j] = input[j][i];
}