From patchwork Thu Jan 20 03:25:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 33698 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp5431647iog; Wed, 19 Jan 2022 19:25:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJzxPOIM5izyto1wg32cu4OwvF64KwqUKL4ZnFURqefmJsfIt0bum1+r83BDjEkZHQOScOQZ X-Received: by 2002:a05:6402:175c:: with SMTP id v28mr4249809edx.279.1642649149060; Wed, 19 Jan 2022 19:25:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642649149; cv=none; d=google.com; s=arc-20160816; b=f21e8IW4RarHFTRPHkcV986yeCA23YvW/TQwDU66GhHjI0Zwl5m1VILa60hgWVAK0x 1eXwn0depLrGmwll3/+kSHYzJ+HTGX5A9+OuwXEyKv3MmmeToRd3HhyCIFKLU3b/QY0y /2fsdRqFiPajOMS9PmiI6OTz3KJNRgCK1SepKwpr236jywe6vd+vF08S9QWpu+0iAMIL P1/ZvBEp8q8XCReChwpfpqsjoRVVhGE1ewRH2G1Zz40EFgJgf72TA9W5s4ZFmDmpWAM6 3jEFvZuRYBpDyj9cAbUkn0RlstIvSFDbhE7TZoGWm92CcmVX0ctG7d3ZMVKfA/TodJFl Kibg== 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=4kZhv2RRPX/TRIk5p8U9DlOOJG30xAsapbSM+45VPfw=; b=yn2dz5fFT5dlDuFznOSFlBydJk2Rzr54jIlwnqndv5HQJm5Dicij8x6Qgfx5xP0sYZ iGCSgX1A0xu7gFqS+Vaeq2XtVllC/c8COb8tlSiL5wipsKQHiIbXvtrad+X0abV1e3KV ctlmRrrUBZWobvPViEZ/+OSP86RMIxdWDe3UX8EXNmKgTn4oj/loUpUTPViDPXHB3AMk 8vpPFfOqcmYgkA+7i9sM8+wP6dZV8xtIAabD5m5n/orN04Uz8Ea0BhcyWElU5vu6z+/2 jJNGH99uH1zkJT/X47XDHBStbkxAfg9/s6VkDET3DsWSI9X9WHDG3uJnDTU4xVS2JgHj UTYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=AiA9KS1s; 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 s1si967117ejs.641.2022.01.19.19.25.48; Wed, 19 Jan 2022 19:25:49 -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=AiA9KS1s; 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 A6F9368B1E6; Thu, 20 Jan 2022 05:25:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 54CB968B02E for ; Thu, 20 Jan 2022 05:25:38 +0200 (EET) Received: by mail-pg1-f169.google.com with SMTP id e9so909652pgn.4 for ; Wed, 19 Jan 2022 19:25:38 -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=KSRogUWG1atgMjNGkL9ewFd4TmVSxm3iE9PqFo87PK8=; b=AiA9KS1soerTA1EMC+Af4+cBEd2/AJ5Wh2GeH0QVhK0J2Qr5Ij1sj9TDa9sm6xRKq/ TsRvHdNOVQ9R9X2Ntpbxd2xxaDHm2p2zwoE0nx2PFDs5a1f+4pLwY4Pqp/hCNJcIKFBr WaIvyzs40728yHAtJKhedYW3YLSdfVoM3Yl7wx+UCBtjCDEi7sy1OJnylEJbhJQEkxer 9HLgQQbfTX1zH7Dk9zO/YMvOS27mhU1EFZFzn/LG8RZ6mROPc/vfeqbSal6lSwKUJkll cUwCSbsh25kOmBeORVdoBpCWXVV9fn+63SnPEQ8fg0TFgEGhYGBAE7BZRTa5F1uE9c1u Xtjw== 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=KSRogUWG1atgMjNGkL9ewFd4TmVSxm3iE9PqFo87PK8=; b=tgMnvbR1XXkbdrACPewfrM8T0ZVxfsfXFw6UVqVSh9kX36VoXyZuYc+0X98ayjFFci rqUmfmQe9p5TCN4aPbh39jwvHXm+/kG/UUNvkVYC6SGcp8CxtFbvhCbXfUcdn3w8i90u BsYoOQ1BreXrPvRAbRDEVd7oxpXbv7Bxz4X7CzLTL0yn4ZUlPe/nWpi0EHIFwPn2+fM+ uVwkQ9NPCVsIC0ZErSDpbHiNZCqdDelNEJHQjcUOU0OJah/smsl1qZMWZ0aPdlIvdx4x 3bcY47WE5AyIgtA9pzQcj7N/6UDqLR2viBwx+pXGvyrjpBXrxd8F7bHtwIHBmWo11x1y 0PSQ== X-Gm-Message-State: AOAM533cQ45qNAONqrL/eg2+gydECHEBUz60tu+4wHnPOo6WH0FEUgYS qH24mmSKxl+8MBD1HgQ9xaf605s8NJA= X-Received: by 2002:a63:40c5:: with SMTP id n188mr30144397pga.118.1642649136199; Wed, 19 Jan 2022 19:25:36 -0800 (PST) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id w8sm1023304pfu.64.2022.01.19.19.25.35 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Jan 2022 19:25:35 -0800 (PST) Message-Id: In-Reply-To: References: From: ffmpegagent Date: Thu, 20 Jan 2022 03:25:08 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v3 00/26] Subtitle Filtering 2022 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: O4KKdpb2VusP Subtitle Filtering 2022 ======================= This is a substantial update to the earlier subtitle filtering patch series. A primary goal has been to address others' concerns as much as possible on one side and to provide more clarity and control over the way things are working. Clarity is is specifically important to allow for a better understanding of the need for a subtitle start pts value that can be different from the frame's pts value. This is done by refactoring the subtitle timing fields in AVFrame, adding a frame field to indicate repeated subtitle frames, and finally the full removal of the heartbeat functionality, replaced by a new 'subfeed' filter that provides different modes for arbitrating subtitle frames in a filter graph. Finally, each subtitle filter's documentation has been amended by a section describing the filter's timeline behavior (in v3 update). The update also includes major improvements to graphicsub2text and lots of other details. Versioning is restarting at v1 due to the new submission procedure. v3 - Rebase =========== due to merge conflicts - apologies. Changes in v2 ============= * added .gitattributes file to enforce binary diffs for the test refs that cannot be applied when being sent via e-mail * perform filter graph re-init due to subtitle "frame size" change only when the size was unknown before and not set via -canvas_size * overlaytextsubs: Make sure to request frames on the subtitle input * avfilter/splitcc: Start parsing cc data on key frames only * avcodec/webvttenc: Don't encode ass drawing codes and empty lines * stripstyles: fix mem leak * gs2t: improve color detection * gs2t: empty frames must not be skipped * subfeed: fix name * textmod: preserve margins * added .gitattributes file to enforce binary diffs for the test refs that cannot be applied when being sent via e-mail * perform filter graph re-init due to subtitle "frame size" change only when the size was unknown before and not set via -canvas_size * avcodec/dvbsubdec: Fix conditions for fallback to default resolution * Made changes suggested by Andreas * Fixed failing command line reported by Michael Changes from previous version v24: AVFrame ======= * Removed sub_start_time The start time is now added to the subtitle start_pts during decoding The sub_end_time field is adjusted accordingly * Renamed sub_end_time to duration which it is effectively after removing the start_time * Added a sub-struct 'subtitle_timing' to av frame Contains subtitle_pts renamed to 'subtitle_timing.start_pts' and 'subtitle_timing.duration' * Change both fields to (fixed) time_base AV_TIMEBASE * add repeat_sub field provides a clear indication whether a subtitle frame is an actual subtitle event or a repeated subtitle frame in a filter graph Heartbeat Removal ================= * completely removed the earlier heartbeat implementation * filtering arbitration is now implemented in a new filter: 'subfeed' * subfeed will be auto-inserted for compatiblity with sub2video command lines * the new behavior is not exactly identical to the earlier behavior, but it basically allows to achieve the same results New 'subfeed' Filter ==================== * a versatile filter for solving all kinds of problems with subtile frame flow in filter graphs * Can be inserted at any position in a graph * Auto-inserted for sub2video command lines (in repeat-mode) * Allows duration fixup delay input frames with unknown duration and infer duration from start of subsequent frame * Provides multiple modes of operation: * repeat mode (default) Queues input frames Outputs frames at a fixed (configurable) rate Either sends a matching input frame (repeatedly) or empty frames otherwise * scatter mode similar to repeat mode, but splits input frames by duration into small segments with same content * forward mode No fixed output rate Useful in combination with duration fixup or overlap fixup ffmpeg Tool Changes =================== * delay subtitle output stream initialization (like for audio and video) This is needed for example when a format header depends on having received an initial frame to derive certain header values from * decoding: set subtitle frame size from decoding context * re-init graph when subtitle size changes * always insert subscale filter for sub2video command lines (to ensure correct scaling) Subtitle Encoding ================= * ignore repeated frames for encoding based on repeat_sub field in AVFrame * support multi-area encoding for text subtitles Subtitle OCR can create multiple areas at different positions. Previously, the texts were always squashed into a single area ('subtitle rect'), which was not ideal. Multiple text areas are now generally supported: * ASS Encoder Changed to use the 'receive_packet' encoding API A single frame with multiple text areas will create multiple packets now * All other text subtitle encoders A newline is inserted between the text from multiple areas graphicsub2text (OCR) ===================== * enhanced preprocessing * using elbg algorithm for color quantization * detection and removal of text outlines * map-based identification of colors per word (text, outline, background) * add option for duration fixup * add option to dump preprocessing bitmaps * Recognize formatting and apply as ASS inline styles * per word(!) * paragraph alignment * positioning * font names * font size * font style (italic, underline, bold) * text color, outline color Other Filter Changes ==================== * all: Make sure to forward all link properties (time base, frame rate, w, h) where appropriate * overlaytextsubs: request frames on the subtitle input * overlaytextsubs: disable read-order checking * overlaytextsubs: improve implementation of render_latest_only * overlaytextsubs: ensure equal in/out video formats * splitcc: derive framerate from realtime_latency * graphicsub2video: implement caching of converted frames * graphicsub2video: use 1x1 output frame size as long as subtitle size is unknown (0x0) Plus a dozen of things I forgot.. softworkz (26): avcodec,avutil: Move enum AVSubtitleType to avutil, add new and deprecate old values avutil/frame: Prepare AVFrame for subtitle handling avcodec/subtitles: Introduce new frame-based subtitle decoding API avfilter/subtitles: Update vf_subtitles to use new decoding api avcodec,avutil: Move ass helper functions to avutil as avpriv_ and extend ass dialog parsing avcodec/subtitles: Replace deprecated enum values fftools/play,probe: Adjust for subtitle changes avfilter/subtitles: Add subtitles.c for subtitle frame allocation avfilter/avfilter: Handle subtitle frames avfilter/avfilter: Fix hardcoded input index avfilter/sbuffer: Add sbuffersrc and sbuffersink filters avfilter/overlaygraphicsubs: Add overlaygraphicsubs and graphicsub2video filters avfilter/overlaytextsubs: Add overlaytextsubs and textsubs2video filters avfilter/textmod: Add textmod, censor and show_speaker filters avfilter/stripstyles: Add stripstyles filter avfilter/splitcc: Add splitcc filter for closed caption handling avfilter/graphicsub2text: Add new graphicsub2text filter (OCR) avfilter/subscale: Add filter for scaling and/or re-arranging graphical subtitles avfilter/subfeed: add subtitle feed filter avcodec/subtitles: Migrate subtitle encoders to frame-based API fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding avutil/ass_split: Add parsing of hard-space tags (\h) avcodec/webvttenc: convert hard-space tags to   doc/APIchanges: update for subtitle filtering changes avcodec/webvttenc: Don't encode drawing codes and empty lines avcodec/dvbsubdec: Fix conditions for fallback to default resolution configure | 7 +- doc/APIchanges | 24 + doc/filters.texi | 756 ++++++++++ fftools/ffmpeg.c | 501 +++---- fftools/ffmpeg.h | 13 +- fftools/ffmpeg_filter.c | 235 +++- fftools/ffmpeg_hw.c | 2 +- fftools/ffmpeg_opt.c | 3 +- fftools/ffplay.c | 102 +- fftools/ffprobe.c | 47 +- libavcodec/Makefile | 56 +- libavcodec/ass.h | 144 +- libavcodec/assdec.c | 4 +- libavcodec/assenc.c | 191 ++- libavcodec/avcodec.h | 32 +- libavcodec/ccaption_dec.c | 19 +- libavcodec/codec_desc.c | 11 + libavcodec/codec_desc.h | 8 + libavcodec/decode.c | 60 +- libavcodec/dvbsubdec.c | 53 +- libavcodec/dvbsubenc.c | 96 +- libavcodec/dvdsubdec.c | 2 +- libavcodec/dvdsubenc.c | 102 +- libavcodec/encode.c | 61 +- libavcodec/internal.h | 16 + libavcodec/jacosubdec.c | 2 +- libavcodec/libaribb24.c | 2 +- libavcodec/libzvbi-teletextdec.c | 14 +- libavcodec/microdvddec.c | 7 +- libavcodec/movtextdec.c | 3 +- libavcodec/movtextenc.c | 126 +- libavcodec/mpl2dec.c | 2 +- libavcodec/pgssubdec.c | 2 +- libavcodec/realtextdec.c | 2 +- libavcodec/samidec.c | 2 +- libavcodec/srtdec.c | 2 +- libavcodec/srtenc.c | 116 +- libavcodec/subviewerdec.c | 2 +- libavcodec/tests/avcodec.c | 2 - libavcodec/textdec.c | 4 +- libavcodec/ttmlenc.c | 114 +- libavcodec/utils.c | 184 +++ libavcodec/version.h | 2 +- libavcodec/webvttdec.c | 2 +- libavcodec/webvttenc.c | 127 +- libavcodec/xsubdec.c | 2 +- libavcodec/xsubenc.c | 88 +- libavfilter/Makefile | 16 + libavfilter/allfilters.c | 16 +- libavfilter/avfilter.c | 30 +- libavfilter/avfilter.h | 11 + libavfilter/avfiltergraph.c | 5 + libavfilter/buffersink.c | 54 + libavfilter/buffersink.h | 7 + libavfilter/buffersrc.c | 72 + libavfilter/buffersrc.h | 1 + libavfilter/formats.c | 22 + libavfilter/formats.h | 3 + libavfilter/internal.h | 19 +- libavfilter/sf_graphicsub2text.c | 1132 +++++++++++++++ libavfilter/sf_splitcc.c | 395 ++++++ libavfilter/sf_stripstyles.c | 211 +++ libavfilter/sf_subfeed.c | 366 +++++ libavfilter/sf_subscale.c | 884 ++++++++++++ libavfilter/sf_textmod.c | 710 ++++++++++ libavfilter/subtitles.c | 63 + libavfilter/subtitles.h | 44 + libavfilter/vf_overlaygraphicsubs.c | 765 ++++++++++ libavfilter/vf_overlaytextsubs.c | 678 +++++++++ libavfilter/vf_subtitles.c | 56 +- libavutil/Makefile | 4 + {libavcodec => libavutil}/ass.c | 91 +- libavutil/ass_internal.h | 135 ++ {libavcodec => libavutil}/ass_split.c | 37 +- .../ass_split_internal.h | 32 +- libavutil/frame.c | 211 ++- libavutil/frame.h | 85 +- libavutil/subfmt.c | 45 + libavutil/subfmt.h | 115 ++ libavutil/version.h | 3 +- tests/ref/fate/.gitattributes | 3 + tests/ref/fate/filter-overlay-dvdsub-2397 | 182 +-- tests/ref/fate/mov-mp4-ttml-dfxp | 8 +- tests/ref/fate/mov-mp4-ttml-stpp | 8 +- tests/ref/fate/sub-dvb | 162 ++- tests/ref/fate/sub-textenc | 10 +- tests/ref/fate/sub-ttmlenc | 8 +- tests/ref/fate/sub-webvttenc | 10 +- tests/ref/fate/sub2video | 1091 ++++++++++++++- tests/ref/fate/sub2video_basic | 1239 +++++++++++++++-- tests/ref/fate/sub2video_time_limited | 78 +- 91 files changed, 11077 insertions(+), 1392 deletions(-) create mode 100644 libavfilter/sf_graphicsub2text.c create mode 100644 libavfilter/sf_splitcc.c create mode 100644 libavfilter/sf_stripstyles.c create mode 100644 libavfilter/sf_subfeed.c create mode 100644 libavfilter/sf_subscale.c create mode 100644 libavfilter/sf_textmod.c create mode 100644 libavfilter/subtitles.c create mode 100644 libavfilter/subtitles.h create mode 100644 libavfilter/vf_overlaygraphicsubs.c create mode 100644 libavfilter/vf_overlaytextsubs.c rename {libavcodec => libavutil}/ass.c (65%) create mode 100644 libavutil/ass_internal.h rename {libavcodec => libavutil}/ass_split.c (93%) rename libavcodec/ass_split.h => libavutil/ass_split_internal.h (86%) create mode 100644 libavutil/subfmt.c create mode 100644 libavutil/subfmt.h create mode 100644 tests/ref/fate/.gitattributes base-commit: dd17c86aa11feae2b86de054dd0679cc5f88ebab Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-18%2Fsoftworkz%2Fsubmit_subfiltering-v3 Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-18/softworkz/submit_subfiltering-v3 Pull-Request: https://github.com/ffstaging/FFmpeg/pull/18 Range-diff vs v2: 1: 13b9a26b25 = 1: 7767933235 avcodec,avutil: Move enum AVSubtitleType to avutil, add new and deprecate old values 2: 54ed1290d2 = 2: e922f141ba avutil/frame: Prepare AVFrame for subtitle handling 3: 840683a6e1 = 3: ec262914b0 avcodec/subtitles: Introduce new frame-based subtitle decoding API 4: e326e96492 = 4: 77bd67ee37 avfilter/subtitles: Update vf_subtitles to use new decoding api 5: 20dc27a6c6 = 5: 26bad0c088 avcodec,avutil: Move ass helper functions to avutil as avpriv_ and extend ass dialog parsing 6: 3de0be7980 = 6: c6fb78e038 avcodec/subtitles: Replace deprecated enum values 7: 05e3f2a6fe = 7: 3d8673919f fftools/play,probe: Adjust for subtitle changes 8: a86457f868 = 8: ba8b675326 avfilter/subtitles: Add subtitles.c for subtitle frame allocation 9: 9fec875c51 = 9: eb09db0e00 avfilter/avfilter: Handle subtitle frames 10: 50bf6c36be = 10: b31a991320 avfilter/avfilter: Fix hardcoded input index 11: d1ef5004aa = 11: 59abea7693 avfilter/sbuffer: Add sbuffersrc and sbuffersink filters 12: f4af184a7b ! 12: 867b60c60d avfilter/overlaygraphicsubs: Add overlaygraphicsubs and graphicsub2video filters @@ libavfilter/Makefile: OBJS-$(CONFIG_GBLUR_FILTER) += vf_gblur.o OBJS-$(CONFIG_GRAYWORLD_FILTER) += vf_grayworld.o OBJS-$(CONFIG_GREYEDGE_FILTER) += vf_colorconstancy.o @@ libavfilter/Makefile: OBJS-$(CONFIG_OVERLAY_OPENCL_FILTER) += vf_overlay_opencl.o opencl.o \ - opencl/overlay.o framesync.o OBJS-$(CONFIG_OVERLAY_QSV_FILTER) += vf_overlay_qsv.o framesync.o + OBJS-$(CONFIG_OVERLAY_VAAPI_FILTER) += vf_overlay_vaapi.o framesync.o vaapi_vpp.o OBJS-$(CONFIG_OVERLAY_VULKAN_FILTER) += vf_overlay_vulkan.o vulkan.o vulkan_filter.o +OBJS-$(CONFIG_OVERLAYGRAPHICSUBS_FILTER) += vf_overlaygraphicsubs.o framesync.o OBJS-$(CONFIG_OWDENOISE_FILTER) += vf_owdenoise.o @@ libavfilter/allfilters.c: extern const AVFilter ff_vf_oscilloscope; extern const AVFilter ff_vf_overlay_opencl; extern const AVFilter ff_vf_overlay_qsv; +extern const AVFilter ff_vf_overlaygraphicsubs; + extern const AVFilter ff_vf_overlay_vaapi; extern const AVFilter ff_vf_overlay_vulkan; extern const AVFilter ff_vf_overlay_cuda; - extern const AVFilter ff_vf_owdenoise; @@ libavfilter/allfilters.c: extern const AVFilter ff_avf_showvolume; extern const AVFilter ff_avf_showwaves; extern const AVFilter ff_avf_showwavespic; 13: 47b045ad74 ! 13: f88a5667e1 avfilter/overlaytextsubs: Add overlaytextsubs and textsubs2video filters @@ Commit message Signed-off-by: softworkz ## configure ## -@@ configure: overlay_opencl_filter_deps="opencl" - overlay_qsv_filter_deps="libmfx" +@@ configure: overlay_qsv_filter_deps="libmfx" overlay_qsv_filter_select="qsvvpp" + overlay_vaapi_filter_deps="vaapi VAProcPipelineCaps_blend_flags" overlay_vulkan_filter_deps="vulkan spirv_compiler" +overlaytextsubs_filter_deps="avcodec libass" owdenoise_filter_deps="gpl" @@ doc/filters.texi: Overlay PGS subtitles @chapter Multimedia Filters ## libavfilter/Makefile ## -@@ libavfilter/Makefile: OBJS-$(CONFIG_OVERLAY_OPENCL_FILTER) += vf_overlay_opencl.o opencl.o \ - OBJS-$(CONFIG_OVERLAY_QSV_FILTER) += vf_overlay_qsv.o framesync.o +@@ libavfilter/Makefile: OBJS-$(CONFIG_OVERLAY_QSV_FILTER) += vf_overlay_qsv.o framesync.o + OBJS-$(CONFIG_OVERLAY_VAAPI_FILTER) += vf_overlay_vaapi.o framesync.o vaapi_vpp.o OBJS-$(CONFIG_OVERLAY_VULKAN_FILTER) += vf_overlay_vulkan.o vulkan.o vulkan_filter.o OBJS-$(CONFIG_OVERLAYGRAPHICSUBS_FILTER) += vf_overlaygraphicsubs.o framesync.o +OBJS-$(CONFIG_OVERLAYTEXTSUBS_FILTER) += vf_overlaytextsubs.o @@ libavfilter/allfilters.c: extern const AVFilter ff_vf_oscilloscope; extern const AVFilter ff_vf_overlay_opencl; extern const AVFilter ff_vf_overlay_qsv; -extern const AVFilter ff_vf_overlaygraphicsubs; +-extern const AVFilter ff_vf_overlay_vaapi; extern const AVFilter ff_vf_overlay_vulkan; extern const AVFilter ff_vf_overlay_cuda; +extern const AVFilter ff_vf_overlaygraphicsubs; +extern const AVFilter ff_vf_overlaytextsubs; ++extern const AVFilter ff_vf_overlay_vaapi; extern const AVFilter ff_vf_owdenoise; extern const AVFilter ff_vf_pad; extern const AVFilter ff_vf_pad_opencl; 14: 6f200be0c3 = 14: 25cda21970 avfilter/textmod: Add textmod, censor and show_speaker filters 15: ab8736ac43 = 15: 296f1f697b avfilter/stripstyles: Add stripstyles filter 16: 5369aca080 = 16: 509d6c67ba avfilter/splitcc: Add splitcc filter for closed caption handling 17: 43a20d1024 = 17: 1d7acba39f avfilter/graphicsub2text: Add new graphicsub2text filter (OCR) 18: 0d3c46a68f = 18: 244dd6de33 avfilter/subscale: Add filter for scaling and/or re-arranging graphical subtitles 19: 2c20886389 = 19: a87812bd3c avfilter/subfeed: add subtitle feed filter 20: 64ce976c19 = 20: aea8acb057 avcodec/subtitles: Migrate subtitle encoders to frame-based API 21: 56a162b3a4 = 21: 314d1da505 fftools/ffmpeg: Introduce subtitle filtering and new frame-based subtitle encoding 22: 1a0c6e01f3 = 22: d3cdd2a0e2 avutil/ass_split: Add parsing of hard-space tags (\h) 23: 44b4e203d8 = 23: 5fca566749 avcodec/webvttenc: convert hard-space tags to   24: 5773f2a1ff = 24: 93b469b8d0 doc/APIchanges: update for subtitle filtering changes 25: 7ab6dedf80 = 25: 0c279550d6 avcodec/webvttenc: Don't encode drawing codes and empty lines 26: 217d96c39d = 26: 03e1a98e08 avcodec/dvbsubdec: Fix conditions for fallback to default resolution