Refactor TimeStamps from AV1_COMP This CL groups time stamp related variables from AV1_COMP into a new structure TimeStamps, adds documentation for the members, and cleans up function interfaces. BUG=aomedia:2610 Change-Id: Ice9ebbe030fc947423af19ae7e16271b36c17d7e
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c index 7cd170b..d978335 100644 --- a/av1/encoder/encode_strategy.c +++ b/av1/encoder/encode_strategy.c
@@ -308,8 +308,8 @@ return AOMMIN((MAX_GF_INTERVAL - 1), arf_offset); } -static void adjust_frame_rate(AV1_COMP *cpi, - const struct lookahead_entry *source) { +static void adjust_frame_rate(AV1_COMP *cpi, int64_t ts_start, int64_t ts_end) { + TimeStamps *time_stamps = &cpi->time_stamps; int64_t this_duration; int step = 0; @@ -322,14 +322,14 @@ return; } - if (source->ts_start == cpi->first_time_stamp_ever) { - this_duration = source->ts_end - source->ts_start; + if (ts_start == time_stamps->first_ever) { + this_duration = ts_end - ts_start; step = 1; } else { int64_t last_duration = - cpi->last_end_time_stamp_seen - cpi->last_time_stamp_seen; + time_stamps->prev_end_seen - time_stamps->prev_start_seen; - this_duration = source->ts_end - cpi->last_end_time_stamp_seen; + this_duration = ts_end - time_stamps->prev_end_seen; // do a step update if the duration changes by 10% if (last_duration) @@ -343,8 +343,8 @@ // Average this frame's rate into the last second's average // frame rate. If we haven't seen 1 second yet, then average // over the whole interval seen. - const double interval = AOMMIN( - (double)(source->ts_end - cpi->first_time_stamp_ever), 10000000.0); + const double interval = + AOMMIN((double)(ts_end - time_stamps->first_ever), 10000000.0); double avg_duration = 10000000.0 / cpi->framerate; avg_duration *= (interval - avg_duration + this_duration); avg_duration /= interval; @@ -352,8 +352,8 @@ av1_new_framerate(cpi, 10000000.0 / avg_duration); } } - cpi->last_time_stamp_seen = source->ts_start; - cpi->last_end_time_stamp_seen = source->ts_end; + time_stamps->prev_start_seen = ts_start; + time_stamps->prev_end_seen = ts_end; } // If this is an alt-ref, returns the offset of the source frame used @@ -1116,9 +1116,9 @@ *time_stamp = source->ts_start; *time_end = source->ts_end; - if (source->ts_start < cpi->first_time_stamp_ever) { - cpi->first_time_stamp_ever = source->ts_start; - cpi->last_end_time_stamp_seen = source->ts_start; + if (source->ts_start < cpi->time_stamps.first_ever) { + cpi->time_stamps.first_ever = source->ts_start; + cpi->time_stamps.prev_end_seen = source->ts_start; } av1_apply_encoding_flags(cpi, source->flags); @@ -1126,7 +1126,8 @@ *frame_flags = (source->flags & AOM_EFLAG_FORCE_KF) ? FRAMEFLAGS_KEY : 0; // Shown frames and arf-overlay frames need frame-rate considering - if (frame_params.show_frame) adjust_frame_rate(cpi, source); + if (frame_params.show_frame) + adjust_frame_rate(cpi, source->ts_start, source->ts_end); if (!frame_params.show_existing_frame) { if (cpi->film_grain_table) {
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index 1ee38b6..16bd6a0 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -3136,7 +3136,7 @@ av1_zero(aggregate_fc); #endif // CONFIG_ENTROPY_STATS - cpi->first_time_stamp_ever = INT64_MAX; + cpi->time_stamps.first_ever = INT64_MAX; #ifdef OUTPUT_YUV_SKINMAP yuv_skinmap_file = fopen("skinmap.yuv", "ab"); @@ -3517,7 +3517,7 @@ char results[512] = { 0 }; FILE *f = fopen("opsnr.stt", "a"); double time_encoded = - (cpi->last_end_time_stamp_seen - cpi->first_time_stamp_ever) / + (cpi->time_stamps.prev_end_seen - cpi->time_stamps.first_ever) / 10000000.000; double total_encode_time = (cpi->time_receive_data + cpi->time_compress_data) / 1000.000;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 539bd35..75165c6 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -948,6 +948,15 @@ int subsampling_y; } FRAME_INFO; +typedef struct { + // Start time stamp of the previous frame + int64_t prev_start_seen; + // End time stamp of the previous frame + int64_t prev_end_seen; + // Start time stamp of the first frame + int64_t first_ever; +} TimeStamps; + typedef struct AV1_COMP { QUANTS quants; ThreadData td; @@ -1031,9 +1040,8 @@ // Parameters related to winner mode processing. WinnerModeParams winner_mode_params; - int64_t last_time_stamp_seen; - int64_t last_end_time_stamp_seen; - int64_t first_time_stamp_ever; + // Frame time stamps + TimeStamps time_stamps; RATE_CONTROL rc; double framerate;
diff --git a/av1/encoder/level.c b/av1/encoder/level.c index c6fd3e6..3403a3a 100644 --- a/av1/encoder/level.c +++ b/av1/encoder/level.c
@@ -1073,7 +1073,7 @@ aom_clear_system_state(); const double compression_ratio = av1_get_compression_ratio(cm, size); const double total_time_encoded = - (cpi->last_end_time_stamp_seen - cpi->first_time_stamp_ever) / + (cpi->time_stamps.prev_end_seen - cpi->time_stamps.first_ever) / (double)TICKS_PER_SEC; const int temporal_layer_id = cm->temporal_layer_id;