From patchwork Sat Apr 25 15:10:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 19236 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 C1E1944BC69 for ; Sat, 25 Apr 2020 18:10:53 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A3E2968C458; Sat, 25 Apr 2020 18:10:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f43.google.com (mail-io1-f43.google.com [209.85.166.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A41FB68C413 for ; Sat, 25 Apr 2020 18:10:46 +0300 (EEST) Received: by mail-io1-f43.google.com with SMTP id w4so13807862ioc.6 for ; Sat, 25 Apr 2020 08:10:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=FXh5m+gFeee1QYWBCFgaHw1di1JZWCwrHcgXfak6Etk=; b=gPS8fJivQ68bQI55qFpmy63QjjB70LMbe9IiSyG2aKZbWRgt/+pDF0uywQFH0whNlC jkUOhzbOw2v/3b9Z9RRy0X/nEXUxtvBQkyylmJQRKfs/2crg23KyHhgivuLc/2uqjW0r oRYMY71wkGMjqORe/HIQVBg0WXE4vPH5Lg5KyOxXE8iAFxvXq1210+gwsIG1g6r9MQ9k ihv5FMk2fxgaOkNX/4u2g9eiQLOjFbWhltUp5ZFEai6LIQ8Bmj9pZOACtw40lPgEwmoK hgy76G50+k1Q0fefhlhvesvOQ223lc1fw+ZKUrp731yQmsCOxQi1HWBOCpdHy/KH93am HtzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=FXh5m+gFeee1QYWBCFgaHw1di1JZWCwrHcgXfak6Etk=; b=oKefFGHoffBf6niQLeL0c5iRi8kM7bituW9sXIKNiqrifDt+8MC9K0sa6909ulR/0X rsbVh974EiMMlFxU7G5T71PfuUR45ioQYIg6xeaMjepYZm+E7R6i1ORz+e1QooBdSkdJ YQnCZ/UH3lpZReKvVqW4PP16Ac8m9vcJ2ANQF7jnqVr/fANQmR82+qONiN1UXp3ysgq+ DACZ3Qjp3BPZ6RxgF5M+025bCH1rozKXXUhb3op3TfRyuz3BYpUtdjtvDzfTYjkMUNYP kcshpkZSUJH5om7K5y0rUwFUBVfq1zDWiO5U+Hg1WB7uED0o9BcvWJEg45C9eGNWyQoR WLbA== X-Gm-Message-State: AGi0PubyPD8ufyY14InNuHRhzqYfX1W4OrrLEzp10inAxLfeqXtugPV/ W/Vt//MnfH2pF6eqV/hGGsU9AwRZwf+civcrsZMoppnqGe8= X-Google-Smtp-Source: APiQypKZNJsjsErht1ziIVcoB+ga1bfeJ1IJDCjtHMOBkkdsdyURRdqmZJhIBlMAseImUE2tQRPFV8YWx6sDqxerJ3I= X-Received: by 2002:a02:8247:: with SMTP id q7mr12390108jag.68.1587827444719; Sat, 25 Apr 2020 08:10:44 -0700 (PDT) MIME-Version: 1.0 From: Carl Eugen Hoyos Date: Sat, 25 Apr 2020 17:10:33 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] lavc/pnm: Support signed pgm files from jasper 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Hi! Attached patch allows reading the pgm file that jasper creates using the jpeg 2000 reference file p0_03.j2k as input. Please comment, Carl Eugen From 5da97c417d66b1e840b1feae31f0852cf3755c39 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Sat, 25 Apr 2020 17:05:40 +0200 Subject: [PATCH] lavc/pnm: Allow reading signed pgm values as written by jasper. --- libavcodec/pnm.c | 4 ++++ libavcodec/pnm.h | 1 + libavcodec/pnmdec.c | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavcodec/pnm.c b/libavcodec/pnm.c index b5c2881948..c9b9eb9ccd 100644 --- a/libavcodec/pnm.c +++ b/libavcodec/pnm.c @@ -176,6 +176,10 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s) if (avctx->pix_fmt != AV_PIX_FMT_MONOWHITE && avctx->pix_fmt != AV_PIX_FMT_MONOBLACK) { pnm_get(s, buf1, sizeof(buf1)); s->maxval = atoi(buf1); + if (s->maxval < 0) { + s->maxval *= -1; + s->jasper_signed = 1; + } if (s->maxval <= 0 || s->maxval > UINT16_MAX) { av_log(avctx, AV_LOG_ERROR, "Invalid maxval: %d\n", s->maxval); s->maxval = 255; diff --git a/libavcodec/pnm.h b/libavcodec/pnm.h index 5bc0aad29f..2550cef92b 100644 --- a/libavcodec/pnm.h +++ b/libavcodec/pnm.h @@ -30,6 +30,7 @@ typedef struct PNMContext { uint8_t *bytestream_end; int maxval; ///< maximum value of a pixel int type; + int jasper_signed; } PNMContext; int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s); diff --git a/libavcodec/pnmdec.c b/libavcodec/pnmdec.c index dbcaef3884..6e5f5b6c3b 100644 --- a/libavcodec/pnmdec.c +++ b/libavcodec/pnmdec.c @@ -168,7 +168,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data, else if (upgrade == 1) { unsigned int j, f = (255 * 128 + s->maxval / 2) / s->maxval; for (j = 0; j < n; j++) - ptr[j] = (s->bytestream[j] * f + 64) >> 7; + ptr[j] = ((s->bytestream[j] - (s->maxval / 2 - 1) * s->jasper_signed) * f + 64) >> 7; } else if (upgrade == 2) { unsigned int j, v, f = (65535 * 32768 + s->maxval / 2) / s->maxval; for (j = 0; j < n / 2; j++) { -- 2.24.1