From patchwork Sun Jun 21 18:42:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gautam Ramakrishnan X-Patchwork-Id: 20543 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id BE03A44A2DA for ; Sun, 21 Jun 2020 22:04:19 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A62D68B854; Sun, 21 Jun 2020 22:04:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f66.google.com (mail-qv1-f66.google.com [209.85.219.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A7DE668B0A1 for ; Sun, 21 Jun 2020 22:04:12 +0300 (EEST) Received: by mail-qv1-f66.google.com with SMTP id m9so526056qvx.5 for ; Sun, 21 Jun 2020 12:04:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1o+qULfDh1aGPOSxqgUV0g5jZuBqZ33Y55e3IxK+N/4=; b=vE51UgVY4kKOv97Al8U2PZ3v4TsGdL0rZW5t8PyhPT7g4GLBocvnuDrnWRHOwZfwVT uVo8xw34ceI1XpMuHJJKh+COL6csVqIm2h4NFMN4JCkKcELn6XaOqyCZgbGSbHejaEmY Et96UZU2jyWCv2YwUZQAjEVhaKeVjvkzcTPmUPZoc7wsJslShe2HKHXC8EhEflkuSXyO W9uDLWsTLqsDrNNfCl+9D+wdh53dUUSaTVNgmp5uk4zFaFcv7xP+WjLwS7vVHKXM6EK6 rmIiC5awrRRCmyT1MFUsvSYynLe2plqKrJGzR6HpvHE6vVhMlLLRWvrbCu8DQGIayGc1 kXUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1o+qULfDh1aGPOSxqgUV0g5jZuBqZ33Y55e3IxK+N/4=; b=Hc+I4QYTgvlBliZZtFn+I4hUxYT4m7a1StwzvRl2hP/PaumiJjDcKoqFQgaS8q6lwV IwxymXXhA1aLximYHWuu/dsSTQzhojkKUb6gJN+hI0gA7JcCVcY4bHAf4go2k0kvXhSo bog+mXbpoQb71qKIsP2AvQ0C7q22wBfXYeGTPHaLuFdoLBhgRtj2QZxOdAUdsJ6qRDA9 RSXjieagBVIhMRQj8IYBNhAZVFkrV9k+PL8VoMtS+FCmp662ud+741uOR+lrKY7B/C9q qa2GcBMP3JiKm0mL02Y/sTlrbpICdd4ZoacBdpAwitAqlwNpBYv+KWueM5EicPVxcVAu Q8RQ== X-Gm-Message-State: AOAM5309mJeZuhyXNXMB2R+UkeWuuxAr6Kuw0dGQNfP4+HRyeUyOLy+E eClhV/jKUBxPy5IV+NzjitiZtrGkr7U= X-Google-Smtp-Source: ABdhPJz1aUSF7NX5Enp76U/4VAhjFPuCBYSJG2sCxL8DUuB4joo5wOdJDd8Yt29qc+lCWn7nmdq1WQ== X-Received: by 2002:a62:ee08:: with SMTP id e8mr15891914pfi.93.1592764951270; Sun, 21 Jun 2020 11:42:31 -0700 (PDT) Received: from localhost.localdomain ([122.167.28.239]) by smtp.gmail.com with ESMTPSA id s1sm10786414pjp.14.2020.06.21.11.42.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2020 11:42:30 -0700 (PDT) From: gautamramk@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 22 Jun 2020 00:12:06 +0530 Message-Id: <20200621184208.27665-3-gautamramk@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200621184208.27665-1-gautamramk@gmail.com> References: <20200621184208.27665-1-gautamramk@gmail.com> Subject: [FFmpeg-devel] [PATCH 3/5] libavcodec/jpeg2000dec.c Fixed WRITE_FRAME and tile co-ordinates: X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Gautam Ramakrishnan MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Gautam Ramakrishnan libopenjpeg2000 uses ceiling division while dividing tile co-ordinates with the sample separation. Also, corrections were made to the WRITE_FRAME macro. --- libavcodec/jpeg2000dec.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 05e85f4317..546a646668 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -978,12 +978,11 @@ static int init_tile(Jpeg2000DecoderContext *s, int tileno) comp->coord_o[0][1] = tile->coord[0][1]; comp->coord_o[1][0] = tile->coord[1][0]; comp->coord_o[1][1] = tile->coord[1][1]; - if (compno) { - comp->coord_o[0][0] /= s->cdx[compno]; - comp->coord_o[0][1] /= s->cdx[compno]; - comp->coord_o[1][0] /= s->cdy[compno]; - comp->coord_o[1][1] /= s->cdy[compno]; - } + + comp->coord_o[0][0] = ff_jpeg2000_ceildiv(comp->coord_o[0][0], s->cdx[compno]); + comp->coord_o[0][1] = ff_jpeg2000_ceildiv(comp->coord_o[0][1], s->cdx[compno]); + comp->coord_o[1][0] = ff_jpeg2000_ceildiv(comp->coord_o[1][0], s->cdy[compno]); + comp->coord_o[1][1] = ff_jpeg2000_ceildiv(comp->coord_o[1][1], s->cdy[compno]); comp->coord[0][0] = ff_jpeg2000_ceildivpow2(comp->coord_o[0][0], s->reduction_factor); comp->coord[0][1] = ff_jpeg2000_ceildivpow2(comp->coord_o[0][1], s->reduction_factor); @@ -1936,18 +1935,23 @@ static inline void tile_codeblocks(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile float *datap = comp->f_data; \ int32_t *i_datap = comp->i_data; \ int cbps = s->cbps[compno]; \ - int w = tile->comp[compno].coord[0][1] - s->image_offset_x; \ + int w = tile->comp[compno].coord[0][1] - \ + ff_jpeg2000_ceildiv(s->image_offset_x, s->cdx[compno]); \ + int h = tile->comp[compno].coord[1][1] - \ + ff_jpeg2000_ceildiv(s->image_offset_y, s->cdy[compno]); \ int plane = 0; \ \ if (planar) \ plane = s->cdef[compno] ? s->cdef[compno]-1 : (s->ncomponents-1); \ \ - y = tile->comp[compno].coord[1][0] - s->image_offset_y / s->cdy[compno]; \ + y = tile->comp[compno].coord[1][0] - \ + ff_jpeg2000_ceildiv(s->image_offset_y, s->cdy[compno]); \ line = (PIXEL *)picture->data[plane] + y * (picture->linesize[plane] / sizeof(PIXEL));\ - for (; y < tile->comp[compno].coord[1][1] - s->image_offset_y; y++) { \ + for (; y < h; y++) { \ PIXEL *dst; \ \ - x = tile->comp[compno].coord[0][0] - s->image_offset_x / s->cdx[compno]; \ + x = tile->comp[compno].coord[0][0] - \ + ff_jpeg2000_ceildiv(s->image_offset_x, s->cdx[compno]); \ dst = line + x * pixelsize + compno*!planar; \ \ if (codsty->transform == FF_DWT97) { \