Coverage Report

Created: 2025-08-28 07:12

/src/ffmpeg/libavcodec/dirac_dwt.c
Line
Count
Source (jump to first uncovered line)
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
102k
{
39
102k
    int ret = 0;
40
41
102k
    d->buffer = p->buf;
42
102k
    d->width  = p->width;
43
102k
    d->height = p->height;
44
102k
    d->stride = p->stride;
45
102k
    d->temp   = p->tmp;
46
102k
    d->decomposition_count = decomposition_count;
47
48
102k
    if (bit_depth == 8)
49
49.4k
        ret = spatial_idwt_init_8bit(d, type);
50
52.7k
    else if (bit_depth == 10)
51
36.5k
        ret = spatial_idwt_init_10bit(d, type);
52
16.2k
    else if (bit_depth == 12)
53
16.2k
        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
102k
    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
102k
#if ARCH_X86
63
102k
    if (bit_depth == 8)
64
49.4k
        ff_spatial_idwt_init_x86(d, type);
65
102k
#endif
66
102k
    return 0;
67
102k
}
68
69
void ff_spatial_idwt_slice2(DWTContext *d, int y)
70
2.74M
{
71
2.74M
    int level, support = d->support;
72
73
6.25M
    for (level = d->decomposition_count-1; level >= 0; level--) {
74
3.51M
        int wl = d->width  >> level;
75
3.51M
        int hl = d->height >> level;
76
3.51M
        int stride_l = d->stride << level;
77
78
18.5M
        while (d->cs[level].y <= FFMIN((y>>level)+support, hl))
79
15.0M
            d->spatial_compose(d, level, wl, hl, stride_l);
80
3.51M
    }
81
2.74M
}