[mythtv] 0.21 and ffmpeg handling of corrupt ac3
Tom Dexter
digitalaudiorock at gmail.com
Fri Apr 18 16:56:51 UTC 2008
On Wed, Apr 16, 2008 at 5:31 PM, Tom Dexter <digitalaudiorock at gmail.com> wrote:
> Hey folks...before I continue, as someone who just recently upgraded
> to 0.21 under Gentoo, let me just extend a huge thank you for all the
> work you do. 0.21 simply rocks.
>
> Several of us on the users mailing list noticed that, after the 0.21
> upgrade, the audio of recorded DVB broadcasts didn't appear to be
> handling corrupt ac3 as gracefully as it used to. Some degree of
> corruption, especially with OTA recording is almost inevitable.
>
> What we found was that in 0.20.2 the tendency when mythtv encountered
> corruption in a DVB transport stream, more often than not, was for the
> audio to drop out (brief silence) if anything. However in 0.21, any
> file corruption seemed to almost invariably cause full scale digital
> chirps...the kind that can knock you out of your seat if you're
> listening at any volume. Here's the archive of the thread on -users:
>
> http://www.gossamer-threads.com/lists/mythtv/users/329267
>
> I could see that between 0.20-fixes and 0.21-fixes,
> libavcodec/ac3dec.c had obviously been totally re-written by the
> ffmpeg devs. After some poking around I discovered that newer
> versions of ffmpeg have had crc error checking added to
> libavcodec/ac3dec.c for this reason. The original discussion on
> ffmpeg-devel, as well as the original proposed patch starts here:
>
> http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2007-September/034883.html
>
> That thread seems to have a very heated debate about it for some
> reason, but in any case it looks like newer versions do in fact have
> error checking. For my own purposes, I hacked together a modified
> version of the original patch posted at the above link. For
> simplicity I made the check unconditional (regardless of
> avctx->error_resilience). That patch (designed for SVN 16944) looks
> like this:
>
> Index: libavcodec/ac3dec.c
> ===================================================================
> --- libs/libavcodec/ac3dec.c
> +++ libs/libavcodec/ac3dec.c
> @@ -37,6 +37,7 @@
> #include "bitstream.h"
> #include "dsputil.h"
> #include "random.h"
> +#include "crc.h"
>
> /**
> * Table of bin locations for rematrixing bands
> @@ -1121,6 +1122,12 @@
> return -1;
> }
>
> + if (av_crc(av_crc8005, 0, buf + 2, buf_size - 2)) {
> + av_log(avctx, AV_LOG_ERROR, "CRC error\n");
> + *data_size = 0;
> + return buf_size;
> + }
> +
> avctx->sample_rate = ctx->sampling_rate;
> avctx->bit_rate = ctx->bit_rate;
>
> I had a recording that I had saved for testing with corrupt audio in a
> known spot. Without the patch I'd get this in my frontend logs:
>
> 2008-04-15 20:11:34.573 [ac3 @ 0xb73e3028]delta bit allocation strategy reserved
> 2008-04-15 20:11:34.573 [ac3 @ 0xb73e3028]error parsing the audio block
>
> ...along with absolutely awful chirps. After applying the above patch
> the same spot in the recording causes this in the frontend logs:
>
> 2008-04-16 16:31:19.787 [ac3 @ 0xb73e7028]CRC error
> 2008-04-16 16:31:20.535 [ac3 @ 0xb73e7028]CRC error
> 2008-04-16 16:31:20.706 [ac3 @ 0xb73e7028]CRC error
>
> ...along with no more than slight audio dropouts...big big improvement.
>
> I'm not sure what the ideal way to implement this would be, but I
> think many DVB users (especially us OTA users) would love to have this
> one addressed. I haven't logged any bug as yet.
>
> Thanks again!
>
> Tom
>
It occurred to me that, if at any point mythtv uses a newer version of
ffmpeg, this issue will pretty much fix itself. In any case, if
anyone thinks I should log a bug, and maybe post my patch for anyone
looking for a quick fix, let me know. I already posted it to the
users list.
Tom
More information about the mythtv-dev
mailing list