From patchwork Tue Oct 16 22:22:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 10689 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 5BAE5446E47 for ; Wed, 17 Oct 2018 01:22:53 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B083368A1BF; Wed, 17 Oct 2018 01:22:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f49.google.com (mail-io1-f49.google.com [209.85.166.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2760A689FCE for ; Wed, 17 Oct 2018 01:22:28 +0300 (EEST) Received: by mail-io1-f49.google.com with SMTP id m16-v6so17614859ioj.4 for ; Tue, 16 Oct 2018 15:22:53 -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=AAMdfvagsbs08/lyTVKR56tRXW8jxAV9OjS7K2IkFIY=; b=UG6Qnek4Dmqh+DKepjgjNEchMSuDe840TA4y8gMkuI29kE7OlF34nN8aB8AZYR9Fx1 IdJ1+k4jJpnIuvE7W1DVgMzFAC2cfctJHBLtb0/ZLvIoGkP2mMpslQq+oyLvBstavOdd a6RL1zdNKMqmmtDZqNooliQdvhubDE3oZQtMWpbcktn5cuy/hKZXMcJZDNOf1vhyLUxU gAH27scR6tTQNsMKVRBJOO/7ayxIzDhaFSJ8QUNTXTH5j0KWWUdUyUgNg1BULhXcggS/ HqKkOXjyQGhP8pmjioYyscF2O+pD9lbgQzVE0txTx9o+9Mk7qyelinPNF+23Ngz8mVEd BntA== 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=AAMdfvagsbs08/lyTVKR56tRXW8jxAV9OjS7K2IkFIY=; b=SV8zkLSchPZdJTuWugEorAUCSV+Rztn0bYEJKbma4fiMLm5M6O56yJ99+3xwTPoEwK LGGoCdAb2Su9MiOzB0yRbi8cL5oHlwHFaaEVD/T1u6FM34sTM3baIWFPKYrI7/MYG8S0 YsBGH6QhFoyKQo+sp2an8Ht9GAKyzSSlWuKlw+eqqISnI3BQnTxVkh4Song37O0AzdfQ mZZnX1Q9wtF0oEpILhRB91gIo88sEOWcWpldTV2WzZ227GvAJU74kC3W9PgCh9uzWp/J /C2mVjhoFeDHa+SULYoGAPz1IfCbJGy0wnQblwRkfX8+b+qJnEIjlKGNMGjUpyGPt6pF AZKQ== X-Gm-Message-State: ABuFfoivm+Rxel6iXwh/LsSr+8og1upFqzcO/vHn3MpEwEyF48YswFiz Cq1VzwrilBv8Z92gvGX8rHWcMiHSMqiFpjVycanrRg== X-Google-Smtp-Source: ACcGV602f5heFvHnIbcioxVM13UlKJP6LoN0AU1LGjd30XerYyMKMPRXuaOQDZ5zKPdTJirPdoBs5vszIdFrkGVDIR0= X-Received: by 2002:a6b:d403:: with SMTP id l3-v6mr16964795iog.55.1539728571711; Tue, 16 Oct 2018 15:22:51 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:c489:0:0:0:0:0 with HTTP; Tue, 16 Oct 2018 15:22:51 -0700 (PDT) From: Carl Eugen Hoyos Date: Wed, 17 Oct 2018 00:22:51 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavc/mjpegdec: Support 2:3 subsampling 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 decoding the sample from ticket #7495. Please review, Carl Eugen From 0e9d2ec4e0cba36ba03a6b7470a707c0a3f88b8c Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Wed, 17 Oct 2018 00:21:26 +0200 Subject: [PATCH] lavc/mjpegdec: Support 2:3 subsampling. Fixes ticket #7495. --- libavcodec/mjpegdec.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 35ee10d..0a81c0e 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -594,6 +594,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG; break; case 0x22111100: + case 0x23111100: case 0x42111100: case 0x24111100: if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P; @@ -607,6 +608,10 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) if (s->bits > 8) goto unk_pixfmt; s->upscale_v[1] = s->upscale_v[2] = 1; + } else if (pix_fmt_id = 0x23111100) { + if (s->bits > 8) + goto unk_pixfmt; + s->upscale_v[1] = s->upscale_v[2] = 2; } break; case 0x41111100: @@ -2592,9 +2597,15 @@ the_end: } dst = &((uint8_t *)s->picture_ptr->data[p])[(h - 1) * s->linesize[p]]; for (i = h - 1; i; i--) { - uint8_t *src1 = &((uint8_t *)s->picture_ptr->data[p])[i / 2 * s->linesize[p]]; - uint8_t *src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) / 2 * s->linesize[p]]; - if (src1 == src2 || i == h - 1) { + uint8_t *src1, *src2; + if (s->upscale_v[p] == 2) { + src1 = &((uint8_t *)s->picture_ptr->data[p])[i * 2 / 3 * s->linesize[p]]; + src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) * 2 / 3 * s->linesize[p]]; + } else { + src1 = &((uint8_t *)s->picture_ptr->data[p])[i / 2 * s->linesize[p]]; + src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) / 2 * s->linesize[p]]; + } + if (s->upscale_v[p] != 2 && (src1 == src2 || i == h - 1)) { memcpy(dst, src1, w); } else { for (index = 0; index < w; index++) -- 1.7.10.4