[FFmpeg-devel] CNG (consistent noise generation) patch for AC-3 decoder

Michael Niedermayer michaelni at gmx.at
Sun Jan 22 03:30:02 EET 2017


On Sat, Sep 03, 2016 at 03:45:17PM -0700, Jonathan Campbell wrote:
> On 09/03/2016 07:07 AM, James Almer wrote:
> > On 9/3/2016 7:50 AM, Jonathan Campbell wrote:
> >> +int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length) {
> >> +    unsigned int beg, end, segm;
> >> +    const AVCRC *avcrc;
> >> +    uint32_t crc = 1;
> >> +
> >> +    c->index = 0;
> > 
> > The AVLFG struct should IMO remain untouched if init is guaranteed to fail,
> > as it would be the case with an out or range length value, so move this after
> > that check.
> > 
> >> +    avcrc = av_crc_get_table(AV_CRC_32_IEEE); /* This can't fail. It's a well-defined table in crc.c */
> > 
> > You could also move this one below.
> > 
> >> +
> >> +    /* avoid integer overflow in the loop below. */
> >> +    if (length > (UINT_MAX / 128U)) return AVERROR(EINVAL);
> >> +
> >> +    /* across 64 segments of the incoming data,
> >> +     * do a running crc of each segment and store the crc as the state for that slot.
> >> +     * this works even if the length of the segment is 0 bytes. */
> >> +    beg = 0;
> >> +    for (segm = 0;segm < 64;segm++) {
> >> +        end = (((segm + 1) * length) / 64);
> >> +        crc = av_crc(avcrc, crc, data + beg, end - beg);
> > 
> > The thing about speed made me wonder, wouldn't using adler32 be faster?
> > If so, this feature could maybe even be enabled by default with it.
> > 
> >> +        c->state[segm] = (unsigned int)crc;
> >> +        beg = end;
> >> +    }
> >> +
> >> +    return 0;
> >> +}
> >> diff --git a/libavutil/lfg.h b/libavutil/lfg.h
> >> index ec90562..72eb673 100644
> >> --- a/libavutil/lfg.h
> >> +++ b/libavutil/lfg.h
> >> @@ -22,6 +22,8 @@
> >>  #ifndef AVUTIL_LFG_H
> >>  #define AVUTIL_LFG_H
> >>  
> >> +#include <stdint.h> /* uint8_t type */
> >> +
> >>  typedef struct AVLFG {
> >>      unsigned int state[64];
> >>      int index;
> >> @@ -29,6 +31,13 @@ typedef struct AVLFG {
> >>  
> >>  void av_lfg_init(AVLFG *c, unsigned int seed);
> >>  
> >> +/*
> > 
> > This is meant for doxygen, so /** like in every other function.
> > 
> >> + * Seed the state of the ALFG using binary data.
> >> + *
> >> + * Return value: 0 on success, negative value (AVERROR) on failure.
> >> + */
> >> +int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
> >> +
> >>  /**
> >>   * Get the next random unsigned 32-bit number using an ALFG.
> >>   *
> > 
> > No more comments for me.
> > 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> Here you go.

combined the related patches, added APIdocs update and pushed

thanks

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I am the wisest man alive, for I know one thing, and that is that I know
nothing. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170122/b2ef94e5/attachment.sig>


More information about the ffmpeg-devel mailing list