diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2012-06-27 10:24:45 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2012-06-27 10:24:45 +0200 |
commit | 234d15c9d036eebbf56d71be705a29fbe7c16141 (patch) | |
tree | 983b81f8f58957f4dfd86002f8999b1b4100ce19 /gst/asfdemux/asfpacket.c | |
parent | 53cfef3e0f143d8687fd39d9d3bfba936b3680a1 (diff) |
asf: unmap packets
Diffstat (limited to 'gst/asfdemux/asfpacket.c')
-rw-r--r-- | gst/asfdemux/asfpacket.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c index 1e64efc0..e3afd677 100644 --- a/gst/asfdemux/asfpacket.c +++ b/gst/asfdemux/asfpacket.c @@ -512,7 +512,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) /* need at least two payload flag bytes, send time, and duration */ if (G_UNLIKELY (size < 2 + 4 + 2)) { GST_WARNING_OBJECT (demux, "Packet size is < 8"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; } packet.buf = buf; @@ -538,7 +539,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) /* still need at least two payload flag bytes, send time, and duration */ if (size <= (1 + ec_len) + 2 + 4 + 2) { GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + goto done; } data += 1 + ec_len; @@ -562,7 +564,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) if (G_UNLIKELY (size < 6)) { GST_WARNING_OBJECT (demux, "Packet size is < 6"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + goto done; } packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND; @@ -583,7 +586,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) { GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; } size -= packet.padding; @@ -597,7 +601,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) if (size < demux->packet_size - packet.length) { /* the buffer is smaller than the implicit padding */ GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; } else { /* subtract the implicit padding */ size -= (demux->packet_size - packet.length); @@ -609,7 +614,8 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) if (G_UNLIKELY (size < 1)) { GST_WARNING_OBJECT (demux, "No room more in buffer"); - return GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; } num = (GST_READ_UINT8 (data) & 0x3F) >> 0; @@ -640,6 +646,7 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) } } +done: gst_buffer_unmap (buf, &map); return ret; } |