forked from FFmpeg/FFmpeg
avfilter/vf_lut3d: allow to control when to upload CLUT for haldclut
This commit is contained in:
parent
1da3394adb
commit
452d611fc7
3 changed files with 20 additions and 6 deletions
|
@ -13793,6 +13793,10 @@ The Hald CLUT input can be a simple picture or a complete video stream.
|
||||||
The filter accepts the following options:
|
The filter accepts the following options:
|
||||||
|
|
||||||
@table @option
|
@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
|
@item shortest
|
||||||
Force termination when the shortest input terminates. Default is @code{0}.
|
Force termination when the shortest input terminates. Default is @code{0}.
|
||||||
@item repeatlast
|
@item repeatlast
|
||||||
|
|
|
@ -66,6 +66,8 @@ typedef struct LUT3DContext {
|
||||||
avfilter_action_func *interp;
|
avfilter_action_func *interp;
|
||||||
Lut3DPreLut prelut;
|
Lut3DPreLut prelut;
|
||||||
#if CONFIG_HALDCLUT_FILTER
|
#if CONFIG_HALDCLUT_FILTER
|
||||||
|
int clut;
|
||||||
|
int got_clut;
|
||||||
uint8_t clut_rgba_map[4];
|
uint8_t clut_rgba_map[4];
|
||||||
int clut_step;
|
int clut_step;
|
||||||
int clut_bits;
|
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[] = {
|
static const AVOption lut3d_haldclut_options[] = {
|
||||||
#if CONFIG_LUT3D_FILTER
|
#if CONFIG_LUT3D_FILTER
|
||||||
{ "file", "set 3D LUT file name", OFFSET(file), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
|
{ "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
|
#endif
|
||||||
COMMON_OPTIONS
|
COMMON_OPTIONS
|
||||||
};
|
};
|
||||||
|
@ -1519,12 +1524,15 @@ static int update_apply_clut(FFFrameSync *fs)
|
||||||
return ret;
|
return ret;
|
||||||
if (!second)
|
if (!second)
|
||||||
return ff_filter_frame(ctx->outputs[0], master);
|
return ff_filter_frame(ctx->outputs[0], master);
|
||||||
if (lut3d->clut_float)
|
if (lut3d->clut || !lut3d->got_clut) {
|
||||||
update_clut_float(ctx->priv, second);
|
if (lut3d->clut_float)
|
||||||
else if (lut3d->clut_planar)
|
update_clut_float(ctx->priv, second);
|
||||||
update_clut_planar(ctx->priv, second);
|
else if (lut3d->clut_planar)
|
||||||
else
|
update_clut_planar(ctx->priv, second);
|
||||||
update_clut_packed(ctx->priv, second);
|
else
|
||||||
|
update_clut_packed(ctx->priv, second);
|
||||||
|
lut3d->got_clut = 1;
|
||||||
|
}
|
||||||
out = apply_lut(inlink, master);
|
out = apply_lut(inlink, master);
|
||||||
return ff_filter_frame(ctx->outputs[0], out);
|
return ff_filter_frame(ctx->outputs[0], out);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue