You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/vf_lut3d: allow to control when to upload CLUT for haldclut
This commit is contained in:
		| @@ -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); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user