Browse Source

xmv: Read the video packet data first, then swap its bytes

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n0.9
Sven Hesse Michael Niedermayer 14 years ago
parent
commit
8ea6157d83
1 changed files with 6 additions and 6 deletions
  1. +6
    -6
      libavformat/xmv.c

+ 6
- 6
libavformat/xmv.c View File

@@ -450,7 +450,7 @@ static int xmv_fetch_video_packet(AVFormatContext *s,
int result; int result;
uint32_t frame_header; uint32_t frame_header;
uint32_t frame_size, frame_timestamp; uint32_t frame_size, frame_timestamp;
uint32_t i;
uint8_t *data, *end;


/* Seek to it */ /* Seek to it */
if (avio_seek(pb, video->data_offset, SEEK_SET) != video->data_offset) 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) if ((frame_size + 4) > video->data_size)
return AVERROR(EIO); 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; return result;


/* Contrary to normal WMV2 video, the bit stream in XMV's /* Contrary to normal WMV2 video, the bit stream in XMV's
* WMV2 is little-endian. * WMV2 is little-endian.
* TODO: This manual swap is of course suboptimal. * 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; pkt->stream_index = video->stream_index;




Loading…
Cancel
Save