output/{recorder,shout}: call encoder_read() in a loop
This is necessary for Ogg packets that span more than one page.
This commit is contained in:
@@ -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;
|
||||
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;
|
||||
int err = shout_send(sd->shout_conn, sd->buffer, nbytes);
|
||||
if (!handle_shout_error(sd, err, error))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user