Browse code

lavfi/geq: switch to filter_frame.

Clément Bœsch authored on 2012/11/29 04:19:09
Showing 1 changed files
... ...
@@ -152,22 +152,28 @@ static int geq_config_props(AVFilterLink *inlink)
152 152
     return 0;
153 153
 }
154 154
 
155
-static int geq_end_frame(AVFilterLink *inlink)
155
+static int geq_filter_frame(AVFilterLink *inlink, AVFilterBufferRef *in)
156 156
 {
157
-    int ret, plane;
157
+    int plane;
158 158
     GEQContext *geq = inlink->dst->priv;
159 159
     AVFilterLink *outlink = inlink->dst->outputs[0];
160
-    AVFilterBufferRef *outpicref = outlink->out_buf;
160
+    AVFilterBufferRef *out;
161 161
     double values[VAR_VARS_NB] = {
162 162
         [VAR_N] = geq->framenum++,
163 163
     };
164 164
 
165
-    geq->picref = inlink->cur_buf;
165
+    geq->picref = in;
166
+    out = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
167
+    if (!out) {
168
+        avfilter_unref_bufferp(&in);
169
+        return AVERROR(ENOMEM);
170
+    }
171
+    avfilter_copy_buffer_ref_props(out, in);
166 172
 
167 173
     for (plane = 0; plane < 3; plane++) {
168 174
         int x, y;
169
-        uint8_t *dst = outpicref->data[plane];
170
-        const int linesize = outpicref->linesize[plane];
175
+        uint8_t *dst = out->data[plane];
176
+        const int linesize = out->linesize[plane];
171 177
         const int w = inlink->w >> (plane ? geq->hsub : 0);
172 178
         const int h = inlink->h >> (plane ? geq->vsub : 0);
173 179
 
... ...
@@ -186,10 +192,8 @@ static int geq_end_frame(AVFilterLink *inlink)
186 186
         }
187 187
     }
188 188
 
189
-    if ((ret = ff_draw_slice(outlink, 0, outlink->h, 1)) < 0 ||
190
-        (ret = ff_end_frame(outlink)) < 0)
191
-        return ret;
192
-    return 0;
189
+    avfilter_unref_bufferp(&geq->picref);
190
+    return ff_filter_frame(outlink, out);
193 191
 }
194 192
 
195 193
 static av_cold void geq_uninit(AVFilterContext *ctx)
... ...
@@ -202,15 +206,12 @@ static av_cold void geq_uninit(AVFilterContext *ctx)
202 202
     av_opt_free(geq);
203 203
 }
204 204
 
205
-static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
206
-
207 205
 static const AVFilterPad geq_inputs[] = {
208 206
     {
209 207
         .name         = "default",
210 208
         .type         = AVMEDIA_TYPE_VIDEO,
211
-        .draw_slice   = null_draw_slice,
212 209
         .config_props = geq_config_props,
213
-        .end_frame    = geq_end_frame,
210
+        .filter_frame = geq_filter_frame,
214 211
         .min_perms    = AV_PERM_READ,
215 212
     },
216 213
     { NULL }