Message ID | 20200926102804.228089-9-andreas.rheinhardt@gmail.com |
---|---|
State | Accepted |
Commit | 68b6614e389955016a77ff182f0a8bb03d41ae52 |
Headers | show |
Series | [FFmpeg-devel,01/25] avcodec/photocd: Simplify parsing Huffman tables a bit | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
On Sat, Sep 26, 2020 at 12:27:48PM +0200, Andreas Rheinhardt wrote: > The MagicYUV decoder currently sets both the length and the symbol field > of an array of HuffEntries; hereby the symbol of the ith entry (0-based) > is just i. Then said array gets sorted so that entries with greater > length are at the end and entries with the same length are ordered so > that those with smaller symbols are at the end. Afterwards the newly > sorted array is traversed in reverse order. This commit instead inverts > the ordering and traverses the array in its ordinary order in order to > simplify understanding. apply as you wish. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> > --- > This commit actually only exists to simplify understanding of the next > two commits; apart from that, it is unnecessary. > > libavcodec/magicyuv.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c > index 93ee739093..1b3f4cfc6b 100644 > --- a/libavcodec/magicyuv.c > +++ b/libavcodec/magicyuv.c > @@ -77,24 +77,23 @@ typedef struct MagicYUVContext { > static int huff_cmp_len(const void *a, const void *b) > { > const HuffEntry *aa = a, *bb = b; > - return (aa->len - bb->len) * 4096 + bb->sym - aa->sym; > + return (bb->len - aa->len) * 4096 + aa->sym - bb->sym; > } > > static int huff_build(HuffEntry he[], VLC *vlc, int nb_elems) > { > uint32_t code; > - int i; > > AV_QSORT(he, nb_elems, HuffEntry, huff_cmp_len); > > code = 1; > - for (i = nb_elems - 1; i >= 0; i--) { > + for (unsigned i = 0; i < nb_elems; i++) { > he[i].code = code >> (32 - he[i].len); > code += 0x80000000u >> (he[i].len - 1); > } > > ff_free_vlc(vlc); > - return ff_init_vlc_sparse(vlc, FFMIN(he[nb_elems - 1].len, 12), nb_elems, > + return ff_init_vlc_sparse(vlc, FFMIN(he[0].len, 12), nb_elems, > &he[0].len, sizeof(he[0]), sizeof(he[0].len), > &he[0].code, sizeof(he[0]), sizeof(he[0].code), > &he[0].sym, sizeof(he[0]), sizeof(he[0].sym), 0); > -- > 2.25.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c index 93ee739093..1b3f4cfc6b 100644 --- a/libavcodec/magicyuv.c +++ b/libavcodec/magicyuv.c @@ -77,24 +77,23 @@ typedef struct MagicYUVContext { static int huff_cmp_len(const void *a, const void *b) { const HuffEntry *aa = a, *bb = b; - return (aa->len - bb->len) * 4096 + bb->sym - aa->sym; + return (bb->len - aa->len) * 4096 + aa->sym - bb->sym; } static int huff_build(HuffEntry he[], VLC *vlc, int nb_elems) { uint32_t code; - int i; AV_QSORT(he, nb_elems, HuffEntry, huff_cmp_len); code = 1; - for (i = nb_elems - 1; i >= 0; i--) { + for (unsigned i = 0; i < nb_elems; i++) { he[i].code = code >> (32 - he[i].len); code += 0x80000000u >> (he[i].len - 1); } ff_free_vlc(vlc); - return ff_init_vlc_sparse(vlc, FFMIN(he[nb_elems - 1].len, 12), nb_elems, + return ff_init_vlc_sparse(vlc, FFMIN(he[0].len, 12), nb_elems, &he[0].len, sizeof(he[0]), sizeof(he[0].len), &he[0].code, sizeof(he[0]), sizeof(he[0].code), &he[0].sym, sizeof(he[0]), sizeof(he[0].sym), 0);
The MagicYUV decoder currently sets both the length and the symbol field of an array of HuffEntries; hereby the symbol of the ith entry (0-based) is just i. Then said array gets sorted so that entries with greater length are at the end and entries with the same length are ordered so that those with smaller symbols are at the end. Afterwards the newly sorted array is traversed in reverse order. This commit instead inverts the ordering and traverses the array in its ordinary order in order to simplify understanding. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> --- This commit actually only exists to simplify understanding of the next two commits; apart from that, it is unnecessary. libavcodec/magicyuv.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)