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) ;

Reply via email to