diff mbox series

[FFmpeg-devel,v4,2/3] lavc/libaribcaption.c: add MSZ characters related options

Message ID 20231017131335.201277-3-aimingoff@pc.nifty.jp
State New
Headers show
Series lavc/libaribcaption.c: add MSZ characters related options | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

TADANO Tokumei Oct. 17, 2023, 1:13 p.m. UTC
This patch add MSZ (Middle Size; half width) characters related
options.

* add `-replace_msz_japanese` option introduced in version 1.0.1
  of libaribcaption.
* add `-replace_msz_glyph` option introduced in version 1.1.0
  of libaribcaption.

If specified fonts contain half-width glyphs (e.g., BIZ UDGothic),
it make better rendering with `-replace_msz_ascii false` and
`-replace_msz_japanese false` option for bitmap sub_type.

Signed-off-by: TADANO Tokumei <aimingoff@pc.nifty.jp>
---
 configure                   |  2 +-
 doc/decoders.texi           | 16 ++++++++++++++++
 libavcodec/libaribcaption.c | 10 ++++++++++
 3 files changed, 27 insertions(+), 1 deletion(-)

Comments

Jan Ekström Oct. 29, 2023, 8:51 a.m. UTC | #1
On Tue, Oct 17, 2023 at 4:14 PM TADANO Tokumei <aimingoff@pc.nifty.jp> wrote:
>
> This patch add MSZ (Middle Size; half width) characters related
> options.
>
> * add `-replace_msz_japanese` option introduced in version 1.0.1
>   of libaribcaption.
> * add `-replace_msz_glyph` option introduced in version 1.1.0
>   of libaribcaption.
>
> If specified fonts contain half-width glyphs (e.g., BIZ UDGothic),
> it make better rendering with `-replace_msz_ascii false` and
> `-replace_msz_japanese false` option for bitmap sub_type.
>
> Signed-off-by: TADANO Tokumei <aimingoff@pc.nifty.jp>

Change-wise LGTM. I reworked the commit message (starting with the
removal of ".c" at the end), and hopefully I understood correctly what
you were trying to mean with what I expect you were meaning with
regards to the latter option. The adjusted commits are visible in
https://github.com/jeeb/ffmpeg/commits/aribcaption_msz_patches_v3 .

Otherwise the only thing I adjusted was

diff --git a/libavcodec/libaribcaption.c b/libavcodec/libaribcaption.c
index 2a058a4992..e87f303aa8 100644
--- a/libavcodec/libaribcaption.c
+++ b/libavcodec/libaribcaption.c
@@ -1008,7 +1008,7 @@ static int aribcaption_init(AVCodecContext *avctx)
     aribcc_decoder_set_replace_msz_fullwidth_ascii(ctx->decoder,
                                                    ctx->replace_msz_ascii);
     aribcc_decoder_set_replace_msz_fullwidth_japanese(ctx->decoder,
-                                                   ctx->replace_msz_japanese);
+
ctx->replace_msz_japanese);

     /* Similar behavior as ffmpeg tool to set canvas size */
     if (ctx->canvas_width > 0 && ctx->canvas_height > 0 &&

as there was a mismatching offset. If this is fine by you, I'll pull this in.

Jan
Jan Ekström Oct. 29, 2023, 4:23 p.m. UTC | #2
On Sun, Oct 29, 2023 at 10:51 AM Jan Ekström <jeebjp@gmail.com> wrote:
>
> On Tue, Oct 17, 2023 at 4:14 PM TADANO Tokumei <aimingoff@pc.nifty.jp> wrote:
> >
> > This patch add MSZ (Middle Size; half width) characters related
> > options.
> >
> > * add `-replace_msz_japanese` option introduced in version 1.0.1
> >   of libaribcaption.
> > * add `-replace_msz_glyph` option introduced in version 1.1.0
> >   of libaribcaption.
> >
> > If specified fonts contain half-width glyphs (e.g., BIZ UDGothic),
> > it make better rendering with `-replace_msz_ascii false` and
> > `-replace_msz_japanese false` option for bitmap sub_type.
> >
> > Signed-off-by: TADANO Tokumei <aimingoff@pc.nifty.jp>
>
> Change-wise LGTM. I reworked the commit message (starting with the
> removal of ".c" at the end), and hopefully I understood correctly what
> you were trying to mean with what I expect you were meaning with
> regards to the latter option. The adjusted commits are visible in
> https://github.com/jeeb/ffmpeg/commits/aribcaption_msz_patches_v3 .
>
> Otherwise the only thing I adjusted was
>
> diff --git a/libavcodec/libaribcaption.c b/libavcodec/libaribcaption.c
> index 2a058a4992..e87f303aa8 100644
> --- a/libavcodec/libaribcaption.c
> +++ b/libavcodec/libaribcaption.c
> @@ -1008,7 +1008,7 @@ static int aribcaption_init(AVCodecContext *avctx)
>      aribcc_decoder_set_replace_msz_fullwidth_ascii(ctx->decoder,
>                                                     ctx->replace_msz_ascii);
>      aribcc_decoder_set_replace_msz_fullwidth_japanese(ctx->decoder,
> -                                                   ctx->replace_msz_japanese);
> +
> ctx->replace_msz_japanese);
>
>      /* Similar behavior as ffmpeg tool to set canvas size */
>      if (ctx->canvas_width > 0 && ctx->canvas_height > 0 &&
>
> as there was a mismatching offset. If this is fine by you, I'll pull this in.

Received an OK from the author regarding the commit message
adjustments and such privately, so will be merging this in.
diff mbox series

Patch

diff --git a/configure b/configure
index d203177a74..2fb827e1fb 100755
--- a/configure
+++ b/configure
@@ -6679,7 +6679,7 @@  enabled libaom            && require_pkg_config libaom "aom >= 1.0.0" aom/aom_co
 enabled libaribb24        && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new ||
                                { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } ||
                                die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; }
