From patchwork Tue Dec 20 15:37:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitrii Ovchinnikov X-Patchwork-Id: 39737 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp5059263pzb; Tue, 20 Dec 2022 07:37:48 -0800 (PST) X-Google-Smtp-Source: AMrXdXsKQAGb4q9rK8ZqwfsE3a+pz3VjTBpQe7k31WKKGnLPCF/XcQY4sXAt8dPyZDSXfPiPIgyV X-Received: by 2002:a17:906:22d2:b0:7fc:3787:243d with SMTP id q18-20020a17090622d200b007fc3787243dmr2182746eja.53.1671550668377; Tue, 20 Dec 2022 07:37:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671550668; cv=none; d=google.com; s=arc-20160816; b=cJ4QjPRVeqhiBd1p14xuIgKgJtfyfaBT38q/6Ti4qjHwcLyTyJc/eLbKpLRj7i75pb wkrCug7oO5xW4lrXfcNrNEQwtURYHH/CoW6VIxKDABHVgAZzQRBzDZOxDWN/m7pvd5/X NmB2tQwcWwJIxgS1yC3nUU68rKYDvS88FeQ7U5LNC5NbqXslQV9w6E25ROkqVkzOhq7R FaMBa6u8wgV8CcQD8h42EI09ZGGI2SI2JBGCyx5ZpjsTBY5d6BPEZDrRqoCjlU2kA2qo CoFVpx/+SDtlsChgxSJFxcSbdPbYT0N7vtAsG5j6LPIXPfEFXfkd8dcFqKPxzx9sb/6c dWqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=rN7ucNsgKxNcWLv7FUssirHo4SiHW0y9SPzzlG6O0eo=; b=lBMOHCbtvtrUv37D1Ls9AMDkWgPJZ5DiY+9mu7dOgP5kLr7Uo1tU5ydQxP/WIhFDlw AfOj2c3f5a8bueJ8qwxellKyVatmDv0vyhvAn52LbidnaCJtYp/+52o8wRMTiUy2IPw1 z+lYaydsZM5H0Uh8LGxQ8wTLh3Mtsi7TiMLHnmgZJCHLSMaPwj5jYeCjxcPzFfeDwsOB yyd2g4NNxL+5k5v1dM3dCtHZJSZ/tSM4om9HHb1+qyHWQuQGiF/zJ5rWLke/B2pzfyH7 oNNN3ZpBP2xkkQtY2enXij3CxHt9zfYB28doFxB+7ZcxcbAQprE9jzt6OCx/jDEzjbov AuXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="cws/y75Z"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id nb26-20020a1709071c9a00b0082b45653622si3813425ejc.333.2022.12.20.07.37.47; Tue, 20 Dec 2022 07:37:48 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="cws/y75Z"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CD43168B455; Tue, 20 Dec 2022 17:37:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD22568B263 for ; Tue, 20 Dec 2022 17:37:21 +0200 (EET) Received: by mail-wr1-f50.google.com with SMTP id i7so12093326wrv.8 for ; Tue, 20 Dec 2022 07:37:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t9UHlVKWyVoDN0K0+6vW7n7WnPYQW8+a24fx1tJ1J/8=; b=cws/y75ZKbk43JjSPaf07Jcx5UuA5BTDwLwMO6dgSq2dXMM4Dvk9S+gVNx84CbTzJY Tk5ig2tgIDU3H0LmrUnzvbMN4LS6qO13k9NeH1Wd/io2ruI9lZ4I9Lpan1qNiNkRNie5 NJDJdhf7lIlfyJAM8rIxnZuwBXFsT+KFRzv04vpU2AMPPS9/4TGFASGNvWyeF/JjlzgB M3CIK3+0tiY/tjBaZiiIAnC5TqJ7eRelIk69pQtRPneFidQUyfedk2sosY9t4KFv9PnI ld6SZ2PGMKpnDQ+QTjK1b0iKw9t0Et6sov98nM3Ppmz+1KNZimk4I4cZaJznr6lwYPT1 sKCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t9UHlVKWyVoDN0K0+6vW7n7WnPYQW8+a24fx1tJ1J/8=; b=G7+AD0cICry4W+/5ofz+ett8XyIR3h1rQFHQRXA0mwLfEnQVVb+qpxsQHDwpV3CKz9 kTh1v5atbr0elzGV/FMK/eSZ6X22pI1jHI2a/og+wL/3Ao8ehQD10DmgG6uTIUd5yzbY sOkkVQp2GfAdmSiPK1qo15SRRl+u612L3N1Xo0MzPxtsy3iSrP+hOfhIoTunTpvszQ1R bF/q4n4VpCrEfXyElykxXzn1ITgFQNGRZ46RP7Cc2xfUHlebfNG+jJTAksqpdeYKQg+B S5F94W6QE+LNGPrQdAObM+8ZSSPHtT7OU1Dr918CPueOBp7AoSyavQZ6JdUnq/CUXy2o 0kyQ== X-Gm-Message-State: AFqh2kps8KN9nG8fIHrhfVT/JoYk6PqChUaOPnWT6OgH6tSjeinH4kEj V5VAoGxayPm2yPq9k3ambAXp1XsVpN8= X-Received: by 2002:a5d:40ce:0:b0:242:1fa4:332b with SMTP id b14-20020a5d40ce000000b002421fa4332bmr1694014wrq.38.1671550640785; Tue, 20 Dec 2022 07:37:20 -0800 (PST) Received: from dovchinn.amd.com (109-93-70-158.dynamic.isp.telekom.rs. [109.93.70.158]) by smtp.gmail.com with ESMTPSA id y1-20020adfd081000000b002421a8f4fa6sm13167716wrh.92.2022.12.20.07.37.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Dec 2022 07:37:20 -0800 (PST) From: Dmitrii Ovchinnikov X-Google-Original-From: Dmitrii Ovchinnikov To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Dec 2022 16:37:11 +0100 Message-Id: <20221220153711.1831-3-Dmitriy.Ovchinnikov@amd.com> X-Mailer: git-send-email 2.38.1.windows.1 In-Reply-To: <20221220153711.1831-1-Dmitriy.Ovchinnikov@amd.com> References: <20221220153711.1831-1-Dmitriy.Ovchinnikov@amd.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [crop support for matroska demuxer, V4 3/3] libavformat\matroskadec.c: crop support for matroska demuxer. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Dmitrii Ovchinnikov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Xhh5tBEJ28OE From: Dmitrii Ovchinnikov In webm specification, it supports cropping information. (https://www.webmproject.org/docs/container/) In ffmpeg, the implementation of webm is a subset of matroska. In matroskadec.c, those cropping related four fields are forced to 0. for the sample file with crop (crop_bottom =8, crop_top=crop_left=crop_right=0.) ffmpeg.exe -i test_with_container_crop.webm -pix_fmt yuv420p -y output.yuv original ffmpeg code - the output.yuv resolution is 1920x1088 changed code - the output.yuv resolution is 1920x1080 --- libavformat/matroskadec.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index d582f566a2..2023fd4977 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -210,6 +210,10 @@ typedef struct MatroskaTrackVideo { uint64_t pixel_width; uint64_t pixel_height; EbmlBin color_space; + uint64_t pixel_cropt; + uint64_t pixel_cropl; + uint64_t pixel_cropb; + uint64_t pixel_cropr; uint64_t display_unit; uint64_t interlaced; uint64_t field_order; @@ -517,10 +521,10 @@ static EbmlSyntax matroska_track_video[] = { { MATROSKA_ID_VIDEOALPHAMODE, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, alpha_mode), { .u = 0 } }, { MATROSKA_ID_VIDEOCOLOR, EBML_NEST, 0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } }, { MATROSKA_ID_VIDEOPROJECTION, EBML_NEST, 0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } }, - { MATROSKA_ID_VIDEOPIXELCROPB, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPT, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPL, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPR, EBML_NONE }, + { MATROSKA_ID_VIDEOPIXELCROPT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropt), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPL, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropl), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPB, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropb), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPR, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropr), {.u = 0 } }, { MATROSKA_ID_VIDEODISPLAYUNIT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } }, { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, interlaced), { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } }, { MATROSKA_ID_VIDEOFIELDORDER, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } }, @@ -2879,6 +2883,11 @@ static int matroska_parse_tracks(AVFormatContext *s) st->codecpar->width = track->video.pixel_width; st->codecpar->height = track->video.pixel_height; + st->codecpar->container_crop_top = track->video.pixel_cropt; + st->codecpar->container_crop_left = track->video.pixel_cropl; + st->codecpar->container_crop_bottom = track->video.pixel_cropb; + st->codecpar->container_crop_right = track->video.pixel_cropr; + if (track->video.interlaced == MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED) st->codecpar->field_order = mkv_field_order(matroska, track->video.field_order); else if (track->video.interlaced == MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE)