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;