diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2019-02-12 15:35:22 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2019-02-12 15:35:22 +0300 |
commit | 09d7555653035494827d998859076d3a256077b7 (patch) | |
tree | 57d099b36b75d2bd317f6c2cf87f2e77e601db4a | |
parent | aebbe8c39b5c6f1935daa77c81ca53d9717757cd (diff) |
scc_enc: Don't assert if we're trying to write a line without anything buffered
This can happen at EOS if everything was fully written out before
already, for example.
-rw-r--r-- | gst-plugin-closedcaption/src/scc_enc.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gst-plugin-closedcaption/src/scc_enc.rs b/gst-plugin-closedcaption/src/scc_enc.rs index 921600684..888e8580f 100644 --- a/gst-plugin-closedcaption/src/scc_enc.rs +++ b/gst-plugin-closedcaption/src/scc_enc.rs @@ -117,13 +117,15 @@ impl State { // flush the previous line into the buffer, and push // the new packet to the, now empty, internal buffer if Some(&timecode) != self.expected_timecode.as_ref() { - let res = self.write_line(element); + let outbuf = self.write_line(element)?; + assert!(self.internal_buffer.is_empty()); self.internal_buffer.push(buffer); timecode.increment_frame(); self.expected_timecode = Some(timecode); - return res; + + return Ok(outbuf); } else if let Some(ref mut timecode) = self.expected_timecode { timecode.increment_frame(); } @@ -145,7 +147,9 @@ impl State { let mut outbuf = Vec::new(); let mut line_start = true; - assert!(!self.internal_buffer.is_empty()); + if self.internal_buffer.is_empty() { + return Ok(None); + } if self.need_headers { self.generate_headers(&mut outbuf); @@ -311,8 +315,8 @@ impl SccEnc { gst_error!(CAT, obj: pad, "Failed to push buffer to the pad"); return false; } - } else { - gst_error!(CAT, obj: pad, "Failed to write a line after EOS"); + } else if let Err(err) = outbuf { + gst_error!(CAT, obj: pad, "Failed to write a line after EOS: {:?}", err); return false; } pad.event_default(element, event) |