Coverage Report

Created: 2026-07-25 07:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/dirac_dwt.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2004-2010 Michael Niedermayer <michaelni@gmx.at>
3
 * Copyright (C) 2008 David Conrad
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
22
#include "libavutil/attributes.h"
23
#include "libavutil/common.h"
24
#include "libavutil/log.h"
25
#include "dirac_dwt.h"
26
27
#define TEMPLATE_8bit
28
#include "dirac_dwt_template.c"
29
30
#define TEMPLATE_10bit
31
#include "dirac_dwt_template.c"
32
33
#define TEMPLATE_12bit
34
#include "dirac_dwt_template.c"
35
36
int ff_spatial_idwt_init(DWTContext *d, DWTPlane *p, enum dwt_type type,
37
                         int decomposition_count, int bit_depth)
38
107k
{
39
107k
    int ret = 0;
40
41
107k
    d->buffer = p->buf;
42
107k
    d->width  = p->width;
43
107k
    d->height = p->height;
44
107k
    d->stride = p->stride;
45
107k
    d->temp   = p->tmp;
46
107k
    d->decomposition_count = decomposition_count;
47
48
107k
    if (bit_depth == 8)
49
46.9k
        ret = spatial_idwt_init_8bit(d, type);
50
60.6k
    else if (bit_depth == 10)
51
41.9k
        ret = spatial_idwt_init_10bit(d, type);
52
18.6k
    else if (bit_depth == 12)
53
18.6k
        ret = spatial_idwt_init_12bit(d, type);
54
0
    else
55
0
        av_log(NULL, AV_LOG_WARNING, "Unsupported bit depth = %i\n", bit_depth);
56
57
107k
    if (ret) {
58
0
        av_log(NULL, AV_LOG_ERROR, "Unknown wavelet type %d\n", type);
59
0
        return AVERROR_INVALIDDATA;
60
0
    }
61
62
#if ARCH_X86 && HAVE_X86ASM
63
    if (bit_depth == 8)
64
        ff_spatial_idwt_init_x86(d, type);
65
#endif
66
107k
    return 0;
67
107k
}
68
69
void ff_spatial_idwt_slice2(DWTContext *d, int y)
70
2.31M
{
71
2.31M
    int level, support = d->support;
72
73
5.27M
    for (level = d->decomposition_count-1; level >= 0; level--) {
74
2.95M
        int wl = d->width  >> level;
75
2.95M
        int hl = d->height >> level;
76
2.95M
        int stride_l = d->stride << level;
77
78
14.6M
        while (d->cs[level].y <= FFMIN((y>>level)+support, hl))
79
11.7M
            d->spatial_compose(d, level, wl, hl, stride_l);
80
2.95M
    }
81
2.31M
}