Make B-frame reduction sensitivity by b_strategy/vb_strategy = 1
authorCorey Hickey <bugfood-ml@fatooh.org>
Sat, 3 Jun 2006 06:26:04 +0000 (06:26 +0000)
committerCorey Hickey <bugfood-ml@fatooh.org>
Sat, 3 Jun 2006 06:26:04 +0000 (06:26 +0000)
user-tunable.

Originally committed as revision 5450 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/avcodec.h
libavcodec/mpegvideo.c
libavcodec/utils.c

index d352edc97bd843d5def07c71144a2676f2fc6176..eb0fe8185698c150ca98db40aa24d48f61a03cdd 100644 (file)
@@ -1977,6 +1977,13 @@ typedef struct AVCodecContext {
      * - decoding: unused
      */
     int mv0_threshold;
+
+    /**
+     * adjusts sensitivity of b_frame_strategy 1
+     * - encoding: set by user.
+     * - decoding: unused
+     */
+    int b_sensitivity;
 } AVCodecContext;
 
 /**
index dac57c6cd0bea18e678dc6932c7f646f32737980..6393cc91fe9131892beebc3e61f270c6c69168d5 100644 (file)
@@ -2375,7 +2375,7 @@ static void select_input_picture(MpegEncContext *s){
                     }
                 }
                 for(i=0; i<s->max_b_frames+1; i++){
-                    if(s->input_picture[i]==NULL || s->input_picture[i]->b_frame_score - 1 > s->mb_num/40) break;
+                    if(s->input_picture[i]==NULL || s->input_picture[i]->b_frame_score - 1 > s->mb_num/s->avctx->b_sensitivity) break;
                 }
 
                 b_frames= FFMAX(0, i-1);
index 84860e270be5dc28d4ab13d3c7add32afb22bff6..ce664391171ca264da74612e42784dfcee5658eb 100644 (file)
@@ -741,6 +741,7 @@ static AVOption options[]={
 {"sc_factor", NULL, OFFSET(scenechange_factor), FF_OPT_TYPE_INT, 6, 0, INT_MAX, V|E},
 {"mv0_threshold", NULL, OFFSET(mv0_threshold), FF_OPT_TYPE_INT, 256, 0, INT_MAX, V|E},
 {"ivlc", "intra vlc table", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_INTRA_VLC, INT_MIN, INT_MAX, V|E, "flags2"},
+{"b_sensitivity", NULL, OFFSET(b_sensitivity), FF_OPT_TYPE_INT, 40, 1, INT_MAX, V|E},
 {NULL},
 };
 
@@ -796,6 +797,7 @@ void avcodec_get_context_defaults(AVCodecContext *s){
     s->nsse_weight= 8;
     s->sample_fmt= SAMPLE_FMT_S16; // FIXME: set to NONE
     s->mv0_threshold= 256;
+    s->b_sensitivity= 40;
 
     s->intra_quant_bias= FF_DEFAULT_QUANT_BIAS;
     s->inter_quant_bias= FF_DEFAULT_QUANT_BIAS;