util/DynamicFifoBuffer: new class replacing growing_fifo
This commit is contained in:
@@ -23,15 +23,10 @@
|
||||
#include "AudioFormat.hxx"
|
||||
#include "pcm/PcmBuffer.hxx"
|
||||
#include "ConfigError.hxx"
|
||||
#include "util/Manual.hxx"
|
||||
#include "util/DynamicFifoBuffer.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
#include "util/fifo_buffer.h"
|
||||
|
||||
extern "C" {
|
||||
#include "util/growing_fifo.h"
|
||||
}
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <FLAC/stream_encoder.h>
|
||||
|
||||
@@ -53,7 +48,7 @@ struct flac_encoder {
|
||||
* This buffer will hold encoded data from libFLAC until it is
|
||||
* picked up with flac_encoder_read().
|
||||
*/
|
||||
struct fifo_buffer *output_buffer;
|
||||
Manual<DynamicFifoBuffer<uint8_t>> output_buffer;
|
||||
|
||||
flac_encoder():encoder(flac_encoder_plugin) {}
|
||||
};
|
||||
@@ -140,7 +135,7 @@ flac_write_callback(gcc_unused const FLAC__StreamEncoder *fse,
|
||||
struct flac_encoder *encoder = (struct flac_encoder *) client_data;
|
||||
|
||||
//transfer data to buffer
|
||||
growing_fifo_append(&encoder->output_buffer, data, bytes);
|
||||
encoder->output_buffer->Append((const uint8_t *)data, bytes);
|
||||
|
||||
return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
|
||||
}
|
||||
@@ -153,7 +148,7 @@ flac_encoder_close(Encoder *_encoder)
|
||||
FLAC__stream_encoder_delete(encoder->fse);
|
||||
|
||||
encoder->expand_buffer.Clear();
|
||||
fifo_buffer_free(encoder->output_buffer);
|
||||
encoder->output_buffer.Destruct();
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -195,7 +190,7 @@ flac_encoder_open(Encoder *_encoder, AudioFormat &audio_format, Error &error)
|
||||
return false;
|
||||
}
|
||||
|
||||
encoder->output_buffer = growing_fifo_new();
|
||||
encoder->output_buffer.Construct(8192);
|
||||
|
||||
/* this immediately outputs data through callback */
|
||||
|
||||
@@ -304,18 +299,7 @@ flac_encoder_read(Encoder *_encoder, void *dest, size_t length)
|
||||
{
|
||||
struct flac_encoder *encoder = (struct flac_encoder *)_encoder;
|
||||
|
||||
size_t max_length;
|
||||
const char *src = (const char *)
|
||||
fifo_buffer_read(encoder->output_buffer, &max_length);
|
||||
if (src == nullptr)
|
||||
return 0;
|
||||
|
||||
if (length > max_length)
|
||||
length = max_length;
|
||||
|
||||
memcpy(dest, src, length);
|
||||
fifo_buffer_consume(encoder->output_buffer, length);
|
||||
return length;
|
||||
return encoder->output_buffer->Read((uint8_t *)dest, length);
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
@@ -20,21 +20,19 @@
|
||||
#include "config.h"
|
||||
#include "NullEncoderPlugin.hxx"
|
||||
#include "EncoderAPI.hxx"
|
||||
#include "util/fifo_buffer.h"
|
||||
extern "C" {
|
||||
#include "util/growing_fifo.h"
|
||||
}
|
||||
#include "util/Manual.hxx"
|
||||
#include "util/DynamicFifoBuffer.hxx"
|
||||
#include "Compiler.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
struct NullEncoder final {
|
||||
Encoder encoder;
|
||||
|
||||
struct fifo_buffer *buffer;
|
||||
Manual<DynamicFifoBuffer<uint8_t>> buffer;
|
||||
|
||||
NullEncoder():encoder(null_encoder_plugin) {}
|
||||
NullEncoder()
|
||||
:encoder(null_encoder_plugin) {}
|
||||
};
|
||||
|
||||
static Encoder *
|
||||
@@ -58,7 +56,7 @@ null_encoder_close(Encoder *_encoder)
|
||||
{
|
||||
NullEncoder *encoder = (NullEncoder *)_encoder;
|
||||
|
||||
fifo_buffer_free(encoder->buffer);
|
||||
encoder->buffer.Destruct();
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +66,7 @@ null_encoder_open(Encoder *_encoder,
|
||||
gcc_unused Error &error)
|
||||
{
|
||||
NullEncoder *encoder = (NullEncoder *)_encoder;
|
||||
encoder->buffer = growing_fifo_new();
|
||||
encoder->buffer.Construct(8192);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -79,7 +77,7 @@ null_encoder_write(Encoder *_encoder,
|
||||
{
|
||||
NullEncoder *encoder = (NullEncoder *)_encoder;
|
||||
|
||||
growing_fifo_append(&encoder->buffer, data, length);
|
||||
encoder->buffer->Append((const uint8_t *)data, length);
|
||||
return length;
|
||||
}
|
||||
|
||||
@@ -88,17 +86,7 @@ null_encoder_read(Encoder *_encoder, void *dest, size_t length)
|
||||
{
|
||||
NullEncoder *encoder = (NullEncoder *)_encoder;
|
||||
|
||||
size_t max_length;
|
||||
const void *src = fifo_buffer_read(encoder->buffer, &max_length);
|
||||
if (src == nullptr)
|
||||
return 0;
|
||||
|
||||
if (length > max_length)
|
||||
length = max_length;
|
||||
|
||||
memcpy(dest, src, length);
|
||||
fifo_buffer_consume(encoder->buffer, length);
|
||||
return length;
|
||||
return encoder->buffer->Read((uint8_t *)dest, length);
|
||||
}
|
||||
|
||||
const EncoderPlugin null_encoder_plugin = {
|
||||
|
@@ -21,10 +21,8 @@
|
||||
#include "WaveEncoderPlugin.hxx"
|
||||
#include "EncoderAPI.hxx"
|
||||
#include "system/ByteOrder.hxx"
|
||||
#include "util/fifo_buffer.h"
|
||||
extern "C" {
|
||||
#include "util/growing_fifo.h"
|
||||
}
|
||||
#include "util/Manual.hxx"
|
||||
#include "util/DynamicFifoBuffer.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
@@ -33,7 +31,7 @@ struct WaveEncoder {
|
||||
Encoder encoder;
|
||||
unsigned bits;
|
||||
|
||||
struct fifo_buffer *buffer;
|
||||
Manual<DynamicFifoBuffer<uint8_t>> buffer;
|
||||
|
||||
WaveEncoder():encoder(wave_encoder_plugin) {}
|
||||
};
|
||||
@@ -128,9 +126,11 @@ wave_encoder_open(Encoder *_encoder,
|
||||
break;
|
||||
}
|
||||
|
||||
encoder->buffer = growing_fifo_new();
|
||||
wave_header *header = (wave_header *)
|
||||
growing_fifo_write(&encoder->buffer, sizeof(*header));
|
||||
encoder->buffer.Construct(8192);
|
||||
|
||||
auto range = encoder->buffer->Write();
|
||||
assert(range.size >= sizeof(wave_header));
|
||||
wave_header *header = (wave_header *)range.data;
|
||||
|
||||
/* create PCM wave header in initial buffer */
|
||||
fill_wave_header(header,
|
||||
@@ -138,7 +138,8 @@ wave_encoder_open(Encoder *_encoder,
|
||||
encoder->bits,
|
||||
audio_format.sample_rate,
|
||||
(encoder->bits / 8) * audio_format.channels);
|
||||
fifo_buffer_append(encoder->buffer, sizeof(*header));
|
||||
|
||||
encoder->buffer->Append(sizeof(*header));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -148,7 +149,7 @@ wave_encoder_close(Encoder *_encoder)
|
||||
{
|
||||
WaveEncoder *encoder = (WaveEncoder *)_encoder;
|
||||
|
||||
fifo_buffer_free(encoder->buffer);
|
||||
encoder->buffer.Destruct();
|
||||
}
|
||||
|
||||
static size_t
|
||||
@@ -198,7 +199,7 @@ wave_encoder_write(Encoder *_encoder,
|
||||
{
|
||||
WaveEncoder *encoder = (WaveEncoder *)_encoder;
|
||||
|
||||
uint8_t *dst = (uint8_t *)growing_fifo_write(&encoder->buffer, length);
|
||||
uint8_t *dst = encoder->buffer->Write(length);
|
||||
|
||||
if (IsLittleEndian()) {
|
||||
switch (encoder->bits) {
|
||||
@@ -230,7 +231,7 @@ wave_encoder_write(Encoder *_encoder,
|
||||
}
|
||||
}
|
||||
|
||||
fifo_buffer_append(encoder->buffer, length);
|
||||
encoder->buffer->Append(length);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -239,17 +240,7 @@ wave_encoder_read(Encoder *_encoder, void *dest, size_t length)
|
||||
{
|
||||
WaveEncoder *encoder = (WaveEncoder *)_encoder;
|
||||
|
||||
size_t max_length;
|
||||
const void *src = fifo_buffer_read(encoder->buffer, &max_length);
|
||||
if (src == NULL)
|
||||
return 0;
|
||||
|
||||
if (length > max_length)
|
||||
length = max_length;
|
||||
|
||||
memcpy(dest, src, length);
|
||||
fifo_buffer_consume(encoder->buffer, length);
|
||||
return length;
|
||||
return encoder->buffer->Read((uint8_t *)dest, length);
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
Reference in New Issue
Block a user