ref: 5df6c0458555dd03fd5796e9d9342d1394ade446
parent: 516c087c51c50b5a1844c2c2e821e35f3e314795
author: Marco <[email protected]>
date: Wed Jun 3 09:52:44 EDT 2015
Fix to sample encoder: vpx_temporal_svc_encoder.c vp8 uses ts_target_bitrate for layer settings. Change-Id: Ie72477b549051396feebff87a3744fed04366bf4
--- a/examples/vpx_temporal_svc_encoder.c
+++ b/examples/vpx_temporal_svc_encoder.c
@@ -70,6 +70,7 @@
int window_size;
// Number of window measurements.
int window_count;
+ int layer_target_bitrate[VPX_MAX_LAYERS];
};
// Note: these rate control metrics assume only 1 key frame in the
@@ -85,13 +86,13 @@
// per-frame-bandwidth, for the rate control encoding stats below.
const double framerate = cfg->g_timebase.den / cfg->g_timebase.num;
rc->layer_framerate[0] = framerate / cfg->ts_rate_decimator[0];
- rc->layer_pfb[0] = 1000.0 * cfg->layer_target_bitrate[0] /
+ rc->layer_pfb[0] = 1000.0 * rc->layer_target_bitrate[0] /
rc->layer_framerate[0];
for (i = 0; i < cfg->ts_number_layers; ++i) {
if (i > 0) {
rc->layer_framerate[i] = framerate / cfg->ts_rate_decimator[i];
rc->layer_pfb[i] = 1000.0 *
- (cfg->layer_target_bitrate[i] - cfg->layer_target_bitrate[i - 1]) /
+ (rc->layer_target_bitrate[i] - rc->layer_target_bitrate[i - 1]) /
(rc->layer_framerate[i] - rc->layer_framerate[i - 1]);
}
rc->layer_input_frames[i] = 0;
@@ -128,7 +129,7 @@
rc->layer_avg_rate_mismatch[i] = 100.0 * rc->layer_avg_rate_mismatch[i] /
rc->layer_enc_frames[i];
printf("For layer#: %d \n", i);
- printf("Bitrate (target vs actual): %d %f \n", cfg->layer_target_bitrate[i],
+ printf("Bitrate (target vs actual): %d %f \n", rc->layer_target_bitrate[i],
rc->layer_encoding_bitrate[i]);
printf("Average frame size (target vs actual): %f %f \n", rc->layer_pfb[i],
rc->layer_avg_frame_size[i]);
@@ -597,7 +598,11 @@
for (i = min_args_base;
(int)i < min_args_base + mode_to_num_layers[layering_mode];
++i) {
- cfg.layer_target_bitrate[i - 11] = strtol(argv[i], NULL, 0);
+ rc.layer_target_bitrate[i - 11] = strtol(argv[i], NULL, 0);
+ if (strncmp(encoder->name, "vp8", 3) == 0)
+ cfg.ts_target_bitrate[i - 11] = rc.layer_target_bitrate[i - 11];
+ else if (strncmp(encoder->name, "vp9", 3) == 0)
+ cfg.layer_target_bitrate[i - 11] = rc.layer_target_bitrate[i - 11];
}
// Real time parameters.
@@ -636,7 +641,7 @@
// Target bandwidth for the whole stream.
// Set to layer_target_bitrate for highest layer (total bitrate).
- cfg.rc_target_bitrate = cfg.layer_target_bitrate[cfg.ts_number_layers - 1];
+ cfg.rc_target_bitrate = rc.layer_target_bitrate[cfg.ts_number_layers - 1];
// Open input file.
if (!(infile = fopen(argv[1], "rb"))) {