From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id 17D1A4E9E8
	for <ffmpegdev@gitmailbox.com>; Thu, 20 Mar 2025 08:02:59 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 36DD2687B97;
	Thu, 20 Mar 2025 10:02:55 +0200 (EET)
Received: from EUR03-DBA-obe.outbound.protection.outlook.com
 (mail-dbaeur03olkn2023.outbound.protection.outlook.com [40.92.58.23])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5E316687B82
 for <ffmpeg-devel@ffmpeg.org>; Thu, 20 Mar 2025 10:02:48 +0200 (EET)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=Bx6ei9gZZa9tRgXgZbxD5+pJ6l/c6w5ox2JJS11K0LV24vvtDaOrVVMCAKY+HRV4R/gn0I3hs8tS5xsTiXENJcPLoH1JsnDXCXIGlykLwRAWfRgm7SPp08X3sGHdL7piVCd1tkV+tJ3RUR9ZWJPUa6Z+4feHqVCljRNYn4Q5cchvOiMaByL7ZKck8tgXI06xpsFvTs3clQ7elshCDNB6WrNcspmtLDvmo94iF88P8PnhJHUTfUWzC+QYu1jzTr/39FBeiItdUsoHrVQF5bhNuWo7C+5qTKpKnWzBVVmrRbtJ3YXNjB6vbq9k1Aj6YyBve7aJUHFMb7RsTMTc1RKD8w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=V2REyKNmaO5KZszCqxqyDTng3BanWp4riM9yUfqpc+Y=;
 b=BF6OmcE5VKT6QYKUTVLDnDfLPbbkQTI6Llb5M50cdufrlw5y6faZ2fZmU0UtOWl8FivqRfVsehlB+n85VScuhsUpIlL+9OZ+HtFig3WmeUYw2C5ZRcgBpw9doi3F9Gh/9/o40H9rb01tBy93JS3C+DIDTcKYsyaQwEqhVXnyMC6hc/Pc4dlURR71GhT7Kxlde3YaFFtbaqpICgQYb3WFJnA98ojo6VmUVwXWaTxoBIMsgfOOcJ2RWVcbg+Z5wQAYY8QWlAb0j0FCtkLMccy5uurz++dgStnq3hYLrDqqOzdFdC61KAEnDLiiUow/hsE9EWUzcmS8yPw3QFlf0aNqdA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none;
 dkim=none; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=V2REyKNmaO5KZszCqxqyDTng3BanWp4riM9yUfqpc+Y=;
 b=qmRb/IcKvXs8CAxbHMnNVNytwtjBBZ3MWK/oQBnAffArVUWyYL8n1jObv7lMGJGTjaZGZ7M/LPF4hlgIYgToDHJraaIQ31v16pr9I+n94ffV/Mdje/Sh2D7+e529Uu9C8BL7w19M/2BBl6E96gNlYkccRCKA2eurJhb8MjJoyyfPcuZtgJa8uC7MCNUI2XHUIIccCK+BsQPom0kEYKCSNCqILPuoePbDJuG0CGmWzdZxDcBO5ohj3pdxd3lOVUNvWbWivNlP8BCSGKuc/D0FQVMTekQCcjz84XaUka58yO2YinfrZtNbjMu03d1/RncGyIa9ElaIQMu0uxxsI5BU6w==
Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16)
 by DU2P250MB0335.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27c::11) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8583.13; Thu, 20 Mar
 2025 08:02:46 +0000
Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM
 ([fe80::1f36:56b3:1d04:c7a6]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM
 ([fe80::1f36:56b3:1d04:c7a6%6]) with mapi id 15.20.8534.031; Thu, 20 Mar 2025
 08:02:46 +0000
Message-ID: <DU0P250MB074785FBAC352DECD4E31FB88FD82@DU0P250MB0747.EURP250.PROD.OUTLOOK.COM>
Date: Thu, 20 Mar 2025 09:02:44 +0100
User-Agent: Mozilla Thunderbird
To: ffmpeg-devel@ffmpeg.org
References: <20250320072450.1164-1-gruttersleonbot2@gmail.com>
Content-Language: en-US
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
In-Reply-To: <20250320072450.1164-1-gruttersleonbot2@gmail.com>
X-ClientProxiedBy: ZR2P278CA0089.CHEP278.PROD.OUTLOOK.COM
 (2603:10a6:910:65::20) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM
 (2603:10a6:10:3cb::16)
X-Microsoft-Original-Message-ID: <34e72226-4bdd-4862-9bd2-8a093f891ef7@outlook.com>
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|DU2P250MB0335:EE_
X-MS-Office365-Filtering-Correlation-Id: 3ab1186e-6f8d-447d-dd6a-08dd67859945
X-Microsoft-Antispam: BCL:0;
 ARA:14566002|7092599003|19110799003|8060799006|15080799006|461199028|6090799003|5072599009|19061999003|440099028|3412199025|18061999006|41001999003;
X-Microsoft-Antispam-Message-Info: =?utf-8?B?SmY0U2QvR0hsZFZiOUliYndYbTc0aHZKSFhhVTBUTXpZb3drWWYzbTZFNnV5?=
 =?utf-8?B?SjQySnR6WjI2Y00rUG9lK1UvaURZUitSL0dKYVRUcE5qdElkRFBWbWdTdzZo?=
 =?utf-8?B?bU1hWnpVY2UzZHZjUi8xTFNGZmJidGxFdG9XdzFEK3A2TWNPSzhsaVFMeTRL?=
 =?utf-8?B?b05Qc0YrTnVwU3BiQy9VclNyVUJKM244ZnBIbTBDeTNEZk9LOUZDMWNMcWJz?=
 =?utf-8?B?K2RzYzBzSmRYRE9YakZJVTZ3YlUvNHBFekdEUWRxMXAxT2xsWmNlRUdRMG9x?=
 =?utf-8?B?OEsxcDFtRWxnM2d5cCtlcUx5eVpRSWxPZVNiZ3NSVEpGWnloNE5VbWdsMlk0?=
 =?utf-8?B?bkxJTWMvWnNzaDYwaXJrbExOQlQ0YmZJWUoreWQzYU0yYWozVjdsKzdPSlhs?=
 =?utf-8?B?WmI1OGtsdFNuTkpkQmFWeHlaQ1ZqRkkvR3JGcTYrbk1PM0d2VUJkZSswa21m?=
 =?utf-8?B?cDdkbDh2QjdZVTJ4OGwrTEpiZzJIME1jSkJLbnUyRnhQNzdRQWowaWpLL3pi?=
 =?utf-8?B?YVo0NW1XU3Y3ei9JYmgzL1RleU5iamlCR245YVF2ZXBobkhuK3RSdGhrVnFk?=
 =?utf-8?B?NUFaVHVkR3lTT3drbUhaMUZZNGljWWNzeGZCWHdIdUxqZW1wMTk1NVVzdjlJ?=
 =?utf-8?B?UERDYy9Fa3UxN0ZjYUZiKzIrc1JkeGlobkZvT0llMkl4MDdydUxZRWVXTFlZ?=
 =?utf-8?B?SC8yaVVMR1VVUnJubUhycU91T2x6NVRORHp5Q1NPdVA0Z2lnWWVJNWpnTzVX?=
 =?utf-8?B?M2pwUzdHZ29EUTREWkh0a0dJMFV5dVB6T3ovR0VtWW5LTkZTbDdURDVHSElO?=
 =?utf-8?B?T0lpSngyeHJ3azB1RWdjeXBGN1JldjVDVk0rN2FqZjV5eUh5SHIwTW1wSVBr?=
 =?utf-8?B?UlZEWE9paGJoZnlGUFZlME10UUE5eEZucFB6TzhKQ1htcktNN0xjUjNUNFN2?=
 =?utf-8?B?YlJ5WGVkTVNSc1FBdUlZZzM2ZldiWldZVmZuVVF0VXliWlhBTEpKTEw4eDhI?=
 =?utf-8?B?UXV6cWsrd3prSVppY1NLU1JDdkpFUER4dG93SlI1enE1bkRqQ2dTV2dEUzJP?=
 =?utf-8?B?YTczTG5vUVorNTEvTFdpWnlHYkZNaVZSVDBQeTVTUVlZK1ZiVjIzdEVqMWFX?=
 =?utf-8?B?ajgwanVtaGovRGc0eFNvNjRoS3o2TjFMYkRHbS9McVczb3VHaEk2OVJKckc1?=
 =?utf-8?B?dkZMNEZ3bFVEM2x2WWpLY0hBS2JPSERlbCszM09UVndnai9yd2l5OWllamdL?=
 =?utf-8?B?bkpHNkl0UC9YOHAxOW8vWE5WcDJIdWF3NE90aVpJV0FKMEs1V2RCTkFJUDVW?=
 =?utf-8?B?V2Ftb3czdzRhTHVTNjl0Y01iSWJaM0h2cndsY3Q5c3h5NzdQSGRrd2NOZUJZ?=
 =?utf-8?B?TDJ0UUc4TWIwVE1hTnFyV2RFNzg4SnNzcDZEM1Q3VldiSGxpMlNUa3lGSkVE?=
 =?utf-8?B?OVhPTUc5RWZWajBUV0pjeFVINjZ5TkpBck5zQmEreG9NT01sdzBXay91c3Mv?=
 =?utf-8?B?Rm9oRExqM0M4Y2ZXdzZCVHFNV045UTFrc09CNW42OUM4TmlvL3pobjFFVEpH?=
 =?utf-8?B?VXkwdjJ5dndKQXpxL0FDL1RtQ2pvTjBlZTBUWWozdGFlK1UvOHEzcEF2S25r?=
 =?utf-8?Q?d/HoK5kv9DuOsdM5AsXz0icWaW6EMNCeqQwtA+YeD0zY=3D?=
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N2d3Q2FLcWlocVpFdkRxSjhhdVVSbXMwTFpSVGF0cVFvYkVLV3g0MFcyT3Yy?=
 =?utf-8?B?UUxacVM3QWI3YmZqaGptVW5RaWpKZExWTExvMUhsRFJsV1V6Ykg2aUZPKzZw?=
 =?utf-8?B?UkczaVZOUlE3NU5scG1QK2U5VFN1QmxMcS9xZFhvRGpmUTYxdE55QlVraFNI?=
 =?utf-8?B?cVF2SFd2K3hNcEI1SE1BYlNLcUVVYU9nd0JvYTJRV3JYMTMydUt4ejREQXNO?=
 =?utf-8?B?Y2xobVVreCtDbHBtV2E3cU5FQ3ZyOGRka0xzM1NoUy9pVlNqYllwaG9yblVi?=
 =?utf-8?B?a1liMlRHS1N4aVBWaVJXdnh6ckZuR2UzdC85d1MwVGR4VjE1UDVNYWJrQnVp?=
 =?utf-8?B?cm5LazBGKzlCczN1MEFVLzFNZjlCYWtOVktMUUI5Mm9MTnpQczBsRFA1Vkp4?=
 =?utf-8?B?Q1VnbHdkdjd2cG5nazMxdnNYUVFsU0tIKzdkTU5USitGVVIxWGRMc3FNOXhR?=
 =?utf-8?B?MU5icWtkSE4zSHE0V3Yvd3ErbDVDRGJmU005SVhXQWZ6aE9XTTlIQm1DQXc3?=
 =?utf-8?B?U2pYRnhLTGUrTHVBSTZSYWxhQmdMQVE0OCtWMlpRY0wvY3Z3Nk1wTWZoU1RK?=
 =?utf-8?B?QlZIRGhzeUJCYW9QOWZFVEw5MUtHdzhPRHA3V1ZuN0tTamVMc1MwdXFmT3hE?=
 =?utf-8?B?MlNkTmNRbGZ3dmVxbWI4dUY1QkY2UnRpdlhuaHZCREFaSW9BMW9uLzdLckNB?=
 =?utf-8?B?cWxQdlVSeEhBang2dXA3MkU4a3NydVM1b3ZBczVkbVVPRmpvKzFSVGRBbTNP?=
 =?utf-8?B?aGlpL0NjRWFyVVB6a0RxbEoxQXQwQ1EyNVo1Q0orYTVHWFVNQmNNVmVDZW9k?=
 =?utf-8?B?eStBeEoxb0wxT2lLV2VvMVlEQzJudlRJd0QwSzRqL3hBYjhOaU4va0srTjBh?=
 =?utf-8?B?bW5JU0JoNUhjM1RGREFvN0pJdnBlNzNwQ1I2dG1YcjVEalp6TGo1ZTlwWlJ4?=
 =?utf-8?B?VXdjNEpyZWRFQ3JYczlETHRsc2FXRmtjMmpwWWIrZnoreXdvZVdFd2IxYWZM?=
 =?utf-8?B?MFlROWFHUWZjekt2cm9kaHpJcExvcWxXT2NIMEtLMFNEcVM1ejNLckxBSWhZ?=
 =?utf-8?B?U1UvV0dlWG1TL1F3ejAxUStOeGhrSXViQVJlZjRRSWxWbDBKUXJXN3dxYi9n?=
 =?utf-8?B?VHg3T1ZYeWRXL3pDcXkzWm5LVGQvb1lEdWtmVVd3QURuMTdHaFF5ZE9Ga1Vo?=
 =?utf-8?B?NEVrVWVDbUJsSFdleXRpQVc1a29vMHc4N3hTc2VXN2daUE5DaXdPNFNCQ2Nh?=
 =?utf-8?B?WVcyMzZnUFhGZ3BYdUV0a3JnTW1YM3ZCSG4wSXF6V0VCV1JzYXlmL0dxdzgz?=
 =?utf-8?B?QStVWTJhVlVXcktOYmR5WlpBRkxXc21zOFNSWE40TytmQlM1RzBRb2dSeDl4?=
 =?utf-8?B?L2dIdTB5NTFCK1FtZXEza2FnS0RwdmNKd25GRURvWVREMWpIblFTemNSZU0r?=
 =?utf-8?B?Z2U3SWhra3ZXWkhUQzRhaFNzZUR4MVdZV2pXUVVyRGRhaEdLcmNMa1NIUXc4?=
 =?utf-8?B?ek9zb1VBOUhjeWJEaDVOc25KeFJzUmxpQ3JmQkFIc00rcDlLVnJ6UmdnUjYz?=
 =?utf-8?B?eVltcm8zV2xhV1lRTmdSZ0p0SHM5bCsweXp1VlFCS0ZCWXpGNlN6NzBYc3Zr?=
 =?utf-8?B?OGROelNOeVQwVlhId0F1U1BhVkpuenBiaEZMS3Y3R0pGMi9GRWdGd0tDZVRt?=
 =?utf-8?B?QTQ5TTFzWkUwcDc5SGpoOVhJY1c5R0FYdVZVRWo5Ky9ETk91b0J0VmxBPT0=?=
X-OriginatorOrg: outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3ab1186e-6f8d-447d-dd6a-08dd67859945
X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2025 08:02:46.1708 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0335
Subject: Re: [FFmpeg-devel] [PATCH] avcodec/webvttdec: strip classes
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/DU0P250MB074785FBAC352DECD4E31FB88FD82@DU0P250MB0747.EURP250.PROD.OUTLOOK.COM/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Leon Grutters:
> If a supported tag has a class, e.g "<i.bold>" it is ignored entirely;
> so for example "<i.bold>Hello</i>" would be converted to "Hello{\i0}"
> instead of the intended "{\i1}Hello{\i0}".
> 
> Signed-off-by: Leon Grutters <gruttersleonbot2@gmail.com>
> ---
>  libavcodec/webvttdec.c | 51 +++++++++++++++++++++++++++++++++---------
>  1 file changed, 40 insertions(+), 11 deletions(-)
> 
> diff --git a/libavcodec/webvttdec.c b/libavcodec/webvttdec.c
> index 35bdbe805d..4111d138c4 100644
> --- a/libavcodec/webvttdec.c
> +++ b/libavcodec/webvttdec.c
> @@ -29,25 +29,53 @@
>  #include "ass.h"
>  #include "codec_internal.h"
>  #include "libavutil/bprint.h"
> +#include "libavutil/mem.h"
>  
>  static const struct {
>      const char *from;
>      const char *to;
>  } webvtt_tag_replace[] = {
> -    {"<i>", "{\\i1}"}, {"</i>", "{\\i0}"},
> -    {"<b>", "{\\b1}"}, {"</b>", "{\\b0}"},
> -    {"<u>", "{\\u1}"}, {"</u>", "{\\u0}"},
>      {"{", "\\{{}"}, {"\\", "\\\xe2\x81\xa0"}, // escape to avoid ASS markup conflicts
>      {"&gt;", ">"}, {"&lt;", "<"},
>      {"&lrm;", "\xe2\x80\x8e"}, {"&rlm;", "\xe2\x80\x8f"},
>      {"&amp;", "&"}, {"&nbsp;", "\\h"},
>  };
> +static const struct {
> +    const char *from;
> +    const char *to;
> +} webvtt_valid_tags[] = {
> +    {"i", "{\\i1}"}, {"/i", "{\\i0}"},
> +    {"b", "{\\b1}"}, {"/b", "{\\b0}"},
> +    {"u", "{\\u1}"}, {"/u", "{\\u0}"},
> +};

These strings are so small that one can avoid the relocations by using
fixes-size buffers.

>  
>  static int webvtt_event_to_ass(AVBPrint *buf, const char *p)
>  {
> -    int i, again = 0, skip = 0;
> +    int i, again = 0/*, skip = 0*/;
>  
>      while (*p) {
> +        if (*p == '<') {
> +            const char *tag_end = strchr(p, '>');
> +            char *tag_body, *tag_name, *saveptr = NULL;
> +            ptrdiff_t len;
> +            if (!tag_end)
> +                break;
> +            len = tag_end - p + 1;
> +            tag_body = av_strndup(p + 1, len - 2);
> +            if (!tag_body)
> +                return AVERROR(ENOMEM);

This allocation seems unnecessary. You can inspect the string without
modifying it by using strncmp() below and by using a maximum field width
for the %s directive in a parameter.

> +            tag_name = av_strtok(tag_body, ".", &saveptr);
> +            for (i = 0; i < FF_ARRAY_ELEMS(webvtt_valid_tags); i++) {
> +                const char *from = webvtt_valid_tags[i].from;
> +                if(!strcmp(tag_name, from)) {
> +                    av_bprintf(buf, "%s", webvtt_valid_tags[i].to);
> +                    break;
> +                }
> +            }
> +            p += len;
> +            again = 1;
> +            av_freep(&tag_body);
> +        }
>  
>          for (i = 0; i < FF_ARRAY_ELEMS(webvtt_tag_replace); i++) {
>              const char *from = webvtt_tag_replace[i].from;
> @@ -59,21 +87,22 @@ static int webvtt_event_to_ass(AVBPrint *buf, const char *p)
>                  break;
>              }
>          }
> +
>          if (!*p)
>              break;
>  
>          if (again) {
>              again = 0;
> -            skip = 0;
> +            // skip = 0;
>              continue;
>          }
> -        if (*p == '<')
> -            skip = 1;
> -        else if (*p == '>')
> -            skip = 0;
> -        else if (p[0] == '\n' && p[1])
> +        // if (*p == '<')
> +        //     skip = 1;
> +        // else if (*p == '>')
> +        //     skip = 0;
> +        if (p[0] == '\n' && p[1])
>              av_bprintf(buf, "\\N");
> -        else if (!skip && *p != '\r')
> +        else if (/*!skip && */*p != '\r')
>              av_bprint_chars(buf, *p, 1);
>          p++;
>      }

_______________________________________________
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".