Populate fields in ducky encoder

BUG=b/257303751

Change-Id: I34d52cabcf8b1194072e0d1cc856db5159db2b0e
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index ea3cfc0..0a41665 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -577,6 +577,7 @@
 
   tpl_stats->intra_dist = recon_error << TPL_DEP_COST_SCALE_LOG2;
   tpl_stats->intra_sse = pred_error << TPL_DEP_COST_SCALE_LOG2;
+  tpl_stats->intra_rate = rate_cost;
 
   if (cpi->third_pass_ctx &&
       frame_offset < cpi->third_pass_ctx->frame_info_count &&
diff --git a/av1/encoder/tpl_model.h b/av1/encoder/tpl_model.h
index ed98478..71cc320 100644
--- a/av1/encoder/tpl_model.h
+++ b/av1/encoder/tpl_model.h
@@ -118,6 +118,7 @@
   int32_t inter_cost;
   int32_t srcrf_rate;
   int32_t recrf_rate;
+  int32_t intra_rate;
   int32_t cmp_recrf_rate[2];
   int_mv mv[INTER_REFS_PER_FRAME];
   int8_t ref_frame_index[2];
diff --git a/av1/qmode_rc/ducky_encode.cc b/av1/qmode_rc/ducky_encode.cc
index 6e3e6d2..df69426 100644
--- a/av1/qmode_rc/ducky_encode.cc
+++ b/av1/qmode_rc/ducky_encode.cc
@@ -16,6 +16,7 @@
 #include <vector>
 
 #include "av1/common/enums.h"
+#include "av1/encoder/rd.h"
 #include "config/aom_config.h"
 
 #include "aom/aom_encoder.h"
@@ -433,7 +434,8 @@
       obu_header_size + obu_payload_size + length_field_size;
 }
 
-TplGopStats DuckyEncode::ObtainTplStats(const GopStruct gop_struct) {
+TplGopStats DuckyEncode::ObtainTplStats(const GopStruct gop_struct,
+                                        bool rate_dist_present) {
   TplGopStats tpl_gop_stats;
 
   AV1_PRIMARY *ppi = impl_ptr_->enc_resource.ppi;
@@ -441,6 +443,8 @@
 
   for (size_t idx = 0; idx < gop_struct.gop_frame_list.size(); ++idx) {
     TplFrameStats tpl_frame_stats = {};
+    tpl_frame_stats.rate_dist_present = rate_dist_present;
+
     TplDepFrame *tpl_frame = &ppi->tpl_data.tpl_frame[idx];
     if (gop_struct.gop_frame_list[idx].update_type == GopFrameType::kOverlay ||
         gop_struct.gop_frame_list[idx].update_type ==
@@ -475,10 +479,21 @@
         block_stats.col = mi_col * MI_SIZE;
         block_stats.height = (1 << block_mis_log2) * MI_SIZE;
         block_stats.width = (1 << block_mis_log2) * MI_SIZE;
-        block_stats.inter_cost = tpl_stats_ptr->inter_cost
-                                 << TPL_DEP_COST_SCALE_LOG2;
-        block_stats.intra_cost = tpl_stats_ptr->intra_cost
-                                 << TPL_DEP_COST_SCALE_LOG2;
+
+        block_stats.inter_cost =
+            RDCOST(tpl_frame->base_rdmult, tpl_stats_ptr->recrf_rate,
+                   tpl_stats_ptr->recrf_dist);
+        block_stats.intra_cost =
+            RDCOST(tpl_frame->base_rdmult, tpl_stats_ptr->intra_rate,
+                   tpl_stats_ptr->intra_dist);
+
+        if (tpl_frame_stats.rate_dist_present) {
+          block_stats.recrf_dist = tpl_stats_ptr->recrf_dist;
+          block_stats.recrf_rate = tpl_stats_ptr->recrf_rate;
+          block_stats.intra_pred_err = tpl_stats_ptr->intra_sse;
+          block_stats.inter_pred_err = tpl_stats_ptr->recrf_sse;
+        }
+
         block_stats.ref_frame_index = { -1, -1 };
 
         for (int i = 0; i < kBlockRefCount; ++i) {
@@ -502,6 +517,7 @@
 }
 
 // Obtain TPL stats through ducky_encode.
+// TODO(jianj): Populate rate_dist_present flag through qmode_rc_encoder
 std::vector<TplGopStats> DuckyEncode::ComputeTplStats(
     const GopStructList &gop_list,
     const GopEncodeInfoList &gop_encode_info_list) {
@@ -528,7 +544,8 @@
       if (ppi->cpi->common.show_frame) pending_ctx_size_ = 0;
       write_temp_delimiter_ = ppi->cpi->common.show_frame;
     }
-    tpl_gop_stats = ObtainTplStats(gop_struct);
+    // The rate_dist_present needs to be populated.
+    tpl_gop_stats = ObtainTplStats(gop_struct, 0);
     tpl_gop_stats_list.push_back(tpl_gop_stats);
   }
 
diff --git a/av1/qmode_rc/ducky_encode.h b/av1/qmode_rc/ducky_encode.h
index 984c03a..c5ac536 100644
--- a/av1/qmode_rc/ducky_encode.h
+++ b/av1/qmode_rc/ducky_encode.h
@@ -78,7 +78,9 @@
   ~DuckyEncode();
   std::vector<FIRSTPASS_STATS> ComputeFirstPassStats();
   void StartEncode(const std::vector<FIRSTPASS_STATS> &stats_list);
-  TplGopStats ObtainTplStats(const GopStruct gop_struct);
+
+  TplGopStats ObtainTplStats(const GopStruct gop_struct, bool rate_dist_flag);
+
   std::vector<TplGopStats> ComputeTplStats(
       const GopStructList &gop_list,
       const GopEncodeInfoList &gop_encode_info_list);