diff mbox series

[FFmpeg-devel,09/25] avcodec/magicyuv: Don't invert order unnecessarily

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

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Andreas Rheinhardt Sept. 26, 2020, 10:27 a.m. UTC
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(-)

Comments

Paul B Mahol Sept. 26, 2020, 11:03 a.m. UTC | #1
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 mbox series

Patch

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);