[SCM] libav/experimental: Support constant-quant encoding for libtheora Based on a patch by j f (gonzaz-z # operamail (d) com)

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:52:16 UTC 2013


The following commit has been merged in the experimental branch:
commit 6945c2bc4cf27d8ca8e2bf49b49716cb72f30704
Author: David Conrad <lessen42 at gmail.com>
Date:   Wed Sep 30 22:25:49 2009 +0000

    Support constant-quant encoding for libtheora
    Based on a patch by j f (gonzaz-z # operamail (d) com)
    
    Originally committed as revision 20109 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c
index 9da0d19..f028595 100644
--- a/libavcodec/libtheoraenc.c
+++ b/libavcodec/libtheoraenc.c
@@ -106,11 +106,9 @@ static av_cold int encode_init(AVCodecContext* avc_context)
     }
     t_info.colorspace = OC_CS_UNSPECIFIED;
     t_info.pixelformat = OC_PF_420;
-    t_info.target_bitrate = avc_context->bit_rate;
     t_info.keyframe_frequency = avc_context->gop_size;
     t_info.keyframe_frequency_force = avc_context->gop_size;
     t_info.keyframe_mindistance = avc_context->keyint_min;
-    t_info.quality = 0;
 
     t_info.quick_p = 1;
     t_info.dropframes_p = 0;
@@ -120,6 +118,19 @@ static av_cold int encode_init(AVCodecContext* avc_context)
     t_info.noise_sensitivity = 1;
     t_info.sharpness = 0;
 
+    if (avc_context->flags & CODEC_FLAG_QSCALE) {
+        /* to be constant with the libvorbis implementation, clip global_quality to 0 - 10
+           Theora accepts a quality parameter p, which is:
+                * 0 <= p <=63
+                * an int value
+         */
+        t_info.quality = av_clip(avc_context->global_quality / (float)FF_QP2LAMBDA, 0, 10) * 6.3;
+        t_info.target_bitrate = 0;
+    } else {
+        t_info.target_bitrate = avc_context->bit_rate;
+        t_info.quality = 0;
+    }
+
     /* Now initialise libtheora */
     if (theora_encode_init( &(h->t_state), &t_info ) != 0) {
         av_log(avc_context, AV_LOG_ERROR, "theora_encode_init failed\n");

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list