null_encoder: use pcm_buffer
This commit is contained in:
@@ -20,16 +20,15 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "encoder_api.h"
|
#include "encoder_api.h"
|
||||||
#include "encoder_plugin.h"
|
#include "encoder_plugin.h"
|
||||||
|
#include "pcm_buffer.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define MAX_BUFFER 32768
|
|
||||||
|
|
||||||
struct null_encoder {
|
struct null_encoder {
|
||||||
struct encoder encoder;
|
struct encoder encoder;
|
||||||
|
|
||||||
unsigned char buffer[MAX_BUFFER];
|
struct pcm_buffer buffer;
|
||||||
size_t buffer_length;
|
size_t buffer_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -61,6 +60,15 @@ null_encoder_finish(struct encoder *_encoder)
|
|||||||
g_free(encoder);
|
g_free(encoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
null_encoder_close(struct encoder *_encoder)
|
||||||
|
{
|
||||||
|
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
||||||
|
|
||||||
|
pcm_buffer_deinit(&encoder->buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
null_encoder_open(struct encoder *_encoder,
|
null_encoder_open(struct encoder *_encoder,
|
||||||
G_GNUC_UNUSED struct audio_format *audio_format,
|
G_GNUC_UNUSED struct audio_format *audio_format,
|
||||||
@@ -69,6 +77,7 @@ null_encoder_open(struct encoder *_encoder,
|
|||||||
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
||||||
|
|
||||||
encoder->buffer_length = 0;
|
encoder->buffer_length = 0;
|
||||||
|
pcm_buffer_init(&encoder->buffer);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -79,11 +88,9 @@ null_encoder_write(struct encoder *_encoder,
|
|||||||
G_GNUC_UNUSED GError **error)
|
G_GNUC_UNUSED GError **error)
|
||||||
{
|
{
|
||||||
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
||||||
|
char *buffer = pcm_buffer_get(&encoder->buffer, encoder->buffer_length + length);
|
||||||
|
|
||||||
assert(length + encoder->buffer_length < MAX_BUFFER);
|
memcpy(buffer+encoder->buffer_length, data, length);
|
||||||
|
|
||||||
memcpy(encoder->buffer+encoder->buffer_length,
|
|
||||||
data, length);
|
|
||||||
|
|
||||||
encoder->buffer_length += length;
|
encoder->buffer_length += length;
|
||||||
return true;
|
return true;
|
||||||
@@ -93,15 +100,15 @@ static size_t
|
|||||||
null_encoder_read(struct encoder *_encoder, void *dest, size_t length)
|
null_encoder_read(struct encoder *_encoder, void *dest, size_t length)
|
||||||
{
|
{
|
||||||
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
struct null_encoder *encoder = (struct null_encoder *)_encoder;
|
||||||
|
char *buffer = pcm_buffer_get(&encoder->buffer, encoder->buffer_length);
|
||||||
|
|
||||||
if (length > encoder->buffer_length)
|
if (length > encoder->buffer_length)
|
||||||
length = encoder->buffer_length;
|
length = encoder->buffer_length;
|
||||||
|
|
||||||
memcpy(dest, encoder->buffer, length);
|
memcpy(dest, buffer, length);
|
||||||
|
|
||||||
encoder->buffer_length -= length;
|
encoder->buffer_length -= length;
|
||||||
memmove(encoder->buffer, encoder->buffer + length,
|
memmove(buffer, buffer + length, encoder->buffer_length);
|
||||||
encoder->buffer_length);
|
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
@@ -111,6 +118,7 @@ const struct encoder_plugin null_encoder_plugin = {
|
|||||||
.init = null_encoder_init,
|
.init = null_encoder_init,
|
||||||
.finish = null_encoder_finish,
|
.finish = null_encoder_finish,
|
||||||
.open = null_encoder_open,
|
.open = null_encoder_open,
|
||||||
|
.close = null_encoder_close,
|
||||||
.write = null_encoder_write,
|
.write = null_encoder_write,
|
||||||
.read = null_encoder_read,
|
.read = null_encoder_read,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user