diff --git a/src/api.rs b/src/api.rs
index d75f785daa8603a86f2d190aa9cb25fc9a7facb7..303f68914a6828812e2404bac489621631b8e012 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -85,7 +85,7 @@ impl Config {
       aom_dsp_rtcd();
     }
 
-    Context { fi, seq, frame_count: 0, idx: 0, frame_q: BTreeMap::new() }
+    Context { fi, seq, frame_count: 0, idx: 0, frame_q: BTreeMap::new(), packet_data: Vec::new() }
   }
 }
 
@@ -95,7 +95,8 @@ pub struct Context {
   //    timebase: Ratio,
   frame_count: u64,
   idx: u64,
-  frame_q: BTreeMap<u64, Option<Arc<Frame>>> //    packet_q: VecDeque<Packet>
+  frame_q: BTreeMap<u64, Option<Arc<Frame>>>, //    packet_q: VecDeque<Packet>
+  packet_data: Vec<u8>
 }
 
 #[derive(Clone, Copy, Debug)]
@@ -314,6 +315,7 @@ impl Context {
           };
 
           let data = encode_frame(&mut self.seq, &mut self.fi, &mut fs);
+          self.packet_data.extend(data);
 
           fs.rec.pad();
 
@@ -322,7 +324,13 @@ impl Context {
 
           update_rec_buffer(&mut self.fi, fs);
 
-          Ok(Packet { data, rec, number: self.fi.number, frame_type: self.fi.frame_type })
+          if self.fi.show_frame {
+            let data = self.packet_data.clone();
+            self.packet_data = Vec::new();
+            Ok(Packet { data, rec, number: self.fi.number, frame_type: self.fi.frame_type })
+          } else {
+            Err(EncoderStatus::NeedMoreData)
+          }
         } else {
           Err(EncoderStatus::NeedMoreData)
         }