]> git.sesse.net Git - nageru/blobdiff - x264_encoder.cpp
Add a histogram of output crf values from x264.
[nageru] / x264_encoder.cpp
index 3a3151068dfad9333efa46bec795f754f2e15c30..9d108a0604989a87d4898dd970071a3495136bd3 100644 (file)
@@ -65,6 +65,7 @@ X264Encoder::X264Encoder(AVOutputFormat *oformat)
        global_metrics.add("x264_output_frames", {{ "type", "i" }}, &metric_x264_output_frames_i);
        global_metrics.add("x264_output_frames", {{ "type", "p" }}, &metric_x264_output_frames_p);
        global_metrics.add("x264_output_frames", {{ "type", "b" }}, &metric_x264_output_frames_b);
+       global_metrics.add_histogram("x264_crf", {}, metric_x264_crf, &metric_x264_crf_sum, crf_buckets);
 }
 
 X264Encoder::~X264Encoder()
@@ -363,6 +364,16 @@ void X264Encoder::encode_frame(X264Encoder::QueuedFrame qf)
                ++metric_x264_output_frames_p;
        }
 
+       if (pic.prop.f_crf_avg <= 0.0) {
+               ++metric_x264_crf[0];
+       } else if (pic.prop.f_crf_avg <= crf_buckets - 1) {
+               ++metric_x264_crf[int(floor(pic.prop.f_crf_avg))];
+       } else {
+               // Just clamp; this isn't ideal, but at least the total count will be right.
+               ++metric_x264_crf[crf_buckets - 1];
+       }
+       metric_x264_crf_sum = metric_x264_crf_sum + pic.prop.f_crf_avg;
+
        if (frames_being_encoded.count(pic.i_pts)) {
                ReceivedTimestamps received_ts = frames_being_encoded[pic.i_pts];
                frames_being_encoded.erase(pic.i_pts);