lavfi/curves: dynamically allocate LUTs
authorClément Bœsch <u@pkh.me>
Fri, 22 Jul 2016 20:20:53 +0000 (22:20 +0200)
committerClément Bœsch <u@pkh.me>
Sun, 24 Jul 2016 10:18:30 +0000 (12:18 +0200)
This simplifies following commits.

libavfilter/vf_curves.c

index 5b56968..85bffb1 100644 (file)
@@ -63,7 +63,7 @@ typedef struct {
     int preset;
     char *comp_points_str[NB_COMP + 1];
     char *comp_points_str_all;
-    uint8_t graph[NB_COMP + 1][256];
+    uint8_t *graph[NB_COMP + 1];
     char *psfile;
     uint8_t rgba_map[4];
     int step;
@@ -379,7 +379,7 @@ end:
     return ret;
 }
 
-static int dump_curves(const char *fname, uint8_t graph[NB_COMP + 1][256],
+static int dump_curves(const char *fname, uint8_t *graph[NB_COMP + 1],
                        struct keypoint *comp_points[NB_COMP + 1])
 {
     int i;
@@ -479,6 +479,9 @@ static av_cold int init(AVFilterContext *ctx)
     }
 
     for (i = 0; i < NB_COMP + 1; i++) {
+        curves->graph[i] = av_mallocz(256);
+        if (!curves->graph[i])
+            return AVERROR(ENOMEM);
         ret = parse_points_str(ctx, comp_points + i, curves->comp_points_str[i]);
         if (ret < 0)
             return ret;
@@ -606,6 +609,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
     return ff_filter_frame(outlink, out);
 }
 
+static av_cold void uninit(AVFilterContext *ctx)
+{
+    int i;
+    CurvesContext *curves = ctx->priv;
+
+    for (i = 0; i < NB_COMP + 1; i++)
+        av_freep(&curves->graph[i]);
+}
+
 static const AVFilterPad curves_inputs[] = {
     {
         .name         = "default",
@@ -629,6 +641,7 @@ AVFilter ff_vf_curves = {
     .description   = NULL_IF_CONFIG_SMALL("Adjust components curves."),
     .priv_size     = sizeof(CurvesContext),
     .init          = init,
+    .uninit        = uninit,
     .query_formats = query_formats,
     .inputs        = curves_inputs,
     .outputs       = curves_outputs,