[MPlayer-users] arm bitstream reader problems with svq3, mjpeg
Steve Magoun
smagoun at mac.com
Thu Apr 19 20:49:14 CEST 2007
Hi,
I'm having some trouble with Sorenson v3 and MJPEG content on ARM
(XScale LE). It looks like A32_BITSTREAM_READER is broken (causing
trouble with svq3). I disabled the A32 reader, which in turn broke
MJPEG playback. Naturally I want both to work.
All Sorenson 3 content is scrambled, and MPlayer outputs lots of
errors like the following when playing an svq3 movie:
[svq3 @ 0x571c94]warning: first frame is no keyframe
[svq3 @ 0x571c94]error while decoding block
[svq3 @ 0x571c94]error while decoding MB 27 1
Error while decoding frame!
I'm using mplayer svn 23017 with libavcodec and libavformat svn 8738
(as someone already reported, changes to the ac3 parser break
compilation in libavcodec/libavformat 8739). Kernel is 2.6.13.4,
distro is a Montavista Linux derivative. libc is 2.3.2. I'm cross-
compiling with gcc 3.4.5, though I get the same results compiling
natively on ARM with gcc 3.3.1. Compiling at -O0 doesn't make a
difference.
I dug in a bit and found GET_CACHE was returning bad data.
Specifically, for the sample at http://samples.mplayerhq.hu/V-codecs/
SVQ3/blade_2_m480.mov:
In the very first call to svq3_get_ue_golomb for that sample, 'buf'
is populated with 0x3e25f040. On x86 I observed the value 0xf897c100,
which is 0x3e25f040<<2.
Disabling A32_BITSTREAM_READER in libavcodec/bitstream.h fixes the
problem - 'buf' contains 0xf897c100 the first time through, and the
errors/artifacts are gone.
Unfortunately that change breaks MJPEG playback (other codecs seem
unaffected). While there are no errors in the console, MJPEG content
has numerous green + purple vertical lines - it looks like the luma
is more or less intact, but chroma is completely broken. The same
MJPEG content works fine when A32_BITSTREAM_READER is enabled.
For the MJPEG content I've been looking at http://
samples.mplayerhq.hu/V-codecs/MJPEGs/dancing.avi . When playing that
sample, the very first call to GET_CACHE inside mjpeg.c's
decode_block returns 0x2dd2bec1 when A32_BITSTREAM_READER is enabled
and 0x2dd2bec0 when it's disabled. On x86 the value is 0x2dd2bec0. It
looks like fixing the broken reader unmasks a bug in the MJPEG decoder??
Could someone familiar with the bitstream reader suggest a fix that
would work for both formats?
Thanks,
Steve
More information about the MPlayer-users
mailing list