On Mon, Aug 24, 2020 at 11:10:31PM +0530, gautamr...@gmail.com wrote:
> From: Gautam Ramakrishnan <gautamr...@gmail.com>
> 
> The implementation of tag tree encoding was incorrect.
> However, this error was not visible as the current j2k
> encoder encodes only 1 layer.
> This patch fixes tag tree coding for JPEG2000 such tag
> tree coding would work for multi layer encoding.
> ---
>  libavcodec/j2kenc.c   | 41 ++++++++++++++++++++++++-----------------
>  libavcodec/jpeg2000.c |  1 +
>  libavcodec/jpeg2000.h |  1 +
>  3 files changed, 26 insertions(+), 17 deletions(-)
> 
> diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> index 16863f8e8c..d9777fe07f 100644
> --- a/libavcodec/j2kenc.c
> +++ b/libavcodec/j2kenc.c
> @@ -242,27 +242,34 @@ static void j2k_flush(Jpeg2000EncoderContext *s)
>  static void tag_tree_code(Jpeg2000EncoderContext *s, Jpeg2000TgtNode *node, 
> int threshold)
>  {
>      Jpeg2000TgtNode *stack[30];
> -    int sp = 1, curval = 0;
> -    stack[0] = node;
> +    int sp = -1, curval = 0;
>  
> -    node = node->parent;
> -    while(node){
> -        if (node->vis){
> -            curval = node->val;
> -            break;
> -        }
> -        node->vis++;
> -        stack[sp++] = node;
> +    while(node->parent){
> +        stack[++sp] = node;
>          node = node->parent;
>      }
> -    while(--sp >= 0){
> -        if (stack[sp]->val >= threshold){
> -            put_bits(s, 0, threshold - curval);
> -            break;
> +
> +    while (1) {
> +        if (curval > node->temp_val)
> +            node->temp_val = curval;
> +        else {
> +            curval = node->temp_val;
>          }
> -        put_bits(s, 0, stack[sp]->val - curval);
> -        put_bits(s, 1, 1);
> -        curval = stack[sp]->val;
> +        while (curval < threshold) {
> +            if (curval >= node->val) {
> +                if (!node->vis) {
> +                    node->vis = 1;
> +                    put_bits(s, 1, 1);
> +                }
> +                break;
> +            }
> +            put_bits(s, 0, 1);
> +            curval++;
> +        }

why is the put_bits(s, 0, stack[sp]->val - curval);
changed into 1 bit at a time calls ?
a single call should still work with the modified loop
a single call may be faster ...

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Dictatorship naturally arises out of democracy, and the most aggravated
form of tyranny and slavery out of the most extreme liberty. -- Plato

Attachment: signature.asc
Description: PGP signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to