History

libavfilter: Remove synchronous functions from DNN filters

This commit removes the unused sync mode specific code from the DNN filters since the sync and async mode are now unified from the filters' perspective.

Shubhanshu Saxena committed 5 years ago

Commit 70b4dca1 parent 60b4d072 files · +4 −151Browse files

Showing the changes to libavfilter (2 of 2 files). Show all

Unified · Split

2 files
  1. libavfilter/vf_dnn_detect.c +2 −69
  2. libavfilter/vf_dnn_processing.c +2 −82
libavfilter/vf_dnn_detect.c+2−69
@@ -353,63 +353,6 @@ static int dnn_detect_query_formats(AVFilterContext *context) · 352 unmodified lines
353353 return ff_set_common_formats_from_list(context, pix_fmts);
354354 }
355355
356−static int dnn_detect_filter_frame(AVFilterLink *inlink, AVFrame *in)
357−{
358− AVFilterContext *context = inlink->dst;
359− AVFilterLink *outlink = context->outputs[0];
360− DnnDetectContext *ctx = context->priv;
361− DNNReturnType dnn_result;
362−
363− dnn_result = ff_dnn_execute_model(&ctx->dnnctx, in, in);
364− if (dnn_result != DNN_SUCCESS){
365− av_log(ctx, AV_LOG_ERROR, "failed to execute model\n");
366− av_frame_free(&in);
367− return AVERROR(EIO);
368− }
369−
370− return ff_filter_frame(outlink, in);
371−}
372−
373−static int dnn_detect_activate_sync(AVFilterContext *filter_ctx)
374−{
375− AVFilterLink *inlink = filter_ctx->inputs[0];
376− AVFilterLink *outlink = filter_ctx->outputs[0];
377− AVFrame *in = NULL;
378− int64_t pts;
379− int ret, status;
380− int got_frame = 0;
381−
382− FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink);
383−
384− do {
385− // drain all input frames
386− ret = ff_inlink_consume_frame(inlink, &in);
387− if (ret < 0)
388− return ret;
389− if (ret > 0) {
390− ret = dnn_detect_filter_frame(inlink, in);
391− if (ret < 0)
392− return ret;
393− got_frame = 1;
394− }
395− } while (ret > 0);
396−
397− // if frame got, schedule to next filter
398− if (got_frame)
399− return 0;
400−
401− if (ff_inlink_acknowledge_status(inlink, &status, &pts)) {
402− if (status == AVERROR_EOF) {
403− ff_outlink_set_status(outlink, status, pts);
404− return ret;
405− }
406− }
407−
408− FF_FILTER_FORWARD_WANTED(outlink, inlink);
409−
410− return FFERROR_NOT_READY;
411−}
412−
413356 static int dnn_detect_flush_frame(AVFilterLink *outlink, int64_t pts, int64_t *out_pts)
414357 {
415358 DnnDetectContext *ctx = outlink->src->priv;
@@ -438,7 +381,7 @@ static int dnn_detect_flush_frame(AVFilterLink *outlink, int64_t pts, int64_t *o · 22 unmodified lines
438381 return 0;
439382 }
440383
441−static int dnn_detect_activate_async(AVFilterContext *filter_ctx)
384+static int dnn_detect_activate(AVFilterContext *filter_ctx)
442385 {
443386 AVFilterLink *inlink = filter_ctx->inputs[0];
444387 AVFilterLink *outlink = filter_ctx->outputs[0];
@@ -494,16 +437,6 @@ static int dnn_detect_activate_async(AVFilterContext *filter_ctx) · 49 unmodified lines
494437 return 0;
495438 }
496439
497−static av_unused int dnn_detect_activate(AVFilterContext *filter_ctx)
498−{
499− DnnDetectContext *ctx = filter_ctx->priv;
500−
501− if (ctx->dnnctx.async)
502− return dnn_detect_activate_async(filter_ctx);
503− else
504− return dnn_detect_activate_sync(filter_ctx);
505−}
506−
507440 static av_cold void dnn_detect_uninit(AVFilterContext *context)
508441 {
509442 DnnDetectContext *ctx = context->priv;
@@ -535,5 +468,5 @@ const AVFilter ff_vf_dnn_detect = { · 25 unmodified lines
535468 FILTER_INPUTS(dnn_detect_inputs),
536469 FILTER_OUTPUTS(dnn_detect_outputs),
537470 .priv_class = &dnn_detect_class,
538− .activate = dnn_detect_activate_async,
471+ .activate = dnn_detect_activate,
539472 };
libavfilter/vf_dnn_processing.c+2−82
@@ -244,76 +244,6 @@ static int copy_uv_planes(DnnProcessingContext *ctx, AVFrame *out, const AVFrame · 243 unmodified lines
244244 return 0;
245245 }
246246
247−static int filter_frame(AVFilterLink *inlink, AVFrame *in)
248−{
249− AVFilterContext *context = inlink->dst;
250− AVFilterLink *outlink = context->outputs[0];
251− DnnProcessingContext *ctx = context->priv;
252− DNNReturnType dnn_result;
253− AVFrame *out;
254−
255− out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
256− if (!out) {
257− av_frame_free(&in);
258− return AVERROR(ENOMEM);
259− }
260− av_frame_copy_props(out, in);
261−
262− dnn_result = ff_dnn_execute_model(&ctx->dnnctx, in, out);
263− if (dnn_result != DNN_SUCCESS){
264− av_log(ctx, AV_LOG_ERROR, "failed to execute model\n");
265− av_frame_free(&in);
266− av_frame_free(&out);
267− return AVERROR(EIO);
268− }
269−
270− if (isPlanarYUV(in->format))
271− copy_uv_planes(ctx, out, in);
272−
273− av_frame_free(&in);
274− return ff_filter_frame(outlink, out);
275−}
276−
277−static int activate_sync(AVFilterContext *filter_ctx)
278−{
279− AVFilterLink *inlink = filter_ctx->inputs[0];
280− AVFilterLink *outlink = filter_ctx->outputs[0];
281− AVFrame *in = NULL;
282− int64_t pts;
283− int ret, status;
284− int got_frame = 0;
285−
286− FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink);
287−
288− do {
289− // drain all input frames
290− ret = ff_inlink_consume_frame(inlink, &in);
291− if (ret < 0)
292− return ret;
293− if (ret > 0) {
294− ret = filter_frame(inlink, in);
295− if (ret < 0)
296− return ret;
297− got_frame = 1;
298− }
299− } while (ret > 0);
300−
301− // if frame got, schedule to next filter
302− if (got_frame)
303− return 0;
304−
305− if (ff_inlink_acknowledge_status(inlink, &status, &pts)) {
306− if (status == AVERROR_EOF) {
307− ff_outlink_set_status(outlink, status, pts);
308− return ret;
309− }
310− }
311−
312− FF_FILTER_FORWARD_WANTED(outlink, inlink);
313−
314− return FFERROR_NOT_READY;
315−}
316−
317247 static int flush_frame(AVFilterLink *outlink, int64_t pts, int64_t *out_pts)
318248 {
319249 DnnProcessingContext *ctx = outlink->src->priv;
@@ -345,7 +275,7 @@ static int flush_frame(AVFilterLink *outlink, int64_t pts, int64_t *out_pts) · 25 unmodified lines
345275 return 0;
346276 }
347277
348−static int activate_async(AVFilterContext *filter_ctx)
278+static int activate(AVFilterContext *filter_ctx)
349279 {
350280 AVFilterLink *inlink = filter_ctx->inputs[0];
351281 AVFilterLink *outlink = filter_ctx->outputs[0];
@@ -410,16 +340,6 @@ static int activate_async(AVFilterContext *filter_ctx) · 58 unmodified lines
410340 return 0;
411341 }
412342
413−static av_unused int activate(AVFilterContext *filter_ctx)
414−{
415− DnnProcessingContext *ctx = filter_ctx->priv;
416−
417− if (ctx->dnnctx.async)
418− return activate_async(filter_ctx);
419− else
420− return activate_sync(filter_ctx);
421−}
422−
423343 static av_cold void uninit(AVFilterContext *ctx)
424344 {
425345 DnnProcessingContext *context = ctx->priv;
@@ -454,5 +374,5 @@ const AVFilter ff_vf_dnn_processing = { · 28 unmodified lines
454374 FILTER_INPUTS(dnn_processing_inputs),
455375 FILTER_OUTPUTS(dnn_processing_outputs),
456376 .priv_class = &dnn_processing_class,
457− .activate = activate_async,
377+ .activate = activate,
458378 };

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t