GNOME Bugzilla – Bug 451145
[vorbisdec] errors out on 0-sized packets
Last modified: 2007-06-27 09:50:12 UTC
Please describe the problem: I discovered that this weeks episode of the Atheist Experience podcast does not play in Banshee nor in Totem but it will play using ogg123. It complains that it cannot decode the mediastream. Direct download: http://www.atheist-experience.com/archive/AtheistExp-2007-06-24.ogg Steps to reproduce: 1. Download file 2. open in totem Actual results: could not decode mediastream error Expected results: correct playback Does this happen every time? 100% Other information: Running Fedora Development 20070625 on x86_64 gstreamer-0.10.13-2.fc8 gstreamer-plugins-good-0.10.6-1.fc8
Looks like vorbisdec errors out because it gets a 0-sized packet. Not sure if vorbisdec should just skip those or oggdemux should not output them in the first place, I'm leaning towards the first though. oggzdump output (same as oggdemux ! fakesink -v really) 00:00:00.000: serialno 0000031415, granulepos 0, packetno 0 *** bos: 30 bytes 00:00:00.000: serialno 0000031415, granulepos -1, packetno 1: 260 bytes 00:00:00.000: serialno 0000031415, granulepos 0, packetno 2: 3.181 kB 00:00:00.667: serialno 0000031415, granulepos -1, packetno 3: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 4: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 5: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 6: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 7: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 8: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 9: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 10: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 11: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 12: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 13: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 14: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 15: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 16: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 17: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 18: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 19: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 20: 62 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 21: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 22: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 23: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 24: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 25: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 26: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 27: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 28: 157 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 29: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 30: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 31: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 32: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 33: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 34: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 35: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 36: 127 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 37: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 38: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 39: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 40: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 41: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 42: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 43: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 44: 124 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 45: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 46: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 47: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 48: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 49: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 50: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 51: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 52: 131 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 53: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 54: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 55: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 56: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 57: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 58: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 59: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 60: 128 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 61: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 62: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 63: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 64: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 65: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 66: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 67: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 68: 125 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 69: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 70: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 71: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 72: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 73: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 74: 0 bytes 00:00:00.667: serialno 0000031415, granulepos -1, packetno 75: 0 bytes ...
http://xiph.org/vorbis/doc/framing.html says under 'Packet segmentation': "Note also that a 'nil' (zero length) packet is not an error; it consists of nothing more than a lacing value of zero in the header."
Note that that's the ogg documentation, not vorbis. Zero length vorbis packets are not legal, and cannot be decoded. Erroring out is acceptable behaviour, but skipping them would be ok too, I suppose. Oggdemux certainly needs to output them (theora has a well-defined meaning for zero-length packets, for instance).
* ext/vorbis/vorbisdec.c: (vorbis_dec_decode_buffer): Don't error out on 0-sized packets, just emit a warning because this is not a fatal error. Fixes #451145.