From patchwork Tue Jun 9 12:06:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gautam Ramakrishnan X-Patchwork-Id: 20243 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 4A5BD44AC17 for ; Tue, 9 Jun 2020 15:07:13 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 272CE68B319; Tue, 9 Jun 2020 15:07:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 272C968A0BE for ; Tue, 9 Jun 2020 15:07:06 +0300 (EEST) Received: by mail-pl1-f193.google.com with SMTP id x11so7955633plv.9 for ; Tue, 09 Jun 2020 05:07:06 -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=pCAuy8SPK/48jXEuQt0Sh76wxcvbJ2EjxYnmfc7S39E=; b=EWDEFc/pAXVwW6jbqFoxda+TNosZdSdtPAJcejEI4bB7vPQmqAjxaYphT0ZdcVaS08 alRW2C/I9Lsl12eV9J6ECz/QsBBIEOBsc39AzGvhIHF4J2KmHENzODwHvxc6mxqmfvGf sK9TWb1cl1wEQjsdrCV3oTUidbHnhM5rjZzdQwDasyZweXCgtg6tD5SqTcDdOh6IYYGm /zGrMtXeDWo1WQWm9TUMJZNBqipxOgrLt+jzU20g+EhV/FbfhUhHPIwpKT7F+dpsBNkf TCnm92CVYtdv81iZWHwKJ/4a/rWzxGuLwz/6rJZNZRflZDxMp4WeuWIiNLABte4zRLRI eYqw== 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=pCAuy8SPK/48jXEuQt0Sh76wxcvbJ2EjxYnmfc7S39E=; b=G8k7p9qAeGH/xzLaB98Xy9h/5Vm7NOXL7FfuxiQ5lBU6gNKtEAeSFMS3Wx62+eIiU8 XyjmyPS2MNg8ZYPeTEglhvTwgkkvyuTGlB3H6TMo7hJDZItiRNpHcKbKEwg+eJWLZ4wS 1I8N9Nmvtev/oYRPxGG30IWq0bqJxxBrWAggvCyKbKLHaqpl9y+W22U82X4xxyCE+kAY 9owGuyOKJq4YEy6mAAMKcv3OOxW3ZJmIZbhkvBtUuJSRy+mdFRa9A8LEe2IhYgMhSsFh OZd7htexPGRn/Dd+cCgCk5vCZLpWVRqahMRS2SDvs9gy9P8drHboaSc6JvuGhL5JXRbb e8/w== X-Gm-Message-State: AOAM530ZajBA2Cc7dRymtc6x89plohSeW/Q+Nwec3pqjzI/T8qKERM7z gMPnUk4hD/pvn74yowYZywPRyt6u8e0= X-Google-Smtp-Source: ABdhPJzWq8Y84rDUW83X1u29Fy2/tqAN7oXFf2diFb/zysanWo86s7E4e4llTOjE9ZoE15Ne6ngUig== X-Received: by 2002:a17:902:7c18:: with SMTP id x24mr2896470pll.26.1591704423650; Tue, 09 Jun 2020 05:07:03 -0700 (PDT) Received: from localhost.localdomain ([122.172.136.215]) by smtp.gmail.com with ESMTPSA id j8sm2436367pjw.11.2020.06.09.05.07.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2020 05:07:02 -0700 (PDT) From: gautamramk@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 9 Jun 2020 17:36:53 +0530 Message-Id: <20200609120653.20078-1-gautamramk@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [RFC PATCH] libavcodec/libopenjpeg: pix fmt selection change 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 selection of pix_fmt similar to that in the native decoder. This makes samples such as p0_05.j2k and p1_03.j2k decodable by libopenjpeg. --- libavcodec/libopenjpegdec.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index 344c5ba5a3..f5f208784e 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -272,11 +272,11 @@ static inline void libopenjpeg_copyto8(AVFrame *picture, opj_image_t *image) { int *comp_data; uint8_t *img_ptr; int index, x, y; - for (index = 0; index < image->numcomps; index++) { + int plane = index?index-1:image->numcomps-1; comp_data = image->comps[index].data; for (y = 0; y < image->comps[index].h; y++) { - img_ptr = picture->data[index] + y * picture->linesize[index]; + img_ptr = picture->data[plane] + y * picture->linesize[plane]; for (x = 0; x < image->comps[index].w; x++) { *img_ptr = 0x80 * image->comps[index].sgnd + *comp_data; img_ptr++; @@ -408,6 +408,23 @@ static int libopenjpeg_decode_frame(AVCodecContext *avctx, if (avctx->pix_fmt == AV_PIX_FMT_NONE) avctx->pix_fmt = libopenjpeg_guess_pix_fmt(image); + if (avctx->pix_fmt == AV_PIX_FMT_NONE) { + if (image->numcomps == 4 && + image->comps[0].dx == 1 && image->comps[0].dy == 1 && + image->comps[1].dx == 1 && image->comps[1].dy == 1 && + image->comps[2].dx == image->comps[3].dx && + image->comps[2].dy == image->comps[3].dy) { + int maxprec = 0; + for (int i = 0; i < 4; i++) + maxprec = FFMAX(maxprec, image->comps[i].prec); + if (maxprec == 8 && + image->comps[2].dx == 2 && + image->comps[2].dy == 2) { + avctx->pix_fmt = AV_PIX_FMT_YUVA420P; + } + } + } + if (avctx->pix_fmt == AV_PIX_FMT_NONE) { av_log(avctx, AV_LOG_ERROR, "Unable to determine pixel format.\n"); ret = AVERROR_UNKNOWN;