From patchwork Mon May 22 12:05:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 41775 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:ba91:b0:105:feb:71f2 with SMTP id fb17csp1436386pzb; Sun, 21 May 2023 21:05:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ46MFyCkfAAqeHwk7UtEwKzhzk4tytDqGRKntIJQ5nI7jmtn2VM1K/zlR7SPA98g8lcdk3B X-Received: by 2002:a17:907:6288:b0:946:be05:ed7a with SMTP id nd8-20020a170907628800b00946be05ed7amr8233910ejc.70.1684728344230; Sun, 21 May 2023 21:05:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684728344; cv=none; d=google.com; s=arc-20160816; b=N7wnMUCBS7khPceU4VMLK+OBFhDzsuBSRoiSiQ6serkbvUHrHQU2aY9AxoE2eW6E5O uIV3gCSmPoY/qNqOmiB0eJ+y+oB4ZGO3/nz3pIk6zWouI0EmzOUeStg6KpU9dRLF/SjP yTN/ncPTkw44OUbKSaa/Eo1lkyfXtnEmuT0DNKT3w2bBPKbFJ4joYyALG5Sv8dNBazM+ SoG7nZr4MQmGa803snZ9Nqfx632QDJT1qXxQKnM3Rrkbq1mKF7fwK+JbSKf2NzBQINRn u47/UNAS8ATReHFyhsoIqolTsOf8vs8K+siSOS65crYmfXSxBgm1/eoMEWw3/uT9tj9L jdDQ== 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:date:to:from:message-id :dkim-signature:delivered-to; bh=ZXxPvSmT13nf/LfbtCgsnvqQNTou7R38KqAbYQVYlrY=; b=PKs3INtmibcEAU0FZw52UDa/tWeswUT+s7nZUlCzSU2lh9NG6IChpf7RDRJugAwmWe KuGE/TNYfUxz7FePC/tab+efQafC19e42VF6PFO7s/34XNGg2lTmdEdy6nP3JPicyu2l ncTMct1o0nPRErnwNZQVoObOC+MqLxGZzaCqrhUAabo/ATJYyr5wkOnZhFAMxwLS+GLQ s/L4D+uQcJ2mQtr9/laqF0E/MJI5QA5TxhVSQitJE/x2pIla1zSm7M7AJy8HmNv7vKLU 0/b+3T/1H0Nw8DyMWrWuJseVkEYulVFu+TGqUaSxVvSCDHiSbM/WZov7i3D/aKESaWD5 PV3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=QIsJXhYw; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n22-20020a170906379600b0094f0742acf6si378543ejc.87.2023.05.21.21.05.43; Sun, 21 May 2023 21:05:44 -0700 (PDT) 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=@foxmail.com header.s=s201512 header.b=QIsJXhYw; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 72D5F68C0CD; Mon, 22 May 2023 07:05:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-231.mail.qq.com (out203-205-221-231.mail.qq.com [203.205.221.231]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7BD7268C005 for ; Mon, 22 May 2023 07:05:30 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1684728323; bh=QGyefbNR5Z3HKnxU/30L+YaXn4q43D+QJWWK21FQtNo=; h=From:To:Cc:Subject:Date; b=QIsJXhYwxZ/T3deuBbISg/Gaia5v4YnX5N3x16Nz6+2jTvrzQMP+pmeViBFL1myAH kWFuidDuNjttJvTPtR7S1E6nfihJYMw7yb+pVTZXSUUvonGgo81BEdiHab37DGY40a 4/CVVF+lg/AlB/wQjH9HaVV5D991fw0t4V+3GQgE= Received: from localhost.localdomain ([119.147.10.186]) by newxmesmtplogicsvrszc2-0.qq.com (NewEsmtp) with SMTP id 15620087; Mon, 22 May 2023 12:05:22 +0800 X-QQ-mid: xmsmtpt1684728322tsmkpsa9p Message-ID: X-QQ-XMAILINFO: Md/xSstEnVzNO1kF7El2dV2qutmtLz6TOgY8F6+lF84/IDEi78ZppH8e5KMRMx 6hmSCwl2rI2qPNPPo0mCivIlCjHE43/jvlBgQpXes9MSVAaZz1v4sau5IuXG+SCD8quDtGL1I1V9 lJl0M7ISU3SaLIDoAbNUaEacFPLt/N9pFd6x6JmVhnjNm8JgpYUgJL6eXsjcMfgHINOAA0EiuvTd ufFY8qenDzDjshOMe5FbL88bzAvD0/SZu8oXrSkpdCv3EmIO19xlAfBupRS1wMo3N6OqQV8nRM5W 3of5JQb2NlqJTqNZNHooHYVJ3+PJunc4D9E5gmXRpmZBdB84GtYTaZeQ0nE777yh2ASTTNUwiJ19 NSRY8jkCHEsYS99BCAX2y3Vk4GvEYaH4zTpDgY2PcTIEmtl1eiq9g/AAOlpmTctlS/B7Xu6dIfOX o/vYbaGPDhWmOQP2m9l+AZ+7N5DRy4vGUB5PglNlW+L/+8yLnkLpzjPgwI8yBV+OFS+77EGMwWlf dozrJ40o7c++5zRr0SeHNSKpxVVqos1pNj9D80pHfmN5ZJw5lFTBfYlurAS64jOVE0kHmG/NDocw yLLPSD3fBFDwu6f4wgKOBQfUfCnp4+1+1199UU9jFBJPM672PFZZiKtIxiKGBypq9GUEPfLGaTCb 14vzywDbNuuHm5xBlM85WGBTBj/UxOkggUFhWXb0ojXyS/2p2ypQ2op4Kpm4N16Jj9fRpPO8uV4H bbXavR9+L+C7v47/xMyHo4xf/n7/64UPgx+5PP/UGmPc6YmuEkjRAmIpWM985bT9MIWtFY7VKrru FBbJJkUzgZ/30yn45PdcaGnIGkayUC9S9UWa8uxKZT6/tAPd1ZSG++YiXW/sS/1+pLwAxXscFxB9 P95Oq3UUF3Bw0Djj3nslA3fPYwY5hR48l6m58Ndch/zFCHLx3EBFufiQIj4BTO1X7v+lhQ99HzqL kiiWoWkT+rYrgbOW9WljWDxICvsnrq8BMNxQ98XkY= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 22 May 2023 20:05:30 +0800 X-OQ-MSGID: <20230522120530.397730-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avfilter/vf_subtitles: add wrap_unicode option 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /GeUgAlsv86O From: Zhao Zhili So CJK can be wrapped automatically. Signed-off-by: Zhao Zhili --- v2: Don't overwrite wrap automatically for native ASS libavfilter/version.h | 2 +- libavfilter/vf_subtitles.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libavfilter/version.h b/libavfilter/version.h index ba8a6fdab2..08779130f5 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFILTER_VERSION_MINOR 8 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c index 82e140e986..48038cde23 100644 --- a/libavfilter/vf_subtitles.c +++ b/libavfilter/vf_subtitles.c @@ -61,6 +61,7 @@ typedef struct AssContext { int original_w, original_h; int shaping; FFDrawContext draw; + int wrap_unicode; } AssContext; #define OFFSET(x) offsetof(AssContext, x) @@ -271,6 +272,9 @@ static const AVOption subtitles_options[] = { {"stream_index", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS}, {"si", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS}, {"force_style", "force subtitle style", OFFSET(force_style), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS}, +#if (LIBASS_VERSION >= 0x01600010) + {"wrap_unicode", "break lines according to the Unicode Line Breaking Algorithm", OFFSET(wrap_unicode), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, FLAGS }, +#endif {NULL}, }; @@ -432,6 +436,16 @@ static av_cold int init_subtitles(AVFilterContext *ctx) if (ret < 0) goto end; + /* Don't overwrite wrap automatically for native ASS */ + if (ass->wrap_unicode == -1) + ass->wrap_unicode = st->codecpar->codec_id != AV_CODEC_ID_ASS; + if (ass->wrap_unicode) { + ret = ass_track_set_feature(ass->track, ASS_FEATURE_WRAP_UNICODE, 1); + if (ret < 0) + av_log(ctx, AV_LOG_WARNING, + "libass wasn't built with ASS_FEATURE_WRAP_UNICODE support\n"); + } + if (ass->force_style) { char **list = NULL; char *temp = NULL;