|
|
|
@ -29,6 +29,11 @@
|
|
|
|
|
#include <kconfig.h>
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
|
|
|
|
|
|
#if !defined FLAC_API_VERSION_CURRENT || FLAC_API_VERSION_CURRENT < 8
|
|
|
|
|
#define LEGACY_FLAC
|
|
|
|
|
#else
|
|
|
|
|
#undef LEGACY_FLAC
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
@ -47,7 +52,11 @@ public:
|
|
|
|
|
unsigned long data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#ifdef LEGACY_FLAC
|
|
|
|
|
static FLAC__StreamEncoderWriteStatus WriteCallback(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data)
|
|
|
|
|
#else
|
|
|
|
|
static FLAC__StreamEncoderWriteStatus WriteCallback(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data)
|
|
|
|
|
#endif
|
|
|
|
|
{
|
|
|
|
|
EncoderFLAC::Private *d = (EncoderFLAC::Private*)client_data;
|
|
|
|
|
|
|
|
|
@ -109,9 +118,11 @@ unsigned long EncoderFLAC::size(long time_secs) const {
|
|
|
|
|
long EncoderFLAC::readInit(long size) {
|
|
|
|
|
kdDebug(7117) << "EncoderFLAC::readInit() called"<< endl;
|
|
|
|
|
d->data = 0;
|
|
|
|
|
#ifdef LEGACY_FLAC
|
|
|
|
|
FLAC__stream_encoder_set_write_callback(d->encoder, WriteCallback);
|
|
|
|
|
FLAC__stream_encoder_set_metadata_callback(d->encoder, MetadataCallback);
|
|
|
|
|
FLAC__stream_encoder_set_client_data(d->encoder, d);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// The options match approximely those of flac compression-level-3
|
|
|
|
|
FLAC__stream_encoder_set_do_mid_side_stereo(d->encoder, true);
|
|
|
|
@ -124,7 +135,13 @@ long EncoderFLAC::readInit(long size) {
|
|
|
|
|
if (size > 0)
|
|
|
|
|
FLAC__stream_encoder_set_total_samples_estimate(d->encoder, size/4);
|
|
|
|
|
|
|
|
|
|
FLAC__stream_encoder_init(d->encoder);
|
|
|
|
|
#ifdef LEGACY_FLAC
|
|
|
|
|
if(FLAC__stream_encoder_init(d->encoder) != FLAC__STREAM_ENCODER_OK)
|
|
|
|
|
; // really should handle an init failure
|
|
|
|
|
#else
|
|
|
|
|
if(FLAC__stream_encoder_init_stream(d->encoder, WriteCallback, NULL, NULL, MetadataCallback, d) != FLAC__STREAM_ENCODER_INIT_STATUS_OK)
|
|
|
|
|
; // really should handle an init failure
|
|
|
|
|
#endif
|
|
|
|
|
return d->data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|