mirror of https://git.ffmpeg.org/ffmpeg.git
avfilter/vf_lut3d: allow to control when to upload CLUT for haldclut
This commit is contained in:
parent
1da3394adb
commit
452d611fc7
|
@ -13793,6 +13793,10 @@ The Hald CLUT input can be a simple picture or a complete video stream.
|
|||
The filter accepts the following options:
|
||||
|
||||
@table @option
|
||||
@item clut
|
||||
Set which CLUT video frames will be processed from second input stream,
|
||||
can be @var{first} or @var{all}. Default is @var{all}.
|
||||
|
||||
@item shortest
|
||||
Force termination when the shortest input terminates. Default is @code{0}.
|
||||
@item repeatlast
|
||||
|
|
|
@ -66,6 +66,8 @@ typedef struct LUT3DContext {
|
|||
avfilter_action_func *interp;
|
||||
Lut3DPreLut prelut;
|
||||
#if CONFIG_HALDCLUT_FILTER
|
||||
int clut;
|
||||
int got_clut;
|
||||
uint8_t clut_rgba_map[4];
|
||||
int clut_step;
|
||||
int clut_bits;
|
||||
|
|
|
@ -1217,6 +1217,11 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
|
|||
static const AVOption lut3d_haldclut_options[] = {
|
||||
#if CONFIG_LUT3D_FILTER
|
||||
{ "file", "set 3D LUT file name", OFFSET(file), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
|
||||
#endif
|
||||
#if CONFIG_HALDCLUT_FILTER
|
||||
{ "clut", "when to process CLUT", OFFSET(clut), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, .flags = TFLAGS, "clut" },
|
||||
{ "first", "process only first CLUT, ignore rest", 0, AV_OPT_TYPE_CONST, {.i64=0}, .flags = TFLAGS, "clut" },
|
||||
{ "all", "process all CLUTs", 0, AV_OPT_TYPE_CONST, {.i64=1}, .flags = TFLAGS, "clut" },
|
||||
#endif
|
||||
COMMON_OPTIONS
|
||||
};
|
||||
|
@ -1519,12 +1524,15 @@ static int update_apply_clut(FFFrameSync *fs)
|
|||
return ret;
|
||||
if (!second)
|
||||
return ff_filter_frame(ctx->outputs[0], master);
|
||||
if (lut3d->clut_float)
|
||||
update_clut_float(ctx->priv, second);
|
||||
else if (lut3d->clut_planar)
|
||||
update_clut_planar(ctx->priv, second);
|
||||
else
|
||||
update_clut_packed(ctx->priv, second);
|
||||
if (lut3d->clut || !lut3d->got_clut) {
|
||||
if (lut3d->clut_float)
|
||||
update_clut_float(ctx->priv, second);
|
||||
else if (lut3d->clut_planar)
|
||||
update_clut_planar(ctx->priv, second);
|
||||
else
|
||||
update_clut_packed(ctx->priv, second);
|
||||
lut3d->got_clut = 1;
|
||||
}
|
||||
out = apply_lut(inlink, master);
|
||||
return ff_filter_frame(ctx->outputs[0], out);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue