[FFmpeg-devel,v5,0/4] Initial implementation of TTML encoding/muxing

Message ID 20210222131914.21335-1-jeebjp@gmail.com
Headers show


Jan Ekström Feb. 22, 2021, 1:19 p.m. UTC
I've intentionally kept this initial version simple (no styling etc) to focus
on the basics. As this goes through review, additional features can be added
(I had initial PoC for styling implemented some time around previous VDD), and
there is another patch set in my queue which would then add support for muxing
TTML into MP4.

Changes from the fourth version:
  - Switched from separate escaping modes back to a single AV_ESCAPE_MODE_XML,
    with additional flags for single and double quote escaping for attributes
    (Anton noted that the AV_ESCAPE_FLAG_XML prefix makes it all long enough,
    so ATTR was left away from these).
  - Added the libavutil minor bump, which was forgotten so far.
  - ff_ass_split_override_codes calls are now checked for errors and a warning
    or error is logged depending on whether it was an invalid input error,
    and if AV_EF_EXPLODE was set. In case of invalid input and AV_EF_EXPLODE,
    a malformed ASS dialog will cause the encoder to fail. By default it will
    not, which matches the current behavior of all other subtitle encoders,
    which do not test the return value of ff_ass_split_override_codes at all,
    and thus just skip malformed parts of an ASS dialog.

    Thank you to Anton for giving the idea of the AV_EF_EXPLODE usage.
  - Documented that AV_EF_EXPLODE is now usable for subtitle encoders.
  - FF_CODEC_CAP_INIT_CLEANUP was added to ttmlenc, simplifying clean-up.
  - The extradata added by ttmlenc was made more specific, and a shared header
    containing the value and its length was added to reduce duplication.
  - A case which would be only due to internal error was made to return
    AVERROR_BUG and the relevant log line was made to note that this is an
    internal error.
  - Missing includes for "libavutil/internal.h" were added.


Jan Ekström (3):
  ffprobe: switch to av_bprint_escape for XML escaping
  avcodec: enable usage of AV_EF_EXPLODE for subtitle encoders
  {avcodec,avformat}: add TTML encoder and muxer

Stefano Sabatini (1):
  avutil/{avstring,bprint}: add XML escaping from ffprobe to avutil

 Changelog                  |   1 +
 doc/general_contents.texi  |   1 +
 fftools/ffprobe.c          |  32 ++----
 libavcodec/Makefile        |   1 +
 libavcodec/allcodecs.c     |   1 +
 libavcodec/avcodec.h       |   5 +-
 libavcodec/options_table.h |   4 +-
 libavcodec/ttmlenc.c       | 210 +++++++++++++++++++++++++++++++++++++
 libavcodec/ttmlenc.h       |  28 +++++
 libavcodec/version.h       |   2 +-
 libavformat/Makefile       |   1 +
 libavformat/allformats.c   |   1 +
 libavformat/ttmlenc.c      | 174 ++++++++++++++++++++++++++++++
 libavutil/avstring.h       |  14 +++
 libavutil/bprint.c         |  29 +++++
 libavutil/version.h        |   2 +-
 tests/fate/subtitles.mak   |   3 +
 tests/ref/fate/ffprobe_xml |   2 +-
 tests/ref/fate/sub-ttmlenc | 122 +++++++++++++++++++++
 tools/ffescape.c           |   7 +-
 20 files changed, 611 insertions(+), 29 deletions(-)
 create mode 100644 libavcodec/ttmlenc.c
 create mode 100644 libavcodec/ttmlenc.h
 create mode 100644 libavformat/ttmlenc.c
 create mode 100644 tests/ref/fate/sub-ttmlenc