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 A84374051A for ; Tue, 21 Feb 2023 00:25:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F2CF968C0E0; Tue, 21 Feb 2023 02:25:31 +0200 (EET) Received: from mail-il1-f175.google.com (mail-il1-f175.google.com [209.85.166.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C753868C0D5 for ; Tue, 21 Feb 2023 02:25:24 +0200 (EET) Received: by mail-il1-f175.google.com with SMTP id e10so1054424ilu.4 for ; Mon, 20 Feb 2023 16:25:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rwwb6twgE7rfXU4R/qFk20LHhNt3ye21nzj0bsskT3w=; b=C3J6acmrnU6uJP8N8bzLoI02IWPIsSJnSNr8JUPG1vgwTJkxUQFiBE+RrkckPBBS0d noJ4RgL49zcRcSTrlElWjZIh3+IUxEcJEnyOmp0dh7XGvd0BpqDK/d6kQrbUeoVN8XJb 6qm/HsUPHrwvBQv5rIIhm0DVpwbBJHqFsum0MJbGa0VTuUjAs6Q5/PaE4DTmE19L7YOT A4DI/KSopsS18QWqO5KBFjGZHS+73bQztkW60B1+5EpkEmF+id1tDt+GV70LyTbqs4Zt 4Z8QH0Bef1B0D1SvQgWJpzqNbgqH03O/qqj3/QeTzCi29MlqzHAKjVhqouppNwMIO8+o SWYQ== 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:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rwwb6twgE7rfXU4R/qFk20LHhNt3ye21nzj0bsskT3w=; b=iiJRyz7MrJAMGC32lxu2Tlh9Zcia4lrpv/Bc7br7U1GUObTD8gxh8Obc/d90CZIqS5 eKb25AxUxULWpm7xtlxKRA/HLcScOD8R/aMEa+CUXmdQUynCd8IUCuAAtT0l3NMmLUc4 31mv3jJy8mrL8twNE0gSwp5P3dJkZ7Zmt6i/f1UkI8Szb16HLY/b21eyTe4mVB07CQXL 0vlLGMl/8HZbMbRIT3BdCfKcme/ixDUEXF2C9u5pfnRfSLrnYffs1y1NoLm9sR5wK77x 7o7HPfSko2GPdmwZTbN7pc3ey4enzOFH8A1gDbuuI98SCgNPK69ODOlZyyoahNqipuAQ ad8g== X-Gm-Message-State: AO0yUKUSKuBhLx+j6ooYpqbgBlVR3HnDZ/35+JXVJJn240Jrtzdy0iEK PBuXmLjWgLGLvlAxnDANvKOhpio4mGNl1vnV8A== X-Google-Smtp-Source: AK7set/8z62RpA3OZaw6Yu6+hZ8QDh0BvfiE9Lmll8yNYkEz3NE1Ez1NzJKi2vcX9O+xxl1bqCPgkg== X-Received: by 2002:a92:7d13:0:b0:315:413d:c19e with SMTP id y19-20020a927d13000000b00315413dc19emr2935293ilc.16.1676939123159; Mon, 20 Feb 2023 16:25:23 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:5002:d39e:8443:5cd2]) by smtp.gmail.com with ESMTPSA id h10-20020a02c4ca000000b003a4419ba0c2sm4404575jaj.139.2023.02.20.16.25.22 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 20 Feb 2023 16:25:22 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Feb 2023 18:25:16 -0600 Message-Id: <20230221002516.25784-3-rcombs@rcombs.me> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230221002516.25784-1-rcombs@rcombs.me> References: <20230221002516.25784-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [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: Fixes ASS output when multiple rects are present. --- fftools/ffmpeg.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) 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); -- 2.39.1 _______________________________________________ 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".