[FFmpeg-devel] [PATCH 1/3] avcodec/rangecoder: factorize termination version code

Michael Niedermayer michael at niedermayer.cc
Fri Dec 28 18:34:34 EET 2018


On Sun, Dec 23, 2018 at 04:05:12PM +0100, Michael Niedermayer wrote:
> On Wed, Dec 19, 2018 at 10:35:25AM +0100, Jerome Martinez wrote:
> > On 19/12/2018 02:40, Michael Niedermayer wrote:
> > >Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> > >---
> > >  libavcodec/ffv1enc.c          | 10 +++-------
> > >  libavcodec/rangecoder.c       |  4 +++-
> > >  libavcodec/rangecoder.h       |  2 +-
> > >  libavcodec/snowenc.c          |  2 +-
> > >  libavcodec/sonic.c            |  2 +-
> > >  libavcodec/tests/rangecoder.c |  2 +-
> > >  6 files changed, 10 insertions(+), 12 deletions(-)
> > >
> > >diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
> > >index f5eb0feb4e..796d81f7c6 100644
> > >--- a/libavcodec/ffv1enc.c
> > >+++ b/libavcodec/ffv1enc.c
> > >@@ -449,7 +449,7 @@ static int write_extradata(FFV1Context *f)
> > >          put_symbol(c, state, f->intra = (f->avctx->gop_size < 2), 0);
> > >      }
> > >-    f->avctx->extradata_size = ff_rac_terminate(c);
> > >+    f->avctx->extradata_size = ff_rac_terminate(c, 0);
> > >      v = av_crc(av_crc_get_table(AV_CRC_32_IEEE), 0, f->avctx->extradata, f->avctx->extradata_size);
> > >      AV_WL32(f->avctx->extradata + f->avctx->extradata_size, v);
> > >      f->avctx->extradata_size += 4;
> > >@@ -1065,9 +1065,7 @@ retry:
> > >          encode_slice_header(f, fs);
> > >      }
> > >      if (fs->ac == AC_GOLOMB_RICE) {
> > >-        if (f->version > 2)
> > >-            put_rac(&fs->c, (uint8_t[]) { 129 }, 0);
> > >-        fs->ac_byte_count = f->version > 2 || (!x && !y) ? ff_rac_terminate(&fs->c) : 0;
> > >+        fs->ac_byte_count = f->version > 2 || (!x && !y) ? ff_rac_terminate(&fs->c, f->version > 2) : 0;
> > 
> > Moving the "129" stuff from FFV1 encoder code to rangecoder encoding part is
> > good for factorization, but there is no more mirroring of FFV1 encoding and
> > FFV1 decoding in that case ("129" stuff is still present in FFV1 decoder
> > code, not rangecoder decoding part), IMO this makes the FFV1 code more
> > difficult to understand.
> > 
> > Isn't it possible to have the same kind of modification for the decoding
> > part?
> 
> The encoder side factors 2 different termination procedures. If you need
> version 1 there you need version 1 you cannot use version 0 in its place.
> The decoder has to deal with buggy input and the kind of termination needed
> depends on where the termination is done it is not 1:1 bound to the bitstream
> version.
> The encoder OTOH does not produce the buggy variants so it does not have
> anything symmetric for that.
> 
> There are also 3 places where termination happens, each is different
> even if one disregards the old bug.
> One place also needs further investigation to understand the implications
> for the bitstream compatibility in case its changed.
> 
> So while i can factor the decoder side in a way similar to the encoder
> this will still not make the code look more similar.
> 
> So i suggest to apply this patchset as it is.
> I do have some patches locally that mess with the decoder side of the related
> code but the code does not become simpler even thhough it does get checked a
> bit more fully. So this is not really what you asked for IIUC

Will apply this patchset soon unless there are objections

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20181228/99857d77/attachment.sig>


More information about the ffmpeg-devel mailing list