From patchwork Thu Jan 20 03:25:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 33718 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5434169iog; Wed, 19 Jan 2022 19:30:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJ4wDYJKOnxBDqwyK1dAi7EkOfvO51gqhkfTh3/KMCLnmtfd8kCMweOJCnP3sUcCKPGbH4 X-Received: by 2002:a05:6402:2549:: with SMTP id l9mr33216390edb.230.1642649422383; Wed, 19 Jan 2022 19:30:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642649422; cv=none; d=google.com; s=arc-20160816; b=D/AN4wQh6MkvlwRGIw1vK3o7YJCWNOZk/QnnW1K0fwpcv+LDjixVCr8Bf4HsLnZt8c y4HSKkh/2bAJT5Aj+YYKpzjhXaTnUYhFgClnzUkkkOcm4v4hRSoc7o8sfEXw/geViWMd aiXaOmL4/gVY8zmvUCt3zIX2MDfymFR+t1aH3+33tdKhfSB5zs4ba7MCQtmGAWvy5b1T 3NfL5gnmiyHCtPyraTN7dh/BOkUHme8DmO1BI531hmj21jeZb4UrflYr+3HYmiwDh0Ye rODh1rkVNUFjRfljQMkl4c3PbnA2kYyc+06DSsc4Rr565r8Eu3PI1lRAiewVcknAXNfz 3fuw== 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:to:mime-version:fcc:date:from:references :in-reply-to:message-id:dkim-signature:delivered-to; bh=VGIqYnPueNcwXXKdMPHMCz3FsSQ1LSWNJCexIggC6+c=; b=dCN7nB8vjJuA1klgcGDGEK1f+aZU/C4XGn4bFDjyZNuKLOAwhZAgB/qgsOL8rFvhki 5NxEFY4V4MG1Oc6+xc5tg/srnr/st/nxtSzlDxA/Rew5L1wF0Z3qdZVttMALr5EM2r+1 BUr+qHYhUMRuUC8vyV+lX9udX43E16HgWmcc+537AO/6OYynIIbbO2BEmsC9taPD7RUy utD7ovhUwhLOi34q8sO4k5TvV5205WUqMtIQPYeqMbvKJRBDtUnj4rQa+zO2MGAycbmp Z2vSa/UbxL8B3OexKa9HZJsCsFcJNVuxByRx+G2EC51LAWYw+CuZ+kyF2+i8e2qVU/yJ UZLw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=PFXQOGHA; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i22si1209447ejw.760.2022.01.19.19.30.22; Wed, 19 Jan 2022 19:30:22 -0800 (PST) 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=@gmail.com header.s=20210112 header.b=PFXQOGHA; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A6A0E68B2AD; Thu, 20 Jan 2022 05:26:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86AB868B303 for ; Thu, 20 Jan 2022 05:26:03 +0200 (EET) Received: by mail-pj1-f42.google.com with SMTP id b1-20020a17090a990100b001b14bd47532so4620416pjp.0 for ; Wed, 19 Jan 2022 19:26:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=tuSdVT04MJLMDzTS0QBMXKj2+ae/uTA+E9k21/WB6X4=; b=PFXQOGHAmyi6wOhejOo5tklxNUZmFZqF8E43oWtLaHymvy/YWdbEU52MfBqb9IjDJw FdD/jlPKuUbgezHcuofSDqyT0JFdBXfOaWKMAQARDa1Ooebfn/yLRkCH2Jhp3UWV8Ehw twdu3NA+Q6ntUNNCS+O6uli8hWl/JDZNyGEH8Toq1rd+ONpVKZKN+xuzOLFn/eRoLIE4 IwBLMbkiHdrcOt0qQspGArnbL3heu+PPbGr2fHoFK8RJItYNxpK1rfHN+2/dpKwwDBeh t5usO/RuzK6UW1HDuH/I9jsdls2DXNta/Iw0ITH4LlmE4PNZtVh65HP7uxJcBvZz/w+8 tN9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=tuSdVT04MJLMDzTS0QBMXKj2+ae/uTA+E9k21/WB6X4=; b=bMXr01NJHcJQuWhuSoX5Gz/eIisIlqJ35j+ZUM5SvX/THSY3faRa2fe2+EHnwREjyb LK3dVR8h0EcifwCmZFOO3SLc0AfE8e5XinBvhPQerUfFpD1UXnWQyz8CnziTuh0fWsgr uJhTKRnSxaS5OziTtA4IwwaH7+F2ly0QZWyxsa2dOQH+PWmz/gOu87sbEBYaV6TfkxRL dW42Q9YSlF6/mHuOOwKwcgKwkC9tYeNmHtg9lKnifTn+SYTVhLPrBUQa5ssCf6bgNyrG RJk8X+ig34b4Nk93PPRQYKaW+YyETpEJ0WDD8RFFNu8aYGXoBK1vuhc+kPO57xw6wx6r kN8g== X-Gm-Message-State: AOAM532y+jOfIJrlUsk4mkM0lvQjG3YqGAEYZ9I0NN8A4IglNzOB0vRl K8wN6HmAyajkTOFsqJkVe7CsLKwIi94= X-Received: by 2002:a17:90a:a418:: with SMTP id y24mr8291468pjp.48.1642649161753; Wed, 19 Jan 2022 19:26:01 -0800 (PST) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id g19sm1111054pfv.11.2022.01.19.19.26.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Jan 2022 19:26:01 -0800 (PST) Message-Id: <0c279550d69c6ede11ed92234dfc94727b243c68.1642649134.git.ffmpegagent@gmail.com> In-Reply-To: References: From: ffmpegagent Date: Thu, 20 Jan 2022 03:25:33 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v3 25/26] avcodec/webvttenc: Don't encode drawing codes and empty lines 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: Michael Niedermayer , softworkz , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IrqY/Y/hm28L From: softworkz Signed-off-by: softworkz --- libavcodec/webvttenc.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/libavcodec/webvttenc.c b/libavcodec/webvttenc.c index 48945dcb8e..62c4aa7ffd 100644 --- a/libavcodec/webvttenc.c +++ b/libavcodec/webvttenc.c @@ -39,6 +39,8 @@ typedef struct { int count; char stack[WEBVTT_STACK_SIZE]; int stack_ptr; + int has_text; + int drawing_scale; } WebVTTContext; #ifdef __GNUC__ @@ -115,17 +117,24 @@ static void webvtt_style_apply(WebVTTContext *s, const char *style) static void webvtt_text_cb(void *priv, const char *text, int len) { WebVTTContext *s = priv; - av_bprint_append_data(&s->buffer, text, len); + if (!s->drawing_scale) { + av_bprint_append_data(&s->buffer, text, len); + s->has_text = 1; + } } static void webvtt_new_line_cb(void *priv, int forced) { - webvtt_print(priv, "\n"); + WebVTTContext *s = priv; + if (!s->drawing_scale) + webvtt_print(priv, "\n"); } static void webvtt_hard_space_cb(void *priv) { - webvtt_print(priv, " "); + WebVTTContext *s = priv; + if (!s->drawing_scale) + webvtt_print(priv, " "); } static void webvtt_style_cb(void *priv, char style, int close) @@ -149,6 +158,12 @@ static void webvtt_end_cb(void *priv) webvtt_stack_push_pop(priv, 0, 1); } +static void dialog_drawing_mode_cb(void *priv, int scale) +{ + WebVTTContext *s = priv; + s->drawing_scale = scale; +} + static const ASSCodesCallbacks webvtt_callbacks = { .text = webvtt_text_cb, .new_line = webvtt_new_line_cb, @@ -161,6 +176,7 @@ static const ASSCodesCallbacks webvtt_callbacks = { .cancel_overrides = webvtt_cancel_overrides_cb, .move = NULL, .end = webvtt_end_cb, + .drawing_mode = dialog_drawing_mode_cb, }; static void ensure_ass_context(WebVTTContext* s, const AVFrame* frame) @@ -211,16 +227,23 @@ static int webvtt_encode_frame(AVCodecContext* avctx, AVPacket* avpkt, } if (ass) { + const unsigned saved_len = s->buffer.len; - if (i > 0) + if (i > 0 && s->buffer.len > 0) webvtt_new_line_cb(s, 0); + s->drawing_scale = 0; + s->has_text = 0; + dialog = avpriv_ass_split_dialog(s->ass_ctx, ass); if (!dialog) return AVERROR(ENOMEM); webvtt_style_apply(s, dialog->style); avpriv_ass_split_override_codes(&webvtt_callbacks, s, dialog->text); avpriv_ass_free_dialog(&dialog); + + if (!s->has_text) + s->buffer.len = saved_len; } }