Added frame output to file for viewing.
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index d2ece90..9a51793 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -672,6 +672,54 @@
int64_t sse;
} FRAME_DIFF;
+#define TF_DEBUG_MODE 0
+#if TF_DEBUG_MODE == 1
+void dump_frame(AV1_COMP *cpi, const YV12_BUFFER_CONFIG *frame_buf,
+ const int frame_idx, char *fname_addition) {
+ AV1_COMMON *const cm = &cpi->common;
+ if (frame_buf == NULL) {
+ printf("Frame is not ready.\n");
+ return;
+ }
+
+ int h;
+ char file_name[256];
+ snprintf(file_name, 256, "/tmp/frame%d%s.yuv", frame_idx, fname_addition);
+ FILE *f_frame = NULL;
+ if ((f_frame = fopen(file_name, "w")) == NULL) {
+ printf("Unable to open file %s to write.\n", file_name);
+ return;
+ }
+ printf(
+ "\nDumping Frame=%d, encode_update_type[%5d]=%1d,"
+ "show_frame=%d, show_existing_frame=%d, source_alt_ref_active=%d, "
+ "refresh_alt_ref_frame=%d, "
+ "y_stride=%4d, uv_stride=%4d, cm->width=%4d, cm->height=%4d\n\n",
+ frame_idx, cpi->gf_group.index,
+ cpi->gf_group.update_type[cpi->gf_group.index], cm->show_frame,
+ cm->show_existing_frame, cpi->rc.source_alt_ref_active,
+ cpi->refresh_frame.alt_ref_frame, frame_buf->y_stride,
+ frame_buf->uv_stride, cm->width, cm->height);
+
+ // --- Y ---
+ for (h = 0; h < cm->height; ++h) {
+ fwrite(&frame_buf->y_buffer[h * frame_buf->y_stride], sizeof(uint8_t),
+ cm->width, f_frame);
+ }
+ // --- U ---
+ for (h = 0; h < (cm->height >> 1); ++h) {
+ fwrite(&frame_buf->u_buffer[h * frame_buf->uv_stride], sizeof(uint8_t),
+ (cm->width >> 1), f_frame);
+ }
+ // --- V ---
+ for (h = 0; h < (cm->height >> 1); ++h) {
+ fwrite(&frame_buf->v_buffer[h * frame_buf->uv_stride], sizeof(uint8_t),
+ (cm->width >> 1), f_frame);
+ }
+
+ fclose(f_frame);
+}
+#endif
// Does temporal filter for a particular frame.
// Inputs:
// cpi: Pointer to the composed information of input video.
@@ -830,6 +878,11 @@
}
}
+#if TF_DEBUG_MODE == 1
+ dump_frame(cpi, frame_to_filter, filter_frame_idx, "_beforetf");
+ dump_frame(cpi, &(cpi->alt_ref_buffer), filter_frame_idx, "_aftertf");
+#endif
+
// Restore input state
for (int i = 0; i < num_planes; i++) {
mbd->plane[i].pre[0].buf = input_buffer[i];