dvdspu: Handle vobsub packets smaller than 4 bytes

In particular, handle the case of an empty packet with size 0 bytes.

Partially fixes: #712643
This commit is contained in:
Jan Schmidt 2013-11-20 12:46:23 +11:00
parent b58ca88fb9
commit c336f7642c

View file

@ -950,7 +950,7 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
switch (dvdspu->spu_input_type) { switch (dvdspu->spu_input_type) {
case SPU_INPUT_TYPE_VOBSUB: case SPU_INPUT_TYPE_VOBSUB:
if (size > 4) { if (size >= 2) {
guint8 header[2]; guint8 header[2];
guint16 packet_size; guint16 packet_size;
@ -959,6 +959,10 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
if (packet_size == size) { if (packet_size == size) {
submit_new_spu_packet (dvdspu, dvdspu->partial_spu); submit_new_spu_packet (dvdspu, dvdspu->partial_spu);
dvdspu->partial_spu = NULL; 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) { } else if (packet_size < size) {
/* Somehow we collected too much - something is wrong. Drop the /* Somehow we collected too much - something is wrong. Drop the
* packet entirely and wait for a new one */ * packet entirely and wait for a new one */