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 DDE1B4578D for ; Tue, 21 Feb 2023 08:09:33 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E938868C0C3; Tue, 21 Feb 2023 10:09:31 +0200 (EET) Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C955268BE9B for ; Tue, 21 Feb 2023 10:09:25 +0200 (EET) Received: by mail-io1-f46.google.com with SMTP id 76so1790347iou.9 for ; Tue, 21 Feb 2023 00:09:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :from:to:cc:subject:date:message-id:reply-to; bh=MBUolWJqxe4+ne27RWidE8f5f3Ew6LS0RrRYDqy2698=; b=AWxXUqnotFIXcEzMjj1TUI+lQoPA5A48rdp0f0kaHW8hi4UahTV5du//e3ZuOpguK6 upuMjJY7S9ghGw6pOQjqFvrabjgsuQm91oFHzAAB4N7/5xuCmkI9URAiL2kLih01LB8m iA5MOL5npHvFssfGgnWJF4QEnjxznFeAQHGZRmJ6++MhVzNgkY518pp3GjDuYp8sGv7d DdOzEhGLKGrCqDGy7BgAKCD4JoZo9e4apsFJtuzKzYBvvitt6P5hT1Ov/b398Lpeg9gk fUF+TuQjHzcISKttvglK7fLm4tB+AEAXL2OcpCpjPOsV/qpf1X4mzpz1Pa1kxyyRqd9W yaqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MBUolWJqxe4+ne27RWidE8f5f3Ew6LS0RrRYDqy2698=; b=D83ABA+/8rWOpDqdiTpU1vHiX5vrcx5pQ2Nk6Tob8BEvVcYvUicShJ5tPgiCr+SVFp e98M4KFfjpr5YAl4yxvvo9lRkAznmNMW5jz+UpMEkdjWI7GFbpLW/xBIWG2nDjnavADO ikJ/+MaD6pb0KFL0jMsn0Xp79dOcjjhwzGQuMwMPryxWIp9C9yg4vHiRSMTa+8YTXQeK Nq7+dQwSm56fNEsr5/nvp6txerkx3qtmPAjTzZ4TlGs1E+Rru0sK255cRuM6ZAtOG8z2 HeVeAtPE9gpUzprXg4cudgGq0N2NQhdVmrjriqYIlifQ115YrK5RUKsq0T6P9pphCPs4 b6hw== X-Gm-Message-State: AO0yUKXB1lgqbR4blec/9YiLjoaNRjh09DF46xiA4/vJ1c9u2EzZGIWN vkGypTpf1H2nIphTGXoc3lZvkF14aod0Ndc9Dg== X-Google-Smtp-Source: AK7set96J+YQ3v0j61sASdfJb4QdNve+Q/nLGoF/iFasY68S/uD6rSwfxaxf3Syrby49xp1ZcQGRgg== X-Received: by 2002:a05:6602:1612:b0:74c:89c4:8e03 with SMTP id x18-20020a056602161200b0074c89c48e03mr256185iow.10.1676966964080; Tue, 21 Feb 2023 00:09:24 -0800 (PST) Received: from smtpclient.apple ([2601:243:2000:5ac:5002:d39e:8443:5cd2]) by smtp.gmail.com with ESMTPSA id i24-20020a6bf418000000b00745ea2589fasm4103634iog.40.2023.02.21.00.09.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Feb 2023 00:09:23 -0800 (PST) From: Ridley Combs Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.400.51.1.1\)) Date: Tue, 21 Feb 2023 02:09:12 -0600 References: <20230221002516.25784-1-rcombs@rcombs.me> <20230221002516.25784-3-rcombs@rcombs.me> To: ffmpeg-devel In-Reply-To: Message-Id: X-Mailer: Apple Mail (2.3731.400.51.1.1) X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 3/3] ffmpeg: respect AV_CODEC_CAP_SINGLE_SUB_RECT 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: > On Feb 21, 2023, at 01:45, Nicolas George wrote: > > rcombs (12023-02-20): >> Fixes ASS output when multiple rects are present. >> --- >> fftools/ffmpeg.c | 28 ++++++++++++++++++---------- >> 1 file changed, 18 insertions(+), 10 deletions(-) > > Does this not belong to the framework? I don't see a way it could be? avcodec_encode_subtitle takes an AVSubtitle and writes to a single caller-provided buffer; there's no way for it to generate multiple outputs for a single input. > >> >> diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c >> index 9884e0c6c6..23eac52438 100644 >> --- a/fftools/ffmpeg.c >> +++ b/fftools/ffmpeg.c >> @@ -1021,6 +1021,7 @@ static void do_subtitle_out(OutputFile *of, >> AVCodecContext *enc; >> AVPacket *pkt = ost->pkt; >> int64_t pts; >> + int single_rect; >> >> if (sub->pts == AV_NOPTS_VALUE) { >> av_log(ost, AV_LOG_ERROR, "Subtitle packets must have a pts\n"); >> @@ -1031,11 +1032,15 @@ static void do_subtitle_out(OutputFile *of, >> >> enc = ost->enc_ctx; >> >> + single_rect = !!(enc->codec->capabilities & AV_CODEC_CAP_SINGLE_SUB_RECT); >> + >> /* Note: DVB subtitle need one packet to draw them and one other >> packet to clear them */ >> /* XXX: signal it in the codec context ? */ >> if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE) >> nb = 2; >> + else if (single_rect) >> + nb = FFMAX(sub->num_rects, 1); >> else >> nb = 1; >> >> @@ -1044,7 +1049,7 @@ static void do_subtitle_out(OutputFile *of, >> if (output_files[ost->file_index]->start_time != AV_NOPTS_VALUE) >> pts -= output_files[ost->file_index]->start_time; >> for (i = 0; i < nb; i++) { >> - unsigned save_num_rects = sub->num_rects; >> + AVSubtitle local_sub = *sub; >> >> if (!check_recording_time(ost, pts, AV_TIME_BASE_Q)) >> return; >> @@ -1053,19 +1058,22 @@ static void do_subtitle_out(OutputFile *of, >> if (ret < 0) >> report_and_exit(AVERROR(ENOMEM)); >> >> - sub->pts = pts; >> + local_sub.pts = pts; >> // start_display_time is required to be 0 >> - sub->pts += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, AV_TIME_BASE_Q); >> - sub->end_display_time -= sub->start_display_time; >> - sub->start_display_time = 0; >> - if (i == 1) >> - sub->num_rects = 0; >> + local_sub.pts += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, AV_TIME_BASE_Q); >> + local_sub.end_display_time -= sub->start_display_time; >> + local_sub.start_display_time = 0; >> + >> + if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE && i == 1) >> + local_sub.num_rects = 0; >> + else if (single_rect && sub->num_rects > 0) { >> + local_sub.num_rects = 1; >> + local_sub.rects += i; >> + } >> >> ost->frames_encoded++; >> >> - subtitle_out_size = avcodec_encode_subtitle(enc, pkt->data, pkt->size, sub); >> - if (i == 1) >> - sub->num_rects = save_num_rects; >> + subtitle_out_size = avcodec_encode_subtitle(enc, pkt->data, pkt->size, &local_sub); >> if (subtitle_out_size < 0) { >> av_log(ost, AV_LOG_FATAL, "Subtitle encoding failed\n"); >> exit_program(1); > > Regards, > > -- > Nicolas George > _______________________________________________ > 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". _______________________________________________ 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".