[FFmpeg-devel] Setting default G0 character set for teletext decoder
Some providers don't send info about character set, so default (latin) is used when decoding. I added option to force desired language with function vbi_teletext_set_default_region. You can see what character set code maps to what language in Table 32 ETS 300 706, Section 15. >From 1c5c903d893c74025f2e8f62050755eb11b74be8 Mon Sep 17 00:00:00 2001 From: Kirill Savkov Date: Tue, 18 Feb 2020 16:53:34 +0300 Subject: [PATCH] libavcodec/libzvbi-teletextdec.c: added option to set default G0 character set for decoding Signed-off-by: Kirill Savkov --- libavcodec/libzvbi-teletextdec.c | 30 ++ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index 3515f33924..b243c69293 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -55,6 +55,7 @@ typedef struct TeletextContext { AVClass*class; char *pgno; +int default_region; int x_offset; int y_offset; int format_id; /* 0 = bitmap, 1 = text/ass, 2 = ass */ @@ -645,6 +646,10 @@ static int teletext_decode_frame(AVCodecContext *avctx, void *data, int *data_si if (!ctx->vbi) { if (!(ctx->vbi = vbi_decoder_new())) return AVERROR(ENOMEM); +if (ctx->default_region != -1) { +av_log(avctx, AV_LOG_INFO, "Setting default zvbi region to %i\n", ctx->default_region); +vbi_teletext_set_default_region(ctx->vbi, ctx->default_region); +} if (!vbi_event_handler_register(ctx->vbi, VBI_EVENT_TTX_PAGE, handler, ctx)) { vbi_decoder_delete(ctx->vbi); ctx->vbi = NULL; @@ -791,18 +796,19 @@ static void teletext_flush(AVCodecContext *avctx) #define OFFSET(x) offsetof(TeletextContext, x) #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { -{"txt_page","page numbers to decode, subtitle for subtitles, * for all", OFFSET(pgno), AV_OPT_TYPE_STRING, {.str = "*"}, 0, 0,SD}, -{"txt_chop_top","discards the top teletext line",OFFSET(chop_top), AV_OPT_TYPE_INT,{.i64 = 1},0, 1,SD}, -{"txt_format", "format of the subtitles (bitmap or text or ass)", OFFSET(format_id), AV_OPT_TYPE_INT,{.i64 = 0},0, 2,SD, "txt_format"}, -{"bitmap", NULL,0, AV_OPT_TYPE_CONST, {.i64 = 0},0, 0,SD, "txt_format"}, -{"text",NULL,0, AV_OPT_TYPE_CONST, {.i64 = 1},0, 0,SD, "txt_format"}, -{"ass", NULL,0, AV_OPT_TYPE_CONST, {.i64 = 2},0, 0,SD, "txt_format"}, -{"txt_left","x offset of generated bitmaps", OFFSET(x_offset), AV_OPT_TYPE_INT,{.i64 = 0},0, 65535,SD}, -{"txt_top", "y offset of generated bitmaps", OFFSET(y_offset), AV_OPT_TYPE_INT,{.i64 = 0},0, 65535,SD}, -{"txt_chop_spaces", "chops leading and trailing spaces from text", OFFSET(chop_spaces),AV_OPT_TYPE_INT,{.i64 = 1},0, 1,SD}, -{"txt_duration","display duration of teletext pages in msecs", OFFSET(sub_duration), AV_OPT_TYPE_INT,{.i64 = -1}, -1, 8640, SD}, -{"txt_transparent", "force transparent background of the teletext", OFFSET(transparent_bg), AV_OPT_TYPE_INT,{.i64 = 0},0, 1,SD}, -{"txt_opacity", "set opacity of the transparent background", OFFSET(opacity),AV_OPT_TYPE_INT,{.i64 = -1}, -1, 255, SD}, +{"txt_page", "page numbers to decode, subtitle for subtitles, * for all", OFFSET(pgno), AV_OPT_TYPE_STRING, {.str = "*"}, 0, 0,SD}, +{"txt_default_region", "default G0 character set used for decoding",OFFSET(default_region), AV_OPT_TYPE_INT,{.i64 = -1}, -1, 80, SD}, +{"txt_chop_top", "discards the top teletext line",OFFSET(chop_top), AV_OPT_TYPE_INT,{.i64 = 1},0, 1,SD}, +{"txt_format", "format of the subtitles (bitmap or text or ass)", OFFSET(format_id), AV_OPT_TYPE_INT,{.i64 = 0},0, 2,SD, "txt_format"}, +{"bitmap", NULL,0, AV_OPT_TYPE_CONST, {.i64 = 0},0, 0,SD, "txt_format"}, +{"text", NULL,0, AV_OPT_TYPE_CONST, {.i64 = 1},0, 0,SD, "txt_format"}, +{"ass",NULL,
Re: [FFmpeg-devel] Setting default G0 character set for teletext decoder
I can also provide sample files, for which this option is needed, where can I upload them? On 18.02.2020 23:48, Marton Balint wrote: On Tue, 18 Feb 2020, k.savkov wrote: Some providers don't send info about character set, so default (latin) is used when decoding. I added option to force desired language with function vbi_teletext_set_default_region. You can see what character set code maps to what language in Table 32 ETS 300 706, Section 15. docs/decoders.texi update is missing. Regards, Marton ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". >From 7097df262b780978fc0a5c94ac52a93031e32cc6 Mon Sep 17 00:00:00 2001 From: Kirill Savkov Date: Wed, 19 Feb 2020 09:44:00 +0300 Subject: [PATCH] libavcodec/libzvbi-teletext-dec.c: added option to set default G0 character set Signed-off-by: Kirill Savkov --- doc/decoders.texi| 4 libavcodec/libzvbi-teletextdec.c | 6 ++ 2 files changed, 10 insertions(+) diff --git a/doc/decoders.texi b/doc/decoders.texi index 9094c55e24..96931c72f9 100644 --- a/doc/decoders.texi +++ b/doc/decoders.texi @@ -316,6 +316,10 @@ List of teletext page numbers to decode. Pages that do not match the specified list are dropped. You may use the special @code{*} string to match all pages, or @code{subtitle} to match all subtitle pages. Default value is *. +@item txt_default_region +Set default G0 character set used for decoding, a value between 0 and 80 +(ETS 300 706, Section 15, Table 32). +Default value is -1, don't override VBI's decoder default. @item txt_chop_top Discards the top teletext line. Default value is 1. @item txt_format diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index 3515f33924..fe6504ff8a 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -55,6 +55,7 @@ typedef struct TeletextContext { AVClass*class; char *pgno; +int default_region; int x_offset; int y_offset; int format_id; /* 0 = bitmap, 1 = text/ass, 2 = ass */ @@ -645,6 +646,10 @@ static int teletext_decode_frame(AVCodecContext *avctx, void *data, int *data_si if (!ctx->vbi) { if (!(ctx->vbi = vbi_decoder_new())) return AVERROR(ENOMEM); +if (ctx->default_region != -1) { +av_log(avctx, AV_LOG_INFO, "Setting default zvbi region to %i\n", ctx->default_region); +vbi_teletext_set_default_region(ctx->vbi, ctx->default_region); +} if (!vbi_event_handler_register(ctx->vbi, VBI_EVENT_TTX_PAGE, handler, ctx)) { vbi_decoder_delete(ctx->vbi); ctx->vbi = NULL; @@ -792,6 +797,7 @@ static void teletext_flush(AVCodecContext *avctx) #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { {"txt_page","page numbers to decode, subtitle for subtitles, * for all", OFFSET(pgno), AV_OPT_TYPE_STRING, {.str = "*"}, 0, 0,SD}, +{"txt_default_region", "default G0 character set used for decoding", OFFSET(default_region), AV_OPT_TYPE_INT,{.i64 = -1}, -1, 80, SD}, {"txt_chop_top","discards the top teletext line",OFFSET(chop_top), AV_OPT_TYPE_INT,{.i64 = 1},0, 1,SD}, {"txt_format", "format of the subtitles (bitmap or text or ass)", OFFSET(format_id), AV_OPT_TYPE_INT,{.i64 = 0},0, 2,SD, "txt_format"}, {"bitmap", NULL,0, AV_OPT_TYPE_CONST, {.i64 = 0},0, 0,SD, "txt_format"}, -- 2.25.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".