vorbis_encoder: make ogg_page a local variable
Converted the ogg_page attribute from the vorbis_encoder struct to a local function of vorbis_encoder_read(). This simplifies some code, because we don't need to check the page anymore before using it.
This commit is contained in:
@@ -43,7 +43,6 @@ struct vorbis_encoder {
|
|||||||
struct audio_format audio_format;
|
struct audio_format audio_format;
|
||||||
|
|
||||||
ogg_stream_state os;
|
ogg_stream_state os;
|
||||||
ogg_page page;
|
|
||||||
|
|
||||||
vorbis_dsp_state vd;
|
vorbis_dsp_state vd;
|
||||||
vorbis_block vb;
|
vorbis_block vb;
|
||||||
@@ -207,7 +206,6 @@ vorbis_encoder_open(struct encoder *_encoder,
|
|||||||
audio_format->bits = 16;
|
audio_format->bits = 16;
|
||||||
|
|
||||||
encoder->audio_format = *audio_format;
|
encoder->audio_format = *audio_format;
|
||||||
memset(&encoder->page, 0, sizeof(encoder->page));
|
|
||||||
|
|
||||||
ret = vorbis_encoder_reinit(encoder, error);
|
ret = vorbis_encoder_reinit(encoder, error);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
@@ -336,8 +334,6 @@ vorbis_encoder_write(struct encoder *_encoder,
|
|||||||
struct vorbis_encoder *encoder = (struct vorbis_encoder *)_encoder;
|
struct vorbis_encoder *encoder = (struct vorbis_encoder *)_encoder;
|
||||||
unsigned num_frames;
|
unsigned num_frames;
|
||||||
|
|
||||||
assert(encoder->page.header_len == 0 && encoder->page.body_len == 0);
|
|
||||||
|
|
||||||
num_frames = length / audio_format_frame_size(&encoder->audio_format);
|
num_frames = length / audio_format_frame_size(&encoder->audio_format);
|
||||||
|
|
||||||
/* this is for only 16-bit audio */
|
/* this is for only 16-bit audio */
|
||||||
@@ -356,37 +352,30 @@ static size_t
|
|||||||
vorbis_encoder_read(struct encoder *_encoder, void *_dest, size_t length)
|
vorbis_encoder_read(struct encoder *_encoder, void *_dest, size_t length)
|
||||||
{
|
{
|
||||||
struct vorbis_encoder *encoder = (struct vorbis_encoder *)_encoder;
|
struct vorbis_encoder *encoder = (struct vorbis_encoder *)_encoder;
|
||||||
|
ogg_page page;
|
||||||
|
int ret;
|
||||||
unsigned char *dest = _dest;
|
unsigned char *dest = _dest;
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
|
|
||||||
if (encoder->page.header_len == 0 && encoder->page.body_len == 0) {
|
ret = ogg_stream_pageout(&encoder->os, &page);
|
||||||
int ret;
|
if (ret == 0 && encoder->flush) {
|
||||||
|
encoder->flush = false;
|
||||||
ret = ogg_stream_pageout(&encoder->os, &encoder->page);
|
ret = ogg_stream_flush(&encoder->os, &page);
|
||||||
if (ret == 0 && encoder->flush) {
|
|
||||||
encoder->flush = false;
|
|
||||||
ret = ogg_stream_flush(&encoder->os, &encoder->page);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
assert(encoder->page.header_len > 0 ||
|
|
||||||
encoder->page.body_len > 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nbytes = (size_t)encoder->page.header_len +
|
if (ret == 0)
|
||||||
(size_t)encoder->page.body_len;
|
return 0;
|
||||||
|
|
||||||
|
assert(page.header_len > 0 || page.body_len > 0);
|
||||||
|
|
||||||
|
nbytes = (size_t)page.header_len + (size_t)page.body_len;
|
||||||
|
|
||||||
if (nbytes > length)
|
if (nbytes > length)
|
||||||
/* XXX better error handling */
|
/* XXX better error handling */
|
||||||
g_error("buffer too small");
|
g_error("buffer too small");
|
||||||
|
|
||||||
memcpy(dest, encoder->page.header, encoder->page.header_len);
|
memcpy(dest, page.header, page.header_len);
|
||||||
memcpy(dest + encoder->page.header_len, encoder->page.body,
|
memcpy(dest + page.header_len, page.body, page.body_len);
|
||||||
encoder->page.body_len);
|
|
||||||
|
|
||||||
memset(&encoder->page, 0, sizeof(encoder->page));
|
|
||||||
|
|
||||||
return nbytes;
|
return nbytes;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user