dvdspu: Handle vobsub packets smaller than 4 bytes
authorJan Schmidt <jan@centricular.com>
Wed, 20 Nov 2013 01:46:23 +0000 (12:46 +1100)
committerJan Schmidt <jan@centricular.com>
Wed, 20 Nov 2013 15:21:01 +0000 (02:21 +1100)
In particular, handle the case of an empty packet with size 0 bytes.

Partially fixes: #712643

gst/dvdspu/gstdvdspu.c

index 8533935..e0edbec 100644 (file)
@@ -950,7 +950,7 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 
   switch (dvdspu->spu_input_type) {
     case SPU_INPUT_TYPE_VOBSUB:
-      if (size > 4) {
+      if (size >= 2) {
         guint8 header[2];
         guint16 packet_size;
 
@@ -959,6 +959,10 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
         if (packet_size == size) {
           submit_new_spu_packet (dvdspu, dvdspu->partial_spu);
           dvdspu->partial_spu = NULL;
+        } else if (packet_size == 0) {
+          GST_LOG_OBJECT (dvdspu, "Discarding empty SPU buffer");
+          gst_buffer_unref (dvdspu->partial_spu);
+          dvdspu->partial_spu = NULL;
         } else if (packet_size < size) {
           /* Somehow we collected too much - something is wrong. Drop the
            * packet entirely and wait for a new one */