Am Fr., 24. Jan. 2020 um 23:49 Uhr schrieb Michael Kuron <michael.ku...@gmail.com>: > > Previously, the default palette would always be used. > Now, we can accept a custom palette, just like dvdsubdec does. > > Signed-off-by: Michael Kuron <michael.ku...@gmail.com> > --- > doc/encoders.texi | 8 ++++++++ > libavcodec/dvdsubenc.c | 19 ++++++++++++++++++- > 2 files changed, 26 insertions(+), 1 deletion(-) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index eefd124751..a04f9f1b62 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3116,6 +3116,14 @@ and they can also be used in Matroska files. > @subsection Options > > @table @option > +@item palette > +Specify the global palette used by the bitmaps. > + > +The format for this option is a string containing 16 24-bits hexadecimal > +numbers (without 0x prefix) separated by commas, for example @code{0d00ee, > +ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, > +7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b}. > + > @item even_rows_fix > When set to 1, enable a work-around that makes the number of pixel rows > even in all subtitles. This fixes a problem with some players that > diff --git a/libavcodec/dvdsubenc.c b/libavcodec/dvdsubenc.c > index ff95ed2002..674d97ab9b 100644 > --- a/libavcodec/dvdsubenc.c > +++ b/libavcodec/dvdsubenc.c > @@ -29,6 +29,7 @@ > typedef struct { > AVClass *class; > uint32_t global_palette[16]; > + char *palette_str; > int even_rows_fix; > } DVDSubtitleContext; > > @@ -423,6 +424,17 @@ fail: > return ret; > } > > +static void parse_palette(DVDSubtitleContext *ctx, char *p) > +{ > + int i; > + > + for (i=0; i<16; i++) { > + ctx->global_palette[i] = strtoul(p, &p, 16); > + while (*p == ',' || av_isspace(*p)) > + p++; > + } > +} > + > static int dvdsub_init(AVCodecContext *avctx) > { > DVDSubtitleContext *dvdc = avctx->priv_data; > @@ -436,7 +448,11 @@ static int dvdsub_init(AVCodecContext *avctx) > int i, ret; > > av_assert0(sizeof(dvdc->global_palette) == sizeof(default_palette)); > - memcpy(dvdc->global_palette, default_palette, > sizeof(dvdc->global_palette)); > + if (dvdc->palette_str) { > + parse_palette(dvdc, dvdc->palette_str); > + } else { > + memcpy(dvdc->global_palette, default_palette, > sizeof(dvdc->global_palette)); > + } > > av_bprint_init(&extradata, 0, AV_BPRINT_SIZE_AUTOMATIC); > if (avctx->width && avctx->height) > @@ -467,6 +483,7 @@ static int dvdsub_encode(AVCodecContext *avctx, > #define OFFSET(x) offsetof(DVDSubtitleContext, x) > #define SE AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_ENCODING_PARAM > static const AVOption options[] = { > + {"palette", "set the global palette", OFFSET(palette_str), > AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, SE },
What happens if invalid values are passed as palette? Carl Eugen _______________________________________________ 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".