From 8ea6157d83277a089137fb8113174bc4e7a8ffd2 Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Thu, 18 Aug 2011 19:23:52 +0200 Subject: xmv: Read the video packet data first, then swap its bytes Signed-off-by: Michael Niedermayer --- libavformat/xmv.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'libavformat/xmv.c') diff --git a/libavformat/xmv.c b/libavformat/xmv.c index e9f0c834bc..9c17a14fa1 100644 --- a/libavformat/xmv.c +++ b/libavformat/xmv.c @@ -450,7 +450,7 @@ static int xmv_fetch_video_packet(AVFormatContext *s, int result; uint32_t frame_header; uint32_t frame_size, frame_timestamp; - uint32_t i; + uint8_t *data, *end; /* Seek to it */ if (avio_seek(pb, video->data_offset, SEEK_SET) != video->data_offset) @@ -465,17 +465,17 @@ static int xmv_fetch_video_packet(AVFormatContext *s, if ((frame_size + 4) > video->data_size) return AVERROR(EIO); - /* Create the packet */ - result = av_new_packet(pkt, frame_size); - if (result) + /* Get the packet data */ + result = av_get_packet(pb, pkt, frame_size); + if (result != frame_size) return result; /* Contrary to normal WMV2 video, the bit stream in XMV's * WMV2 is little-endian. * TODO: This manual swap is of course suboptimal. */ - for (i = 0; i < frame_size; i += 4) - AV_WB32(pkt->data + i, avio_rl32(pb)); + for (data = pkt->data, end = pkt->data + frame_size; data < end; data += 4) + AV_WB32(data, AV_RL32(data)); pkt->stream_index = video->stream_index; -- cgit v1.2.3