diff options
-rw-r--r-- | src/demuxers/demux_asf.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c index b19023c5d..2c7bfaa14 100644 --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_asf.c,v 1.26 2002/03/17 00:05:03 guenter Exp $ + * $Id: demux_asf.c,v 1.27 2002/03/17 14:34:06 guenter Exp $ * * demultiplexer for asf streams * @@ -585,9 +585,10 @@ static void asf_reorder(demux_asf_t *this, uint8_t *src, int len){ static int asf_get_packet(demux_asf_t *this) { - int timestamp, hdr_size; + int timestamp, hdr_size; uint32_t sig = 0; - int duration; + int duration; + int packet_size; hdr_size = 11; @@ -599,23 +600,33 @@ static int asf_get_packet(demux_asf_t *this) { this->segtype = get_byte(this); this->packet_padsize = 0; - /* FIXME: really not necessary? - patch submitted by Andrei Lahun <Uman@editec-lotteries.com> + if (this->packet_flags & 0x40) { - if (this->packet_flags & 0x40) { - get_le16(this); - printf ("demux_asf: absolute size ignored\n"); - hdr_size += 2; - } - */ - - if (this->packet_flags & 0x10) { - this->packet_padsize = get_le16(this); + /* packet size given */ + + packet_size = get_le16(this); + printf ("demux_asf: absolute packet size is %d\n", packet_size); hdr_size += 2; - } else if (this->packet_flags & 0x08) { - this->packet_padsize = get_byte(this); - hdr_size++; + + if (this->packet_flags & 0x10) { + /* FIXME: ignore ? this->packet_padsize =*/ get_le16(this); + hdr_size += 2; + } else if (this->packet_flags & 0x08) { + /* FIXME: ignore ? this->packet_padsize =*/ get_byte(this); + hdr_size++; + } + } else { + packet_size = this->packet_size; + + if (this->packet_flags & 0x10) { + this->packet_padsize = get_le16(this); + hdr_size += 2; + } else if (this->packet_flags & 0x08) { + this->packet_padsize = get_byte(this); + hdr_size++; + } } + timestamp = get_le32(this); duration = get_le16(this) ; /* duration */ if (this->packet_flags & 0x01) { @@ -627,11 +638,11 @@ static int asf_get_packet(demux_asf_t *this) { this->frame = 0; - this->packet_size_left = this->packet_size - hdr_size; + this->packet_size_left = packet_size - hdr_size; /* - printf ("demux_asf: new packet, size = %d, flags = 0x%02x, padsize = %d\n", - this->packet_size_left, this->packet_flags, this->packet_padsize); + printf ("demux_asf: new packet, size = %d, flags = 0x%02x, padsize = %d\n", + this->packet_size_left, this->packet_flags, this->packet_padsize); */ return 1; |