libvorbis: check return values for functions that can return errors

This commit is contained in:
Justin Ruggles 2012-02-28 21:00:33 -05:00
parent c5063e0348
commit 94025d8a99
1 changed files with 15 additions and 7 deletions

View File

@ -237,7 +237,7 @@ static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
OggVorbisContext *s = avctx->priv_data; OggVorbisContext *s = avctx->priv_data;
ogg_packet op; ogg_packet op;
float *audio = data; float *audio = data;
int pkt_size; int pkt_size, ret;
/* send samples to libvorbis */ /* send samples to libvorbis */
if (data) { if (data) {
@ -253,20 +253,24 @@ static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
for (i = 0; i < samples; i++) for (i = 0; i < samples; i++)
buffer[c][i] = audio[i * channels + co]; buffer[c][i] = audio[i * channels + co];
} }
vorbis_analysis_wrote(&s->vd, samples); if ((ret = vorbis_analysis_wrote(&s->vd, samples)) < 0)
return vorbis_error_to_averror(ret);
} else { } else {
if (!s->eof) if (!s->eof)
vorbis_analysis_wrote(&s->vd, 0); if ((ret = vorbis_analysis_wrote(&s->vd, 0)) < 0)
return vorbis_error_to_averror(ret);
s->eof = 1; s->eof = 1;
} }
/* retrieve available packets from libvorbis */ /* retrieve available packets from libvorbis */
while (vorbis_analysis_blockout(&s->vd, &s->vb) == 1) { while ((ret = vorbis_analysis_blockout(&s->vd, &s->vb)) == 1) {
vorbis_analysis(&s->vb, NULL); if ((ret = vorbis_analysis(&s->vb, NULL)) < 0)
vorbis_bitrate_addblock(&s->vb); break;
if ((ret = vorbis_bitrate_addblock(&s->vb)) < 0)
break;
/* add any available packets to the output packet buffer */ /* add any available packets to the output packet buffer */
while (vorbis_bitrate_flushpacket(&s->vd, &op)) { while ((ret = vorbis_bitrate_flushpacket(&s->vd, &op)) == 1) {
/* i'd love to say the following line is a hack, but sadly it's /* i'd love to say the following line is a hack, but sadly it's
* not, apparently the end of stream decision is in libogg. */ * not, apparently the end of stream decision is in libogg. */
if (op.bytes == 1 && op.e_o_s) if (op.bytes == 1 && op.e_o_s)
@ -280,7 +284,11 @@ static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
memcpy(s->buffer + s->buffer_index, op.packet, op.bytes); memcpy(s->buffer + s->buffer_index, op.packet, op.bytes);
s->buffer_index += op.bytes; s->buffer_index += op.bytes;
} }
if (ret < 0)
break;
} }
if (ret < 0)
return vorbis_error_to_averror(ret);
/* output then next packet from the output buffer, if available */ /* output then next packet from the output buffer, if available */
pkt_size = 0; pkt_size = 0;