[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gstreamer-cvs
Subject:    gst-plugins-bad: hlsdemux: Do not push last buffer after error
From:       thiagoss () kemper ! freedesktop ! org (Thiago Sousa Santos)
Date:       2014-04-29 22:01:39
Message-ID: 20140429220139.07200761E3 () kemper ! freedesktop ! org
[Download RAW message or body]

Module: gst-plugins-bad
Branch: master
Commit: 940576244cbb8857fcceace1d92934018e20a8d4
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=940576244cbb8857fcceace1d92934018e20a8d4


Author: Thiago Santos <ts.santos@sisa.samsung.com>
Date:   Tue Apr 29 18:15:05 2014 -0300

hlsdemux: Do not push last buffer after error

In decryption scenario, a buffer is always stored to be sent later
to wait for more data or EOS to be able to strip the final bytes
if requested. In case an error hapenned this buffer can be ignored
and not pushed downstream.

---

 ext/hls/gsthlsdemux.c |   39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index b7ef8ac..080a39b 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -951,23 +951,28 @@ _src_event (GstPad * pad, GstObject * parent, GstEvent * event)
       gst_adapter_clear (demux->adapter);
 
       /* pending buffer is only used for encrypted streams */
-      if (demux->pending_buffer) {
-        GstMapInfo info;
-        gsize unpadded_size;
-
-        /* Handle pkcs7 unpadding here */
-        gst_buffer_map (demux->pending_buffer, &info, GST_MAP_READ);
-        unpadded_size = info.size - info.data[info.size - 1];
-        gst_buffer_unmap (demux->pending_buffer, &info);
-
-        gst_buffer_resize (demux->pending_buffer, 0, unpadded_size);
-
-        /* TODO check return */
-        demux->download_total_time +=
-            g_get_monotonic_time () - demux->download_start_time;
-        demux->download_total_bytes +=
-            gst_buffer_get_size (demux->pending_buffer);
-        gst_pad_push (demux->srcpad, demux->pending_buffer);
+      if (demux->last_ret == GST_FLOW_OK) {
+        if (demux->pending_buffer) {
+          GstMapInfo info;
+          gsize unpadded_size;
+
+          /* Handle pkcs7 unpadding here */
+          gst_buffer_map (demux->pending_buffer, &info, GST_MAP_READ);
+          unpadded_size = info.size - info.data[info.size - 1];
+          gst_buffer_unmap (demux->pending_buffer, &info);
+
+          gst_buffer_resize (demux->pending_buffer, 0, unpadded_size);
+
+          demux->download_total_time +=
+              g_get_monotonic_time () - demux->download_start_time;
+          demux->download_total_bytes +=
+              gst_buffer_get_size (demux->pending_buffer);
+          demux->last_ret = gst_pad_push (demux->srcpad, demux->pending_buffer);
+
+          demux->pending_buffer = NULL;
+        }
+      } else {
+        gst_buffer_unref (demux->pending_buffer);
         demux->pending_buffer = NULL;
       }
 

_______________________________________________
gstreamer-commits mailing list
gstreamer-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/gstreamer-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic