From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 820184A187 for ; Sat, 23 Mar 2024 02:53:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E7DC568D5E8; Sat, 23 Mar 2024 04:53:35 +0200 (EET) Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6564068D55E for ; Sat, 23 Mar 2024 04:53:29 +0200 (EET) Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-5d8b70b39efso1923071a12.0 for ; Fri, 22 Mar 2024 19:53:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711162406; x=1711767206; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=b88U7UqZFWrP3ATjClnbG6h5kzUEqjuC/jlpvzfq7dE=; b=RvZqQGumGq2+IC2gvc1TpOCqjolG5k45f8ISQciSfxg2qoem1xKzt8d/E6Jb9WTokF AiNJD6k9UFWMr8m/Iv0REeNL0Jza8iPQ5VMdnVi8qM2znT9A6eZt4gxXBelSTUETWXdk lZHBt6R2U0JnukpwZY0YyCIIuRLatzelahJLGYMTP6vzSdTGvkuKAsKmh1WZUU+Vlqxa O/Q8QQ0ZQ7ShGgqqtsQllKXQ8tMsicOXrm/tUKY7zjIzkEN3cAdF7u/hhKmwtLrwnqIm 4RZ/6xboitNesRr9ZHLRlXlnpLocVObicB5vyWJkAVvhD7w8R5gfNNaqwdNbnAQsrZ7k F1SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711162406; x=1711767206; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=b88U7UqZFWrP3ATjClnbG6h5kzUEqjuC/jlpvzfq7dE=; b=peo7DOgd7G4M+tRjOOUFSh11jqqxBuzFKQpt7K0HZzKL0+w35fJxMfdXfXmmvonFMl ihW3xAeMm5+24LYrYcRw6Je5xvZLY3nlaPA/JSxqIzMlYnSd9pSL1cczgWNT1Ppj6EgD CDuG/3utuNYbEiop2y22MbMY549EIie6uOnzGZvofEiREjrkh11Vd/7KU5O6lLNnT/b2 PXOdOqAxmI3visv5PDjc/1SNc1zdrB2WXQr0cDoGAVzC1kCLiUNTg8Pb2R2rz6W6tPAR nZsfNA4gqxrrutXYTkUPjkKs+wOIi4PQgkaWTxrFScgk2JE4VBtypApgum6erPv4Lpm3 WVxA== X-Gm-Message-State: AOJu0Yw/EMGnA5/368H8pA6gtH5lDzHYpfwgmA5rv3DchazkAuLYyNE+ vfoCNi1shpPWWAll/cc/u8Zenw5zamf2rDDIB9a2TEEdlq9ocXtQf0odeQij X-Google-Smtp-Source: AGHT+IGqHSt8mSYTXony426w3bFtCg/QC1VMjgciE6TQOx7tMvRtvg/r/CpJP+SNkg5YdSdbG7Fk5g== X-Received: by 2002:a05:6a20:6a9e:b0:1a3:52ef:cc84 with SMTP id bi30-20020a056a206a9e00b001a352efcc84mr952475pzb.60.1711162406323; Fri, 22 Mar 2024 19:53:26 -0700 (PDT) Received: from [192.168.0.10] ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id k19-20020a170902f29300b001dd6f305a81sm473606plc.293.2024.03.22.19.53.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Mar 2024 19:53:25 -0700 (PDT) Message-ID: Date: Fri, 22 Mar 2024 23:53:26 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240322202841.31730-1-anton@khirnov.net> <20240322202841.31730-6-anton@khirnov.net> Content-Language: en-US From: James Almer In-Reply-To: <20240322202841.31730-6-anton@khirnov.net> Subject: Re: [FFmpeg-devel] [PATCH 06/12] fftools/ffmpeg_dec: apply cropping manually 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 3/22/2024 5:28 PM, Anton Khirnov wrote: > lavfi does not require aligned buffers, so we can safely apply top/left > cropping by any amount, without passing any special flags to lavc. > Longer term, an even better solution would probably be auto-inserting > the crop filter (or its hwaccel versions) as needed. It's what i did in my container cropping set. One problem with it is that the cropping filter doesn't look at cropping values in input frames but at filter options instead, and will in fact *add* cropping values to the output frames if you pass it something it can't handle, like hwaccel formats. And for that matter, cropping fields in frames should be handled by encoders, or by the generic encoding code in some form. Right now they are outright ignored. > > Multiple FATE tests no longer need -flags unaligned. > --- > fftools/ffmpeg_dec.c | 14 ++++++++++++++ > tests/fate/h264.mak | 2 +- > tests/fate/hevc.mak | 8 ++++---- > tests/fate/vvc.mak | 2 +- > 4 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c > index b8bfae469f..e3ed0b3978 100644 > --- a/fftools/ffmpeg_dec.c > +++ b/fftools/ffmpeg_dec.c > @@ -51,6 +51,7 @@ typedef struct DecoderPriv { > > // a combination of DECODER_FLAG_*, provided to dec_open() > int flags; > + int apply_cropping; > > enum AVPixelFormat hwaccel_pix_fmt; > enum HWAccelID hwaccel_id; > @@ -404,6 +405,15 @@ static int video_frame_process(DecoderPriv *dp, AVFrame *frame) > if (dp->sar_override.num) > frame->sample_aspect_ratio = dp->sar_override; > > + if (dp->apply_cropping) { > + // lavfi does not require aligned frame data > + int ret = av_frame_apply_cropping(frame, AV_FRAME_CROP_UNALIGNED); > + if (ret < 0) { > + av_log(dp, AV_LOG_ERROR, "Error applying decoder cropping\n"); > + return ret; > + } > + } > + > return 0; > } > > @@ -1214,6 +1224,10 @@ static int dec_open(DecoderPriv *dp, AVDictionary **dec_opts, > if (o->flags & DECODER_FLAG_BITEXACT) > dp->dec_ctx->flags |= AV_CODEC_FLAG_BITEXACT; > > + // we apply cropping outselves > + dp->apply_cropping = dp->dec_ctx->apply_cropping; > + dp->dec_ctx->apply_cropping = 0; > + > if ((ret = avcodec_open2(dp->dec_ctx, codec, NULL)) < 0) { > av_log(dp, AV_LOG_ERROR, "Error while opening decoder: %s\n", > av_err2str(ret)); > diff --git a/tests/fate/h264.mak b/tests/fate/h264.mak > index 674054560b..88f06d7b15 100644 > --- a/tests/fate/h264.mak > +++ b/tests/fate/h264.mak > @@ -312,7 +312,7 @@ fate-h264-conformance-ci1_ft_b: CMD = framecrc -i $(TARGET_SAM > fate-h264-conformance-ci_mw_d: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CI_MW_D.264 > fate-h264-conformance-cvbs3_sony_c: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVBS3_Sony_C.jsv > fate-h264-conformance-cvcanlma2_sony_c: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVCANLMA2_Sony_C.jsv > -fate-h264-conformance-cvfc1_sony_c: CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/h264-conformance/CVFC1_Sony_C.jsv > +fate-h264-conformance-cvfc1_sony_c: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVFC1_Sony_C.jsv > fate-h264-conformance-cvfi1_sony_d: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVFI1_Sony_D.jsv > fate-h264-conformance-cvfi1_sva_c: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVFI1_SVA_C.264 > fate-h264-conformance-cvfi2_sony_h: CMD = framecrc -i $(TARGET_SAMPLES)/h264-conformance/CVFI2_Sony_H.jsv > diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak > index 4889ee8237..720603c112 100644 > --- a/tests/fate/hevc.mak > +++ b/tests/fate/hevc.mak > @@ -200,8 +200,8 @@ $(HEVC_TESTS_444_8BIT): SCALE_OPTS := -pix_fmt yuv444p > $(HEVC_TESTS_10BIT): SCALE_OPTS := -pix_fmt yuv420p10le -vf scale > $(HEVC_TESTS_422_10BIT) $(HEVC_TESTS_422_10BIN): SCALE_OPTS := -pix_fmt yuv422p10le -vf scale > $(HEVC_TESTS_444_12BIT): SCALE_OPTS := -pix_fmt yuv444p12le -vf scale > -fate-hevc-conformance-%: CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(subst fate-hevc-conformance-,,$(@)).bit $(SCALE_OPTS) > -$(HEVC_TESTS_422_10BIN): CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc-conformance/$(subst fate-hevc-conformance-,,$(@)).bin $(SCALE_OPTS) > +fate-hevc-conformance-%: CMD = framecrc -i $(TARGET_SAMPLES)/hevc-conformance/$(subst fate-hevc-conformance-,,$(@)).bit $(SCALE_OPTS) > +$(HEVC_TESTS_422_10BIN): CMD = framecrc -i $(TARGET_SAMPLES)/hevc-conformance/$(subst fate-hevc-conformance-,,$(@)).bin $(SCALE_OPTS) > > FATE_HEVC-$(call FRAMECRC, HEVC, HEVC, HEVC_PARSER) += $(HEVC_TESTS_8BIT) $(HEVC_TESTS_444_8BIT) > FATE_HEVC-$(call FRAMECRC, HEVC, HEVC, HEVC_PARSER SCALE_FILTER) += \ > @@ -252,10 +252,10 @@ FATE_HEVC_FFPROBE-$(call DEMDEC, MOV, HEVC) += fate-hevc-dv-rpu > fate-hevc-two-first-slice: CMD = threads=2 framemd5 -i $(TARGET_SAMPLES)/hevc/two_first_slice.mp4 -sws_flags bitexact -t 00:02.00 -an > FATE_HEVC-$(call FRAMEMD5, MOV, HEVC) += fate-hevc-two-first-slice > > -fate-hevc-cabac-tudepth: CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc/cbf_cr_cb_TUDepth_4_circle.h265 -pix_fmt yuv444p > +fate-hevc-cabac-tudepth: CMD = framecrc -i $(TARGET_SAMPLES)/hevc/cbf_cr_cb_TUDepth_4_circle.h265 -pix_fmt yuv444p > FATE_HEVC-$(call FRAMECRC, HEVC, HEVC) += fate-hevc-cabac-tudepth > > -fate-hevc-small422chroma: CMD = framecrc -flags unaligned -i $(TARGET_SAMPLES)/hevc/food.hevc -pix_fmt yuv422p10le -vf scale > +fate-hevc-small422chroma: CMD = framecrc -i $(TARGET_SAMPLES)/hevc/food.hevc -pix_fmt yuv422p10le -vf scale > FATE_HEVC-$(call FRAMECRC, HEVC, HEVC, HEVC_PARSER SCALE_FILTER) += fate-hevc-small422chroma > > FATE_SAMPLES_AVCONV += $(FATE_HEVC-yes) > diff --git a/tests/fate/vvc.mak b/tests/fate/vvc.mak > index f5a45cc4ca..6cb3471b55 100644 > --- a/tests/fate/vvc.mak > +++ b/tests/fate/vvc.mak > @@ -38,7 +38,7 @@ $(foreach VAR,$(FATE_VVC_VARS), $(eval VVC_TESTS_$(VAR) := $(addprefix fate-vvc- > $(VVC_TESTS_8BIT): SCALE_OPTS := -pix_fmt yuv420p > $(VVC_TESTS_10BIT): SCALE_OPTS := -pix_fmt yuv420p10le -vf scale > $(VVC_TESTS_444_10BIT): SCALE_OPTS := -pix_fmt yuv444p10le -vf scale > -fate-vvc-conformance-%: CMD = framecrc -flags unaligned -c:v vvc -strict experimental -i $(TARGET_SAMPLES)/vvc-conformance/$(subst fate-vvc-conformance-,,$(@)).bit $(SCALE_OPTS) > +fate-vvc-conformance-%: CMD = framecrc -c:v vvc -strict experimental -i $(TARGET_SAMPLES)/vvc-conformance/$(subst fate-vvc-conformance-,,$(@)).bit $(SCALE_OPTS) > > FATE_VVC-$(call FRAMECRC, VVC, VVC, VVC_PARSER) += $(VVC_TESTS_8BIT) > FATE_VVC-$(call FRAMECRC, VVC, VVC, VVC_PARSER SCALE_FILTER) += \ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".