From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id F34AB4DCF4
	for <ffmpegdev@gitmailbox.com>; Sun,  2 Mar 2025 20:38:59 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A3FC768E3ED;
	Sun,  2 Mar 2025 22:38:54 +0200 (EET)
Received: from NAM12-BN8-obe.outbound.protection.outlook.com
 (mail-bn8nam12olkn2018.outbound.protection.outlook.com [40.92.21.18])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1788C68E1E3
 for <ffmpeg-devel@ffmpeg.org>; Sun,  2 Mar 2025 22:38:48 +0200 (EET)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=C9M5fHtQsPOBlQGidVlg9S8M+KhKtBLaEMcxnFhxWRN9YJiTTF3pVEwB3I4NCWxHUrSaCqNO5SAv9jrXiAM03INZ/fybjzhow3+iAQkbYR4Cn6R4cOmu5Yb1qvcU+7IGjTQfACSWv4uE9+JZj9FMa0vdmsvYsWWmEM6FVe+GFM4deyfMzpZ/a7qM9ifHOFxRSMaZOHFD35yX844OjLp1bdyoUDP2mau7fKdWbNNv8HO6Y+SSnWPR7Li5M6/W1WYHQByelgdj3tLYLVN7ph3vAs18fNhgJPrVN/VafFqkCDf6ymaEH3yCJ3oRaQIWuFLOhDJC8Yr0df0f01JP1qz97A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=2Jx7oHwEKeaUaCiDYuXF7BGHOsMqlu2p71fbFkeM30A=;
 b=Z3grbpoGUUSE9iHQg/+wXlT3brOvjBS1ZKmqTtgQLcvu7b+Nbdns659XcPNU2Bk9zkDSGRpWO+zUL7frn2ECnAaJiVFWPLyHPoeCtSZbbvHaJ1iJPMZ/snXrjk6OuwU1CuWlUc5m05TWXN677dTameSu8+Lr4c3Uptb+K1pF1oEUddKvZ2E5nc1hy6ZOJfx/fUFpRVOB7XzVYxzHpL+mjT2CbStN9Pn6lURct1ItMEsMZCC0zi04heq1SYLv+1yyzVTDeHL1GEI4dYFb+GF4yE3SBnYHEH0xYgCSEfCoFnpXJYeSYTrTxQ6Csch/k9srOFgEt+/LPVqMqv+XjJWMRQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none;
 dkim=none; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2Jx7oHwEKeaUaCiDYuXF7BGHOsMqlu2p71fbFkeM30A=;
 b=RVjyM89TcyGyw2DmBttJAmFy4mTqm/XGAtZuOblWPRSJqPu3Cc1m+bH1mfQ3BBzs9Y0ImnyB0H+tCZySHJKEHfU6cWmXCryLwWHr9nDxcBcKrUmp6FR4+RzNV108necOaBZAGdDLgzK4L9KplWY0OBmC/MsRNXyaFKnDSgBoKJAZBu1mHQIPY7v8S8TcpZXpS1/vPuYKKy4Vo84n6UFoX0AFBW8JwCRr8JVcZBYNE6qGbQclgpMZ8diIup5Ln7kXfTzdTuX7+X1N9bZxsFuUcS7B7DrkL4PBPSf++Rj0jgPEQ78t7VERXR1UwCas1o1zqZVXxRrA8mQQWA0M0lxd1Q==
Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by
 DS7P223MB1265.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:256::6) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.8489.27; Sun, 2 Mar 2025 20:38:45 +0000
Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM
 ([fe80::bf09:8e9:b07f:98a7]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM
 ([fe80::bf09:8e9:b07f:98a7%7]) with mapi id 15.20.8489.025; Sun, 2 Mar 2025
 20:38:45 +0000
From: Soft Works <softworkz-at-hotmail.com@ffmpeg.org>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Thread-Topic: [FFmpeg-devel] [PATCH v5] libavcodec/dvbsubenc.c: add a
 disable_2bpp option to work around some decoders.
Thread-Index: AQHbi5fmkoleGSTAo0en5El6loab3bNgTrTQ
Date: Sun, 2 Mar 2025 20:38:45 +0000
Message-ID: <DM8P223MB036556909A24803D3FAC1D10BACE2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM>
References: <DM8P223MB036502E46137DD7E252AF669BACE2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM>
 <20250302172331.57779-1-waider@waider.ie>
In-Reply-To: <20250302172331.57779-1-waider@waider.ie>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DM8P223MB0365:EE_|DS7P223MB1265:EE_
x-ms-office365-filtering-correlation-id: bec9276e-7dcf-473a-678e-08dd59ca3a5a
x-microsoft-antispam: BCL:0;
 ARA:14566002|8062599003|461199028|19110799003|8060799006|15080799006|7092599003|440099028|3412199025|41001999003|102099032;
x-microsoft-antispam-message-info: =?iso-8859-1?Q?KB3C5yM7z0/CNT3cpuxE1u0I1PCTFcX2154CBeStnI2PFB5VC9kpqfjZZ4?=
 =?iso-8859-1?Q?4odLQcpEciVU4RR2WruSIhc906esy/cTqxOYMZP+yW346PWHLu3BGPOR8l?=
 =?iso-8859-1?Q?fsAjLSY5A98fINqf6/SpSKIYEgnWuB+DHtpmYHo4PUaqsGODZOLDFNlArc?=
 =?iso-8859-1?Q?01ci411BGP5zLIpDUC6FyfTQbCq+9ujXLDGUDlLIGD/K0Oj8bQWOAq/Y54?=
 =?iso-8859-1?Q?v0C22qXk+5fq1cEQsx+3oF1ChuVGopWwEa1c73kNasqBO1iZHMemsm0QtJ?=
 =?iso-8859-1?Q?e7QfVAk1AuruBGbOPaUIHgGTIQ0nRUo8UIeStXckbTW25BRqcnRwbGr42i?=
 =?iso-8859-1?Q?AsiDgzREHpAsR8DlT3sr1IYZiPfk331VxlWX84BqFMytBbivJX3+tuAFiY?=
 =?iso-8859-1?Q?o3nMUm3RFa88onBDcB2IPojSAR8L4V0sjQXI1oA4VKQvUTsh0QPsWpb0sq?=
 =?iso-8859-1?Q?6Ms/82xeTSGCcAAWs1UaOuIEkT4HvS5Fh8wil3+CtXpaeqsUJY0X4rZUmA?=
 =?iso-8859-1?Q?HxIgB1EVwphiounqNa+uepq+r/OBqFjzmT2coUvi/c4s5c+pMmeZrVumtY?=
 =?iso-8859-1?Q?u5TEKOdx+478FawH3tyy+odYdwUhxxAfZBlaWImalTBdKOBBlooKy9UAFJ?=
 =?iso-8859-1?Q?Oq/lEYT15M89T2txZWrql2bYQZgf+m7g6E/xkDDF2z+PMzDmirzyjIU7J/?=
 =?iso-8859-1?Q?l5gFEDMdVIBIncRBiZpiCV2/sAPyroPEPI/V3/eAlo2IevxuMabVfU9hJx?=
 =?iso-8859-1?Q?mSEzapvdWMuXmJoK2OwjBkpTjMuPfsKbyEqp6+gA2U5/Xe93v+BC+zXAv+?=
 =?iso-8859-1?Q?Kl23g7UISbkKWagTuneGACSMcrzVW/N8REq8nvihcyr5teOEChEYkOx1ys?=
 =?iso-8859-1?Q?X83JNc21N+RryxYyMBwOBuRPY3W8A4mg/u1tkc+XTk2DsJKM0+IhrQUJlL?=
 =?iso-8859-1?Q?5onHEfv51nfgEiZN6ipgzKJj+jtnAjz6TKbZJY6597DRk7EhDjXTqeSz68?=
 =?iso-8859-1?Q?nGKeUoLPXHseTVGy1tGBn72HNZMcEqc5fjZ/SrmjxoBaqCLIu2XupJDLjG?=
 =?iso-8859-1?Q?t3paw+vvYZc03+BMr3aGEVaO9367+Mc+bvScw61S14NvAsLPFRiRST+yt8?=
 =?iso-8859-1?Q?lXdkZrOTUK0UE8G8ky+XlT2FLZP+w=3D?=
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?5pmqNTtaqxFczrDFryiQb1JniBvmYTcPr6yYUapNCOCGRevl0nMYd0V/6h?=
 =?iso-8859-1?Q?26c3pGvNLSOlnFdahd9OPXnnzHpPyClY/7sN7/ecg0oN0xvW7D+Rtd7GeE?=
 =?iso-8859-1?Q?WW53mX9Tu05MByrrZaHnnLO3qLinCThJLaTmV5CaasLV1La2aerWuXOX3x?=
 =?iso-8859-1?Q?DYcJtWU0V4qpyQ+20UfdRSNOVxWUNfcXZG4tsR170hTZzcebRa92dXmpVt?=
 =?iso-8859-1?Q?Qd3w8UfMXsxCmpm22PICsoZea+OivEH0pfZw/y1+yiQMkcL/LwI6mk67lG?=
 =?iso-8859-1?Q?QQLZdcxGDEd1WZp9K4Z1XrhDsI5mlfwDs8NUoEwqH+2wSC59q/A4WUxus/?=
 =?iso-8859-1?Q?KWHdUkITVduNzRqaXT+j/r9PJAjdvFB4K69yFjIGKU4Tc6j37BH9iUeU6t?=
 =?iso-8859-1?Q?838Z/Xgt4Yj3eMcuvu6gZzn/FXKLbjcIbsstrvvWb7ANaurnlwZrdsk4vl?=
 =?iso-8859-1?Q?oUDUkaJWFtDf8dxs1m+WUEqp63xUTdQ/Juipa8en75Q5tbZ53lkc3Kb7o7?=
 =?iso-8859-1?Q?i7oc1M2BUO5HHj6q7e0479LX8vpYntQPKv3UoTeOaIPEbxKJdyXcVnrNvv?=
 =?iso-8859-1?Q?IaFm9V2VrBDou7Pp5lRYZphEUQc5hFTFRAqG+0PwKHs7ha7RZIGm6SO8jq?=
 =?iso-8859-1?Q?uyzgJAz+Aaag+5zbl0DBkFCIe3keoXST1Ve73P9GFABdsLTqKvgCsKrxdB?=
 =?iso-8859-1?Q?TcTZA3S/cjYBHYBhDpSYZMm7VeWZ05AUb7PQYnJbALkkmorQAzYqpyPCuN?=
 =?iso-8859-1?Q?S8QGM3WBf7m1u4lutI+X4BvEi/jpI9UVIxf6llgUCa3YiVNDQvLZ2HS+q0?=
 =?iso-8859-1?Q?Ao/yyvXg5/AktEz4HUHMNt4VY/UEiFh2Ht6KuTK3tBopk9kNBSrWyZk4Av?=
 =?iso-8859-1?Q?RmEgspTeE0ec5mzp0axqnTDNxIlxLOyzX11x6cQVL5ioZCZuyOqHIBVxDp?=
 =?iso-8859-1?Q?+E6APOJMSR5QZ/60QmVJLnpOAAp9ix+kLqjut9IZv0JZ6oHmbgiahE7y9F?=
 =?iso-8859-1?Q?0pMRco7UfDv1C27l/JCrD0+YAsoNaT9spTcpkn+AObv8YeBarv6yOKvuhd?=
 =?iso-8859-1?Q?Hi2C8fq+DD9ofxNepC3nrAYDLYLtSUW4/W9Mb2n1Y537DwHC61x5NTBM1o?=
 =?iso-8859-1?Q?BdDUtHCH59+PO2yFmcmugaVyV/j+14o4qDfNYC/LHOEfKE3+YDoV3fvAAY?=
 =?iso-8859-1?Q?pM4TWr+qWg8LBGVf8Lv3eTed2Hx7m6fmcFWjmZUru6nyHHjXEP6WetQorE?=
 =?iso-8859-1?Q?iseA8KQeE+krCNJGpeHjEpaovbM6DnvZrJTTQiU/o=3D?=
MIME-Version: 1.0
X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-92255.templateTenant
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-CrossTenant-Network-Message-Id: bec9276e-7dcf-473a-678e-08dd59ca3a5a
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Mar 2025 20:38:45.3680 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7P223MB1265
Subject: Re: [FFmpeg-devel] [PATCH v5] libavcodec/dvbsubenc.c: add a
 disable_2bpp option to work around some decoders.
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Ronan Waide <waider@waider.ie>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/DM8P223MB036556909A24803D3FAC1D10BACE2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Ronan
> Waide
> Sent: Sonntag, 2. M=E4rz 2025 18:24
> To: ffmpeg-devel@ffmpeg.org
> Cc: Ronan Waide <waider@waider.ie>
> Subject: [FFmpeg-devel] [PATCH v5] libavcodec/dvbsubenc.c: add a
> disable_2bpp option to work around some decoders.
> =

> As noted in the code in several places, some DVB subtitle decoders
> don't handle 2bpp color. This patch adds a disable_2bpp option which
> disables the 2bpp format; subtitles which would use 2bpp will be bumped
> up to 4bpp. Per suggestion from sw, disable_2pp defaults to true.
> =

> Signed-off-by: Ronan Waide <waider@waider.ie>
> ---
>  doc/encoders.texi      | 27 +++++++++++++++++
>  libavcodec/dvbsubenc.c | 69 +++++++++++++++++++++++++++++++-----------
>  2 files changed, 78 insertions(+), 18 deletions(-)
> =

> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index f3fcc1aa60..6ee0065c7d 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -4484,6 +4484,33 @@ Reduces detail but attempts to preserve color at
> extremely low bitrates.
>  @chapter Subtitles Encoders
>  @c man begin SUBTITLES ENCODERS
> =

> +@section dvbsub
> +
> +This codec encodes the bitmap subtitle format that is used in DVB
> +broadcasts and recordings. The bitmaps are typically embedded in a
> +container such as MPEG-TS as a separate stream.
> +
> +@subsection Options
> +
> +@table @option
> +@item disable_2bpp @var{boolean}
> +Disable the 2 bits-per-pixel encoding format.
> +
> +DVB supports 2, 4, and 8 bits-per-pixel color lookup tables. However,
> +not all players support or properly support 2 bits-per-pixel,
> +resulting in unusable subtitles.
> +@table @option
> +@item 0
> +The 2 bits-per-pixel encoding format will be used for subtitles with 4
> +colors or less.
> +
> +@item 1
> +The 2 bits-per-pixel encoding format will be disabled, and subtitles
> +with 4 colors or less will use a 4 bits-per-pixel format. (default)
> +@end table
> +
> +@end table
> +
>  @section dvdsub
> =

>  This codec encodes the bitmap subtitle format that is used in DVDs.
> diff --git a/libavcodec/dvbsubenc.c b/libavcodec/dvbsubenc.c
> index 822e3a5309..4db2e1ddda 100644
> --- a/libavcodec/dvbsubenc.c
> +++ b/libavcodec/dvbsubenc.c
> @@ -22,9 +22,12 @@
>  #include "bytestream.h"
>  #include "codec_internal.h"
>  #include "libavutil/colorspace.h"
> +#include "libavutil/opt.h"
> =

>  typedef struct DVBSubtitleContext {
> +    AVClass * class;
>      int object_version;
> +    int disable_2bpp;
>  } DVBSubtitleContext;
> =

>  #define PUTBITS2(val)\
> @@ -274,13 +277,15 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>  {
>      DVBSubtitleContext *s =3D avctx->priv_data;
>      uint8_t *q, *pseg_len;
> -    int page_id, region_id, clut_id, object_id, i, bpp_index,
> page_state;
> +    int page_id, region_id, clut_id, object_id, i, bpp_index,
> page_state, min_colors;
> =

> =

>      q =3D outbuf;
> =

>      page_id =3D 1;
> =

> +    min_colors =3D s->disable_2bpp ? 16 : 0;
> +
>      if (h->num_rects && !h->rects)
>          return AVERROR(EINVAL);
> =

> @@ -326,18 +331,20 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
> =

>      if (h->num_rects) {
>          for (clut_id =3D 0; clut_id < h->num_rects; clut_id++) {
> -            if (buf_size < 6 + h->rects[clut_id]->nb_colors * 6)
> +            int nb_colors =3D FFMAX(min_colors, h->rects[clut_id]-
> >nb_colors);
> +
> +            if (buf_size < 6 + nb_colors * 6)
>                  return AVERROR_BUFFER_TOO_SMALL;
> =

>              /* CLUT segment */
> =

> -            if (h->rects[clut_id]->nb_colors <=3D 4) {
> +            if (nb_colors <=3D 4) {
>                  /* 2 bpp, some decoders do not support it correctly */
>                  bpp_index =3D 0;
> -            } else if (h->rects[clut_id]->nb_colors <=3D 16) {
> +            } else if (nb_colors <=3D 16) {
>                  /* 4 bpp, standard encoding */
>                  bpp_index =3D 1;
> -            } else if (h->rects[clut_id]->nb_colors <=3D 256) {
> +            } else if (nb_colors <=3D 256) {
>                  /* 8 bpp, standard encoding */
>                  bpp_index =3D 2;
>              } else {
> @@ -354,16 +361,24 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>              *q++ =3D clut_id;
>              *q++ =3D (0 << 4) | 0xf; /* version =3D 0 */
> =

> -            for(i =3D 0; i < h->rects[clut_id]->nb_colors; i++) {
> +            for(i =3D 0; i < nb_colors; i++) {
>                  *q++ =3D i; /* clut_entry_id */
>                  *q++ =3D (1 << (7 - bpp_index)) | (0xf << 1) | 1; /* 2
> bits/pixel full range */
>                  {
>                      int a, r, g, b;
> -                    uint32_t x=3D ((uint32_t*)h->rects[clut_id]-
> >data[1])[i];
> -                    a =3D (x >> 24) & 0xff;
> -                    r =3D (x >> 16) & 0xff;
> -                    g =3D (x >>  8) & 0xff;
> -                    b =3D (x >>  0) & 0xff;
> +                    if (i < h->rects[clut_id]->nb_colors) {
> +                        uint32_t x=3D ((uint32_t*)h->rects[clut_id]-
> >data[1])[i];
> +                        a =3D (x >> 24) & 0xff;
> +                        r =3D (x >> 16) & 0xff;
> +                        g =3D (x >>  8) & 0xff;
> +                        b =3D (x >>  0) & 0xff;
> +                    } else {
> +                        /* pad out the CLUT */
> +                        a =3D 0;
> +                        r =3D 0;
> +                        g =3D 0;
> +                        b =3D 0;
> +                    }
> =

>                      *q++ =3D RGB_TO_Y_CCIR(r, g, b);
>                      *q++ =3D RGB_TO_V_CCIR(r, g, b, 0);
> @@ -373,7 +388,7 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>              }
> =

>              bytestream_put_be16(&pseg_len, q - pseg_len - 2);
> -            buf_size -=3D 6 + h->rects[clut_id]->nb_colors * 6;
> +            buf_size -=3D 6 + nb_colors * 6;
>          }
> =

>          if (buf_size < h->num_rects * 22)
> @@ -381,14 +396,15 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>          for (region_id =3D 0; region_id < h->num_rects; region_id++) {
> =

>              /* region composition segment */
> +            int nb_colors =3D FFMAX(min_colors, h->rects[region_id]-
> >nb_colors);
> =

> -            if (h->rects[region_id]->nb_colors <=3D 4) {
> +            if (nb_colors <=3D 4) {
>                  /* 2 bpp, some decoders do not support it correctly */
>                  bpp_index =3D 0;
> -            } else if (h->rects[region_id]->nb_colors <=3D 16) {
> +            } else if (nb_colors <=3D 16) {
>                  /* 4 bpp, standard encoding */
>                  bpp_index =3D 1;
> -            } else if (h->rects[region_id]->nb_colors <=3D 256) {
> +            } else if (nb_colors <=3D 256) {
>                  /* 8 bpp, standard encoding */
>                  bpp_index =3D 2;
>              } else {
> @@ -424,17 +440,19 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>                                    const uint8_t *bitmap, int linesize,
>                                    int w, int h);
> =

> +            int nb_colors =3D FFMAX(min_colors, h->rects[object_id]-
> >nb_colors);
> +
>              if (buf_size < 13)
>                  return AVERROR_BUFFER_TOO_SMALL;
> =

>              /* bpp_index maths */
> -            if (h->rects[object_id]->nb_colors <=3D 4) {
> +            if (nb_colors <=3D 4) {
>                  /* 2 bpp, some decoders do not support it correctly */
>                  dvb_encode_rle =3D dvb_encode_rle2;
> -            } else if (h->rects[object_id]->nb_colors <=3D 16) {
> +            } else if (nb_colors <=3D 16) {
>                  /* 4 bpp, standard encoding */
>                  dvb_encode_rle =3D dvb_encode_rle4;
> -            } else if (h->rects[object_id]->nb_colors <=3D 256) {
> +            } else if (nb_colors <=3D 256) {
>                  /* 8 bpp, standard encoding */
>                  dvb_encode_rle =3D dvb_encode_rle8;
>              } else {
> @@ -506,6 +524,20 @@ static int dvbsub_encode(AVCodecContext *avctx,
> uint8_t *outbuf, int buf_size,
>      return q - outbuf;
>  }
> =

> +#define OFFSET(x) offsetof(DVBSubtitleContext, x)
> +#define SE AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_ENCODING_PARAM
> +static const AVOption options[] =3D {
> +    {"disable_2bpp", "disable the 2bpp subtitle encoder",
> OFFSET(disable_2bpp), AV_OPT_TYPE_BOOL, {.i64 =3D 1}, 0, 1, SE},
> +    { NULL },
> +};
> +
> +static const AVClass dvbsubenc_class =3D {
> +    .class_name =3D "DVBSUB subtitle encoder",
> +    .item_name  =3D av_default_item_name,
> +    .option     =3D options,
> +    .version    =3D LIBAVUTIL_VERSION_INT,
> +};
> +
>  const FFCodec ff_dvbsub_encoder =3D {
>      .p.name         =3D "dvbsub",
>      CODEC_LONG_NAME("DVB subtitles"),
> @@ -513,4 +545,5 @@ const FFCodec ff_dvbsub_encoder =3D {
>      .p.id           =3D AV_CODEC_ID_DVB_SUBTITLE,
>      .priv_data_size =3D sizeof(DVBSubtitleContext),
>      FF_CODEC_ENCODE_SUB_CB(dvbsub_encode),
> +    .p.priv_class   =3D &dvbsubenc_class,
>  };
> --

Tested & LGTM

Thanks for the patch!

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".