| 1449 | } |
| 1450 | |
| 1451 | static void comb_detect_close(hb_filter_object_t *filter) |
| 1452 | { |
| 1453 | hb_filter_private_t *pv = filter->private_data; |
| 1454 | |
| 1455 | if (pv == NULL) |
| 1456 | { |
| 1457 | return; |
| 1458 | } |
| 1459 | |
| 1460 | hb_log("comb detect: heavy %i | light %i | uncombed %i | total %i", |
| 1461 | pv->comb_heavy, pv->comb_light, pv->comb_none, pv->frames); |
| 1462 | |
| 1463 | taskset_fini(&pv->comb_detect_filter_taskset); |
| 1464 | taskset_fini(&pv->comb_detect_check_taskset); |
| 1465 | |
| 1466 | if (pv->mode & MODE_FILTER) |
| 1467 | { |
| 1468 | taskset_fini( &pv->mask_filter_taskset ); |
| 1469 | if (pv->filter_mode == FILTER_ERODE_DILATE) |
| 1470 | { |
| 1471 | taskset_fini(&pv->mask_erode_taskset); |
| 1472 | taskset_fini(&pv->mask_dilate_taskset); |
| 1473 | } |
| 1474 | } |
| 1475 | |
| 1476 | hb_buffer_list_close(&pv->out_list); |
| 1477 | |
| 1478 | /* Cleanup reference buffers. */ |
| 1479 | for (int ii = 0; ii < 3; ii++) |
| 1480 | { |
| 1481 | if (!pv->ref_used[ii]) |
| 1482 | { |
| 1483 | hb_buffer_close(&pv->ref[ii]); |
| 1484 | } |
| 1485 | } |
| 1486 | |
| 1487 | /* Cleanup combing masks. */ |
| 1488 | hb_buffer_close(&pv->mask); |
| 1489 | hb_buffer_close(&pv->mask_filtered); |
| 1490 | hb_buffer_close(&pv->mask_temp); |
| 1491 | |
| 1492 | free(pv->gamma_lut); |
| 1493 | free(pv->block_score); |
| 1494 | free(pv); |
| 1495 | filter->private_data = NULL; |
| 1496 | } |
| 1497 | |
| 1498 | static void process_frame(hb_filter_private_t *pv) |
| 1499 | { |
nothing calls this directly
no test coverage detected