mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
lavfi/palettegen: Allow setting the background colour.
This commit is contained in:
parent
49fe0ecd40
commit
1da8c4ec85
@ -11458,6 +11458,9 @@ If not set, the maximum of colors in the palette will be 256. You probably want
|
|||||||
to disable this option for a standalone image.
|
to disable this option for a standalone image.
|
||||||
Set by default.
|
Set by default.
|
||||||
|
|
||||||
|
@item transparency_color
|
||||||
|
Set the color that will be used as background for transparency.
|
||||||
|
|
||||||
@item stats_mode
|
@item stats_mode
|
||||||
Set statistics mode.
|
Set statistics mode.
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 7
|
#define LIBAVFILTER_VERSION_MAJOR 7
|
||||||
#define LIBAVFILTER_VERSION_MINOR 0
|
#define LIBAVFILTER_VERSION_MINOR 0
|
||||||
#define LIBAVFILTER_VERSION_MICRO 100
|
#define LIBAVFILTER_VERSION_MICRO 101
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "libavutil/internal.h"
|
#include "libavutil/internal.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/qsort.h"
|
#include "libavutil/qsort.h"
|
||||||
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
@ -74,6 +75,7 @@ typedef struct PaletteGenContext {
|
|||||||
struct range_box boxes[256]; // define the segmentation of the colorspace (the final palette)
|
struct range_box boxes[256]; // define the segmentation of the colorspace (the final palette)
|
||||||
int nb_boxes; // number of boxes (increase will segmenting them)
|
int nb_boxes; // number of boxes (increase will segmenting them)
|
||||||
int palette_pushed; // if the palette frame is pushed into the outlink or not
|
int palette_pushed; // if the palette frame is pushed into the outlink or not
|
||||||
|
uint8_t[4] transparency_color; // background color for transparency
|
||||||
} PaletteGenContext;
|
} PaletteGenContext;
|
||||||
|
|
||||||
#define OFFSET(x) offsetof(PaletteGenContext, x)
|
#define OFFSET(x) offsetof(PaletteGenContext, x)
|
||||||
@ -81,6 +83,7 @@ typedef struct PaletteGenContext {
|
|||||||
static const AVOption palettegen_options[] = {
|
static const AVOption palettegen_options[] = {
|
||||||
{ "max_colors", "set the maximum number of colors to use in the palette", OFFSET(max_colors), AV_OPT_TYPE_INT, {.i64=256}, 4, 256, FLAGS },
|
{ "max_colors", "set the maximum number of colors to use in the palette", OFFSET(max_colors), AV_OPT_TYPE_INT, {.i64=256}, 4, 256, FLAGS },
|
||||||
{ "reserve_transparent", "reserve a palette entry for transparency", OFFSET(reserve_transparent), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS },
|
{ "reserve_transparent", "reserve a palette entry for transparency", OFFSET(reserve_transparent), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS },
|
||||||
|
{ "transparency_color", "set a background color for transparency", OFFSET(transparency_color), AV_OPT_TYPE_COLOR, {.str="lime"}, CHAR_MIN, CHAR_MAX, FLAGS },
|
||||||
{ "stats_mode", "set statistics mode", OFFSET(stats_mode), AV_OPT_TYPE_INT, {.i64=STATS_MODE_ALL_FRAMES}, 0, NB_STATS_MODE-1, FLAGS, "mode" },
|
{ "stats_mode", "set statistics mode", OFFSET(stats_mode), AV_OPT_TYPE_INT, {.i64=STATS_MODE_ALL_FRAMES}, 0, NB_STATS_MODE-1, FLAGS, "mode" },
|
||||||
{ "full", "compute full frame histograms", 0, AV_OPT_TYPE_CONST, {.i64=STATS_MODE_ALL_FRAMES}, INT_MIN, INT_MAX, FLAGS, "mode" },
|
{ "full", "compute full frame histograms", 0, AV_OPT_TYPE_CONST, {.i64=STATS_MODE_ALL_FRAMES}, INT_MIN, INT_MAX, FLAGS, "mode" },
|
||||||
{ "diff", "compute histograms only for the part that differs from previous frame", 0, AV_OPT_TYPE_CONST, {.i64=STATS_MODE_DIFF_FRAMES}, INT_MIN, INT_MAX, FLAGS, "mode" },
|
{ "diff", "compute histograms only for the part that differs from previous frame", 0, AV_OPT_TYPE_CONST, {.i64=STATS_MODE_DIFF_FRAMES}, INT_MIN, INT_MAX, FLAGS, "mode" },
|
||||||
@ -250,7 +253,7 @@ static void write_palette(AVFilterContext *ctx, AVFrame *out)
|
|||||||
|
|
||||||
if (s->reserve_transparent) {
|
if (s->reserve_transparent) {
|
||||||
av_assert0(s->nb_boxes < 256);
|
av_assert0(s->nb_boxes < 256);
|
||||||
pal[out->width - pal_linesize - 1] = 0x0000ff00; // add a green transparent color
|
pal[out->width - pal_linesize - 1] = AV_RB32(&s->transparency_color) >> 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user