-enabled libaribcaption    && require_pkg_config libaribcaption "libaribcaption >= 0.1.0" "aribcaption/aribcaption.h" aribcc_context_alloc
+enabled libaribcaption    && require_pkg_config libaribcaption "libaribcaption >= 1.1.1" "aribcaption/aribcaption.h" aribcc_context_alloc
 enabled lv2               && require_pkg_config lv2 lilv-0 "lilv/lilv.h" lilv_world_new
 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
 enabled libass            && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init
diff --git a/doc/decoders.texi b/doc/decoders.texi
index 09b8314dd2..36c3404475 100644
--- a/doc/decoders.texi
+++ b/doc/decoders.texi
@@ -459,6 +459,22 @@  Specify whether to render replaced DRCS characters as Unicode characters.
 
 The default is @var{true}.
 
+@item -replace_msz_japanese @var{boolean}
+Specify whether to replace some MSZ (Middle Size; half width) fullwidth
+japanese special characters with halfwidth ones.
+
+The default is @var{true}.
+
+@item -replace_msz_glyph @var{boolean}
+Specify whether to replace MSZ (Middle Size; half width) characters
+with halfwidth glyphs if the fonts supports it.
+This option works under FreeType or DirectWrite renderer
+with Adobe-Japan1 compliant fonts.
+e.g., IBM Plex Sans JP, Morisawa BIZ UDGothic, Morisawa BIZ UDMincho,
+Yu Gothic, Yu Mincho, and Meiryo.
+
+The default is @var{true}.
+
 @item -canvas_size @var{image_size}
 Specify the resolution of the canvas to render subtitles to; usually, this
 should be frame size of input video.
diff --git a/libavcodec/libaribcaption.c b/libavcodec/libaribcaption.c
index be3328c5c9..74822586dc 100644
--- a/libavcodec/libaribcaption.c
+++ b/libavcodec/libaribcaption.c
@@ -76,6 +76,8 @@  typedef struct ARIBCaptionContext {
     int ignore_ruby;
     float stroke_width;
     int replace_drcs;
+    int replace_msz_japanese;
+    int replace_msz_glyph;
 
     int64_t pts;
     AVRational time_base;
@@ -1005,6 +1007,8 @@  static int aribcaption_init(AVCodecContext *avctx)
     }
     aribcc_decoder_set_replace_msz_fullwidth_ascii(ctx->decoder,
                                                    ctx->replace_fullwidth_ascii);
+    aribcc_decoder_set_replace_msz_fullwidth_japanese(ctx->decoder,
+                                                   ctx->replace_msz_japanese);
 
     /* Similar behavior as ffmpeg tool to set canvas size */
     if (ctx->canvas_width > 0 && ctx->canvas_height > 0 &&
@@ -1057,6 +1061,8 @@  static int aribcaption_init(AVCodecContext *avctx)
         aribcc_renderer_set_force_no_background(ctx->renderer, ctx->ignore_background);
         aribcc_renderer_set_force_no_ruby(ctx->renderer, ctx->ignore_ruby);
         aribcc_renderer_set_stroke_width(ctx->renderer, ctx->stroke_width);
+        aribcc_renderer_set_replace_msz_halfwidth_glyph(ctx->renderer,
+                                                        ctx->replace_msz_glyph);
         if (ctx->font) {
             int is_nomem = 0;
             size_t count = 0;
@@ -1144,6 +1150,10 @@  static const AVOption options[] = {
       OFFSET(stroke_width), AV_OPT_TYPE_FLOAT, { .dbl = 1.5 }, 0.0, 3.0, SD },
     { "replace_drcs", "replace known DRCS [bitmap]",
       OFFSET(replace_drcs), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, SD },
+    { "replace_msz_japanese", "replace MSZ fullwidth Japanese with halfwidth [ass, bitmap]",
+      OFFSET(replace_msz_japanese), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, SD },
+    { "replace_msz_glyph", "replace MSZ characters with halfwidth glyphs [bitmap]",
+      OFFSET(replace_msz_glyph), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, SD },
     {"canvas_size", "set input video size (WxH or abbreviation) [bitmap]",
       OFFSET(canvas_width), AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, INT_MAX, SD },
     { NULL }