diff --git a/av1/ducky_encode.cc b/av1/ducky_encode.cc
index 70de54c..6cbc91a 100644
--- a/av1/ducky_encode.cc
+++ b/av1/ducky_encode.cc
@@ -429,7 +429,9 @@
     const GopStructList &gop_list) {
   std::vector<TplGopStats> tpl_gop_stats_list;
   AV1_PRIMARY *ppi = impl_ptr_->enc_resource.ppi;
+  const VideoInfo &video_info = impl_ptr_->video_info;
   write_temp_delimiter_ = true;
+  AllocateBitstreamBuffer(video_info);
 
   // Go through each gop and encode each frame in the gop
   for (size_t i = 0; i < gop_list.size(); ++i) {
@@ -444,6 +446,7 @@
                                                   { 128, -1 } };
       (void)frame;
       EncodeFrame(frame_decision);
+      if (ppi->cpi->common.show_frame) pending_ctx_size_ = 0;
       write_temp_delimiter_ = ppi->cpi->common.show_frame;
     }
     tpl_gop_stats = ObtainTplStats(gop_struct);
@@ -460,7 +463,11 @@
     const GopEncodeInfoList &gop_encode_info_list) {
   AV1_PRIMARY *ppi = impl_ptr_->enc_resource.ppi;
   std::vector<EncodeFrameResult> encoded_frame_list;
+  const VideoInfo &video_info = impl_ptr_->video_info;
+
   write_temp_delimiter_ = true;
+  AllocateBitstreamBuffer(video_info);
+
   // Go through each gop and encode each frame in the gop
   for (size_t i = 0; i < gop_list.size(); ++i) {
     const aom::GopStruct &gop_struct = gop_list[i];
@@ -471,7 +478,15 @@
       aom::EncodeFrameDecision frame_decision = { aom::EncodeFrameMode::kQindex,
                                                   aom::EncodeGopMode::kGopRcl,
                                                   frame_param };
-      encoded_frame_list.push_back(EncodeFrame(frame_decision));
+      EncodeFrame(frame_decision);
+      if (ppi->cpi->common.show_frame) {
+        bitstream_buf_.resize(pending_ctx_size_);
+        EncodeFrameResult encode_frame_result = {};
+        encode_frame_result.bitstream_buf = bitstream_buf_;
+        encoded_frame_list.push_back(encode_frame_result);
+
+        AllocateBitstreamBuffer(video_info);
+      }
       write_temp_delimiter_ = ppi->cpi->common.show_frame;
     }
   }
@@ -482,11 +497,7 @@
 EncodeFrameResult DuckyEncode::EncodeFrame(
     const EncodeFrameDecision &decision) {
   EncodeFrameResult encode_frame_result = {};
-  const VideoInfo &video_info = impl_ptr_->video_info;
-  // Set bitstream_buf size to a conservatve upperbound.
-  // TODO(angiebird): Set bitstream_buf's size optimally.
-  encode_frame_result.bitstream_buf = std::vector<uint8_t>(
-      video_info.frame_width * video_info.frame_height * 3 * 8, 0);
+  encode_frame_result.bitstream_buf = bitstream_buf_;
   AV1_PRIMARY *ppi = impl_ptr_->enc_resource.ppi;
   aom_image_t *img = &impl_ptr_->enc_resource.img;
   AV1_COMP *const cpi = ppi->cpi;
@@ -508,8 +519,8 @@
   }
 
   AV1_COMP_DATA cpi_data = {};
-  cpi_data.cx_data = encode_frame_result.bitstream_buf.data();
-  cpi_data.cx_data_sz = encode_frame_result.bitstream_buf.size();
+  cpi_data.cx_data = bitstream_buf_.data() + pending_ctx_size_;
+  cpi_data.cx_data_sz = bitstream_buf_.size() - pending_ctx_size_;
   cpi_data.frame_size = 0;
   cpi_data.flush = 1;
   // ts_frame_start and ts_frame_end are not as important since we are focusing
@@ -529,7 +540,6 @@
   if (write_temp_delimiter_) WriteObu(ppi, &cpi_data);
   (void)status;
   assert(status == static_cast<int>(AOM_CODEC_OK));
-  encode_frame_result.bitstream_buf.resize(cpi_data.frame_size);
   DuckyEncodeInfoGetEncodeFrameResult(&cpi->ducky_encode_info,
                                       &encode_frame_result);
   av1_post_encode_updates(cpi, &cpi_data);
@@ -538,6 +548,8 @@
     ppi->frames_left = AOMMAX(0, ppi->frames_left - 1);
   }
 
+  pending_ctx_size_ += cpi_data.frame_size;
+
   fprintf(stderr, "frame %d, qp = %d, size %d, PSNR %f\n",
           encode_frame_result.global_order_idx, encode_frame_result.q_index,
           encode_frame_result.rate, encode_frame_result.psnr);
@@ -545,4 +557,11 @@
 }
 
 void DuckyEncode::EndEncode() { FreeEncoder(&impl_ptr_->enc_resource); }
+
+void DuckyEncode::AllocateBitstreamBuffer(const VideoInfo &video_info) {
+  pending_ctx_size_ = 0;
+  // TODO(angiebird): Set bitstream_buf size to a conservatve upperbound.
+  bitstream_buf_.assign(
+      video_info.frame_width * video_info.frame_height * 3 * 8, 0);
+}
 }  // namespace aom
diff --git a/av1/ducky_encode.h b/av1/ducky_encode.h
index 1acb31f..29dc29e 100644
--- a/av1/ducky_encode.h
+++ b/av1/ducky_encode.h
@@ -83,11 +83,14 @@
       const GopEncodeInfoList &gop_encode_info_list);
   EncodeFrameResult EncodeFrame(const EncodeFrameDecision &decision);
   void EndEncode();
+  void AllocateBitstreamBuffer(const VideoInfo &video_info);
 
  private:
   class EncodeImpl;
   std::unique_ptr<EncodeImpl> impl_ptr_;
   bool write_temp_delimiter_;
+  std::vector<uint8_t> bitstream_buf_;
+  int pending_ctx_size_;
 };
 }  // namespace aom
 
diff --git a/test/ducky_encode_test.cc b/test/ducky_encode_test.cc
index 4b2d3ed..ce64253 100644
--- a/test/ducky_encode_test.cc
+++ b/test/ducky_encode_test.cc
@@ -65,6 +65,7 @@
                                    aom::EncodeGopMode::kNone,
                                    {} };
   for (int i = 0; i < coding_frame_count; ++i) {
+    ducky_encode.AllocateBitstreamBuffer(video_info);
     EncodeFrameResult encode_frame_result = ducky_encode.EncodeFrame(decision);
   }
   ducky_encode.EndEncode();
@@ -91,6 +92,7 @@
                                    aom::EncodeGopMode::kNone,
                                    { q_index, -1 } };
   for (int i = 0; i < coding_frame_count; ++i) {
+    ducky_encode.AllocateBitstreamBuffer(video_info);
     EncodeFrameResult encode_frame_result = ducky_encode.EncodeFrame(decision);
     // TODO(angiebird): Check why distortion is not zero when q_index = 0
     EXPECT_EQ(encode_frame_result.dist, 0);
