Carl Eugen Hoyos <[email protected]> added the comment:
New version attached.
________________________________________________
FFmpeg issue tracker <[email protected]>
<https://roundup.ffmpeg.org/issue2311>
________________________________________________
Index: libavcodec/libvorbis.c
===================================================================
--- libavcodec/libvorbis.c (revision 25863)
+++ libavcodec/libvorbis.c (working copy)
@@ -60,29 +60,38 @@
};
static const AVClass class = { "libvorbis", av_default_item_name, options, LIBAVUTIL_VERSION_INT };
+static int vorbiserr_ffmpegerr (int vorbiserr) {
+ switch (vorbiserr) {
+ case OV_EINVAL: return AVERROR_INVALIDDATA;
+ case OV_EIMPL: return AVERROR_NOTSUPP;
+ default: return -1;
+ }
+}
+
static av_cold int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avccontext) {
OggVorbisContext *context = avccontext->priv_data ;
double cfreq;
+ int err;
if(avccontext->flags & CODEC_FLAG_QSCALE) {
/* variable bitrate */
- if(vorbis_encode_setup_vbr(vi, avccontext->channels,
+ if(err = vorbis_encode_setup_vbr(vi, avccontext->channels,
avccontext->sample_rate,
avccontext->global_quality / (float)FF_QP2LAMBDA / 10.0))
- return -1;
+ return vorbiserr_ffmpegerr(err);
} else {
int minrate = avccontext->rc_min_rate > 0 ? avccontext->rc_min_rate : -1;
int maxrate = avccontext->rc_min_rate > 0 ? avccontext->rc_max_rate : -1;
/* constant bitrate */
- if(vorbis_encode_setup_managed(vi, avccontext->channels,
+ if(err = vorbis_encode_setup_managed(vi, avccontext->channels,
avccontext->sample_rate, minrate, avccontext->bit_rate, maxrate))
- return -1;
+ return vorbiserr_ffmpegerr(err);
/* variable bitrate by estimate, disable slow rate management */
if(minrate == -1 && maxrate == -1)
- if(vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE2_SET, NULL))
- return -1;
+ if(err = vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE2_SET, NULL))
+ return vorbiserr_ffmpegerr(err);
}
/* cutoff frequency */
@@ -107,11 +116,12 @@
ogg_packet header, header_comm, header_code;
uint8_t *p;
unsigned int offset;
+ int err;
vorbis_info_init(&context->vi) ;
- if(oggvorbis_init_encoder(&context->vi, avccontext) < 0) {
+ if((err = oggvorbis_init_encoder(&context->vi, avccontext)) < 0) {
av_log(avccontext, AV_LOG_ERROR, "oggvorbis_encode_init: init_encoder failed\n") ;
- return -1 ;
+ return err;
}
vorbis_analysis_init(&context->vd, &context->vi) ;
vorbis_block_init(&context->vd, &context->vb) ;