Commit adbe8c40 authored by Max Kellermann's avatar Max Kellermann

output/{recorder,shout}: call encoder_read() in a loop

This is necessary for Ogg packets that span more than one page.
parent 58e600f4
......@@ -2,6 +2,7 @@ ver 0.17.3 (2012/??/??)
* output:
- recorder: fix I/O error check
- shout: fix memory leak in error handler
- recorder, shout: support Ogg packets that span more than one page
ver 0.17.2 (2012/09/30)
* protocol:
......
......@@ -295,6 +295,8 @@ encoder_write(struct encoder *encoder, const void *data, size_t length,
/**
* Reads encoded data from the encoder.
*
* Call this repeatedly until no more data is returned.
*
* @param encoder the encoder
* @param dest the destination buffer to copy to
* @param length the maximum length of the destination buffer
......
......@@ -160,17 +160,20 @@ recorder_output_encoder_to_file(struct recorder_output *recorder,
{
assert(recorder->fd >= 0);
/* read from the encoder */
while (true) {
/* read from the encoder */
size_t size = encoder_read(recorder->encoder, recorder->buffer,
sizeof(recorder->buffer));
if (size == 0)
return true;
size_t size = encoder_read(recorder->encoder, recorder->buffer,
sizeof(recorder->buffer));
if (size == 0)
return true;
/* write everything into the file */
/* write everything into the file */
return recorder_write_to_file(recorder, recorder->buffer, size,
error_r);
if (!recorder_write_to_file(recorder, recorder->buffer, size,
error_r))
return false;
}
}
static bool
......
......@@ -342,14 +342,16 @@ write_page(struct shout_data *sd, GError **error)
{
assert(sd->encoder != NULL);
size_t nbytes = encoder_read(sd->encoder,
sd->buffer, sizeof(sd->buffer));
if (nbytes == 0)
return true;
int err = shout_send(sd->shout_conn, sd->buffer, nbytes);
if (!handle_shout_error(sd, err, error))
return false;
while (true) {
size_t nbytes = encoder_read(sd->encoder,
sd->buffer, sizeof(sd->buffer));
if (nbytes == 0)
return true;
int err = shout_send(sd->shout_conn, sd->buffer, nbytes);
if (!handle_shout_error(sd, err, error))
return false;
}
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment