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);
