From patchwork Wed Jul 29 15:49:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gautam Ramakrishnan X-Patchwork-Id: 21369 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 9431944AB6C for ; Wed, 29 Jul 2020 18:56:50 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 656FF68BA84; Wed, 29 Jul 2020 18:56:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 74A1468BA83 for ; Wed, 29 Jul 2020 18:56:43 +0300 (EEST) Received: by mail-pg1-f196.google.com with SMTP id p3so14459242pgh.3 for ; Wed, 29 Jul 2020 08:56:43 -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; bh=pKycFK/sV4IEt7PVvi0/YkAt9wLhOQW4JosVJn3wM5A=; b=Wo2EozRNfVC5HI8v9NQ4dcsZJLSMCfVbPIY+xDyuaRDPn8bvjV/V/x+Z3O3OrnfhWj iMkAWYImP78aHaaplrjuBgrfJuTVUXWiI8s8IG1gSCYNTd7MX6PsjtcpOBmA85lqctZL CoxXQ9U2U3H/gtFdMIHQY98oNqA/pYbU0gdakl5s9cuwicGzV3pXlfRvRzs6t7m6WsZB 0+znOGmMc3eoUeBo8UrtaMUHiDBohzvXPh4UVHlDd7Nwdg9T7Suf+hOwpOdYPknq4um2 UOdbvK44GNaVZCLL7pxZt9U+FTuAKDe7zoQzazc6P8evNu8S9fXukA0QmxHfzgf8W03C /HFg== 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; bh=pKycFK/sV4IEt7PVvi0/YkAt9wLhOQW4JosVJn3wM5A=; b=Mo4XkH8SuCEt1We/Rs2iPz5rfGNBUe4INSyN/JzjCjIutauDtfhlWTOe/zq7nQQNCD J1RXzPg91gJyC1aHAxgHhor4McQkCBfQESG87Otf0l78opNG/WKjZl45WYc9JJ3Ukse6 KBk6FNlxoii02ZC8NtdSw40bY/4loHIrywSOtGkbawBDeK0n11Aszxyc9m/6Htc/hkuO sOziXtwd6Ply5t6H/sgbJiGy/nOH5vF+mMLYN42p100gIR0zZ28Zzuya0f30/QTlLp9f jCshYcr1KH3G25DRUjj1CtsequQ5fpYUX0wlRPvA8mopLCOp9pxd/4BzthuvTPVXdb4M lsgw== X-Gm-Message-State: AOAM530YI1PrCC7lQPBgyCelLkXf58/Oa1MCdrtnrfi/sOLWxFi7KC1M u54SwvZTt0HUEz7q5HjrfOS/AaJgSNE= X-Google-Smtp-Source: ABdhPJz5XCINax0D+F5Pj4GLiaWab8E/sabTASWLZM8gjF5VVxykjUP48yJeYQM8XKhQZWitwKEc+Q== X-Received: by 2002:a65:4c0b:: with SMTP id u11mr30173343pgq.383.1596037764101; Wed, 29 Jul 2020 08:49:24 -0700 (PDT) Received: from localhost.localdomain ([223.226.23.19]) by smtp.gmail.com with ESMTPSA id w16sm2711502pjd.50.2020.07.29.08.49.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Jul 2020 08:49:23 -0700 (PDT) From: gautamramk@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 29 Jul 2020 21:19:10 +0530 Message-Id: <20200729154911.29509-1-gautamramk@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH 1/2] libavcodec/j2kenc: Encoding up to 16 bits 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 This patch allows the JPEG2000 encoder to encode images to up to 16 bits. --- libavcodec/j2kenc.c | 99 ++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c index 38643c9a28..5ebc1f3a99 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -298,7 +298,7 @@ static int put_siz(Jpeg2000EncoderContext *s) bytestream_put_be16(&s->buf, s->ncomponents); // CSiz for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i - bytestream_put_byte(&s->buf, 7); + bytestream_put_byte(&s->buf, s->cbps[i] - 1); bytestream_put_byte(&s->buf, i?1<chroma_shift[0]:1); bytestream_put_byte(&s->buf, i?1<chroma_shift[1]:1); } @@ -447,43 +447,49 @@ static int init_tiles(Jpeg2000EncoderContext *s) return 0; } -static void copy_frame(Jpeg2000EncoderContext *s) -{ - int tileno, compno, i, y, x; - uint8_t *line; - for (tileno = 0; tileno < s->numXtiles * s->numYtiles; tileno++){ - Jpeg2000Tile *tile = s->tile + tileno; - if (s->planar){ - for (compno = 0; compno < s->ncomponents; compno++){ - Jpeg2000Component *comp = tile->comp + compno; - int *dst = comp->i_data; - line = s->picture->data[compno] - + comp->coord[1][0] * s->picture->linesize[compno] - + comp->coord[0][0]; - for (y = comp->coord[1][0]; y < comp->coord[1][1]; y++){ - uint8_t *ptr = line; - for (x = comp->coord[0][0]; x < comp->coord[0][1]; x++) - *dst++ = *ptr++ - (1 << 7); - line += s->picture->linesize[compno]; - } - } - } else{ - line = s->picture->data[0] + tile->comp[0].coord[1][0] * s->picture->linesize[0] - + tile->comp[0].coord[0][0] * s->ncomponents; - - i = 0; - for (y = tile->comp[0].coord[1][0]; y < tile->comp[0].coord[1][1]; y++){ - uint8_t *ptr = line; - for (x = tile->comp[0].coord[0][0]; x < tile->comp[0].coord[0][1]; x++, i++){ - for (compno = 0; compno < s->ncomponents; compno++){ - tile->comp[compno].i_data[i] = *ptr++ - (1 << 7); - } - } - line += s->picture->linesize[0]; - } - } +#define COPY_FRAME(D, PIXEL) \ + static void copy_frame_ ##D(Jpeg2000EncoderContext *s) \ + { \ + int tileno, compno, i, y, x; \ + PIXEL *line; \ + for (tileno = 0; tileno < s->numXtiles * s->numYtiles; tileno++){ \ + Jpeg2000Tile *tile = s->tile + tileno; \ + if (s->planar){ \ + for (compno = 0; compno < s->ncomponents; compno++){ \ + Jpeg2000Component *comp = tile->comp + compno; \ + int *dst = comp->i_data; \ + int cbps = s->cbps[compno]; \ + line = (PIXEL*)s->picture->data[compno] \ + + comp->coord[1][0] * (s->picture->linesize[compno] / sizeof(PIXEL)) \ + + comp->coord[0][0]; \ + for (y = comp->coord[1][0]; y < comp->coord[1][1]; y++){ \ + PIXEL *ptr = line; \ + for (x = comp->coord[0][0]; x < comp->coord[0][1]; x++) \ + *dst++ = *ptr++ - (1 << (cbps - 1)); \ + line += s->picture->linesize[compno] / sizeof(PIXEL); \ + } \ + } \ + } else{ \ + line = (PIXEL*)s->picture->data[0] + tile->comp[0].coord[1][0] * (s->picture->linesize[0] / sizeof(PIXEL)) \ + + tile->comp[0].coord[0][0] * s->ncomponents; \ + \ + i = 0; \ + for (y = tile->comp[0].coord[1][0]; y < tile->comp[0].coord[1][1]; y++){ \ + PIXEL *ptr = line; \ + for (x = tile->comp[0].coord[0][0]; x < tile->comp[0].coord[0][1]; x++, i++){ \ + for (compno = 0; compno < s->ncomponents; compno++){ \ + int cbps = s->cbps[compno]; \ + tile->comp[compno].i_data[i] = *ptr++ - (1 << (cbps - 1)); \ + } \ + } \ + line += s->picture->linesize[0] / sizeof(PIXEL); \ + } \ + } \ + } \ } -} + +COPY_FRAME(8, uint8_t) +COPY_FRAME(16, uint16_t) static void init_quantization(Jpeg2000EncoderContext *s) { @@ -1015,7 +1021,11 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, s->lambda = s->picture->quality * LAMBDA_SCALE; - copy_frame(s); + if (avctx->pix_fmt == AV_PIX_FMT_BGR48 || avctx->pix_fmt == AV_PIX_FMT_GRAY16) + copy_frame_16(s); + else + copy_frame_8(s); + reinit(s); if (s->format == CODEC_JP2) { @@ -1180,12 +1190,16 @@ FF_ENABLE_DEPRECATION_WARNINGS s->width = avctx->width; s->height = avctx->height; - for (i = 0; i < 3; i++) - s->cbps[i] = 8; + for (i = 0; i < 3; i++) { + if (avctx->pix_fmt == AV_PIX_FMT_GRAY16 || avctx->pix_fmt == AV_PIX_FMT_RGB48) + s->cbps[i] = 16; + else + s->cbps[i] = 8; + } - if (avctx->pix_fmt == AV_PIX_FMT_RGB24){ + if (avctx->pix_fmt == AV_PIX_FMT_RGB24 || avctx->pix_fmt == AV_PIX_FMT_RGB48){ s->ncomponents = 3; - } else if (avctx->pix_fmt == AV_PIX_FMT_GRAY8 || avctx->pix_fmt == AV_PIX_FMT_PAL8){ + } else if (avctx->pix_fmt == AV_PIX_FMT_GRAY8 || avctx->pix_fmt == AV_PIX_FMT_PAL8 || avctx->pix_fmt == AV_PIX_FMT_GRAY16){ s->ncomponents = 1; } else{ // planar YUV s->planar = 1; @@ -1255,6 +1269,7 @@ AVCodec ff_jpeg2000_encoder = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_PAL8, + AV_PIX_FMT_RGB48, AV_PIX_FMT_GRAY16, AV_PIX_FMT_NONE }, .priv_class = &j2k_class, From patchwork Wed Jul 29 15:49:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gautam Ramakrishnan X-Patchwork-Id: 21368 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 652C1449E98 for ; Wed, 29 Jul 2020 18:55:05 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4519468BA78; Wed, 29 Jul 2020 18:55:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7400768BA3B for ; Wed, 29 Jul 2020 18:54:58 +0300 (EEST) Received: by mail-pf1-f195.google.com with SMTP id l2so6812368pff.0 for ; Wed, 29 Jul 2020 08:54:58 -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=XmvamRX+lWFSjdYW1+N3c8e+KFLMQtvUFlwbmwSXbWQ=; b=mFWczF+5T6Uz2b/bT3TthRdJzH/hvzZZv19t7CHtfb+k2CHY/+Gzigf/BMmTKylbm8 kgjZh+X/X5tqj9bm4Cu9nqoERp8GNHqJFzvcg8Ap4XvrtJHKPGbvF2MRzgX2r7eOVcZt zkXf7ZwOeUeX/yK3xPatStj35rPfE+DvvGleDDJ0/5llFbaYYaYBU2y9uMiWJFbuQmc1 eokh+lW372Bpwpm1GFkaOa4FDxsv3SOrrNMFA40/0S4np6VCAQMgYBbWu5GZS9Wa0BXF /J5r0QKdmPJdyK5E8e61vqKVqSNgcLScPmCbkWOeEOVbT69vPvnRhLrmENf3WnPLkzuL OdQQ== 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=XmvamRX+lWFSjdYW1+N3c8e+KFLMQtvUFlwbmwSXbWQ=; b=DOkE/o8c55UON7B91NbVXcvzbm5v4fQp2B6D41nIiSxhUBBjOYSAYAzA4phZsWKrfl Qwx+k3bBT5f4x2RGd62/jNMG6aBm+jMpghbY/tAgyvjCAuuA0Ih6+oso1+5cuh9Ubdxh POJpXRDF6stRM7s3azHZEfSjkM4himKTnF52RpaimSfc/ok7J6K/tNunN/18UY/xGzlB nwv9Fj/hUrPgXwIEYhZdOOIt02qRwRFuOb001OQ/2XWyeFdF/9h9WExnOTvlCpQBsUgC +hIt/RPqm9pfsHaBIl1FmyUCkMBUTmwQK7qDk0HnAmPU4mbNPrEUlP+TYNSkHGGXtqYh v9Hg== X-Gm-Message-State: AOAM531QLvraIOjEMNPEv2ENm2UwWsH2pby02sK/l/SrpyJ5a0wm9UjC R9MS0LYKcQVLwD8ScVj3pSScs2fbrNQ= X-Google-Smtp-Source: ABdhPJyzPV8Vjcd4LBVubK24ynGukQm2VoCnX9SK65ISW4pWyO2uDSg/eA1YhgtqSOdJTnH2guG5Tw== X-Received: by 2002:a63:6fc7:: with SMTP id k190mr29594913pgc.54.1596037766141; Wed, 29 Jul 2020 08:49:26 -0700 (PDT) Received: from localhost.localdomain ([223.226.23.19]) by smtp.gmail.com with ESMTPSA id w16sm2711502pjd.50.2020.07.29.08.49.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Jul 2020 08:49:25 -0700 (PDT) From: gautamramk@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 29 Jul 2020 21:19:11 +0530 Message-Id: <20200729154911.29509-2-gautamramk@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200729154911.29509-1-gautamramk@gmail.com> References: <20200729154911.29509-1-gautamramk@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] libavcodec/pgxdec Fix pix format selection error 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 This patch makes the pgx decoder select the correct byte order instead of selecting big endian format for 16 bit images. --- libavcodec/pgxdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/pgxdec.c b/libavcodec/pgxdec.c index 93b9f4e7a0..a72d6fe6fe 100644 --- a/libavcodec/pgxdec.c +++ b/libavcodec/pgxdec.c @@ -137,7 +137,7 @@ static int pgx_decode_frame(AVCodecContext *avctx, void *data, avctx->pix_fmt = AV_PIX_FMT_GRAY8; bpp = 8; } else if (depth <= 16) { - avctx->pix_fmt = AV_PIX_FMT_GRAY16BE; + avctx->pix_fmt = AV_PIX_FMT_GRAY16; bpp = 16; } else { av_log(avctx, AV_LOG_ERROR, "Maximum depth of 16 bits supported.\n");