FFmpeg
libavcodec
jpegls.c
Go to the documentation of this file.
1
/*
2
* JPEG-LS common code
3
* Copyright (c) 2003 Michael Niedermayer
4
* Copyright (c) 2006 Konstantin Shishkov
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
/**
24
* @file
25
* JPEG-LS common code.
26
*/
27
28
#include <stddef.h>
29
#include "
libavutil/internal.h
"
30
#include "
libavutil/intmath.h
"
31
#include "
jpegls.h
"
32
33
void
ff_jpegls_init_state
(
JLSState
*
state
)
34
{
35
int
i
;
36
37
state
->twonear =
state
->near * 2 + 1;
38
state
->range = (
state
->maxval +
state
->twonear - 1) /
state
->twonear + 1;
39
40
// QBPP = ceil(log2(RANGE))
41
for
(
state
->qbpp = 0; (1 <<
state
->qbpp) <
state
->range;
state
->qbpp++)
42
;
43
44
state
->bpp =
FFMAX
(
av_log2
(
state
->maxval) + 1, 2);
45
state
->limit = 2*(
state
->bpp +
FFMAX
(
state
->bpp, 8)) -
state
->qbpp;
46
47
for
(
i
= 0;
i
< 367;
i
++) {
48
state
->A[
i
] =
FFMAX
(
state
->range + 32 >> 6, 2);
49
state
->N[
i
] = 1;
50
}
51
}
52
53
/**
54
* Custom value clipping function used in T1, T2, T3 calculation
55
*/
56
static
inline
int
iso_clip
(
int
v,
int
vmin,
int
vmax)
57
{
58
if
(v > vmax || v < vmin)
59
return
vmin;
60
else
61
return
v;
62
}
63
64
void
ff_jpegls_reset_coding_parameters
(
JLSState
*
s
,
int
reset_all)
65
{
66
const
int
basic_t1 = 3;
67
const
int
basic_t2 = 7;
68
const
int
basic_t3 = 21;
69
int
factor
;
70
71
if
(
s
->maxval == 0 || reset_all)
72
s
->maxval = (1 <<
s
->bpp) - 1;
73
74
if
(
s
->maxval >= 128) {
75
factor
=
FFMIN
(
s
->maxval, 4095) + 128 >> 8;
76
77
if
(
s
->T1 == 0 || reset_all)
78
s
->T1 =
iso_clip
(
factor
* (basic_t1 - 2) + 2 + 3 *
s
->near,
79
s
->near + 1,
s
->maxval);
80
if
(
s
->T2 == 0 || reset_all)
81
s
->T2 =
iso_clip
(
factor
* (basic_t2 - 3) + 3 + 5 *
s
->near,
82
s
->T1,
s
->maxval);
83
if
(
s
->T3 == 0 || reset_all)
84
s
->T3 =
iso_clip
(
factor
* (basic_t3 - 4) + 4 + 7 *
s
->near,
85
s
->T2,
s
->maxval);
86
}
else
{
87
factor
= 256 / (
s
->maxval + 1);
88
89
if
(
s
->T1 == 0 || reset_all)
90
s
->T1 =
iso_clip
(
FFMAX
(2, basic_t1 /
factor
+ 3 *
s
->near),
91
s
->near + 1,
s
->maxval);
92
if
(
s
->T2 == 0 || reset_all)
93
s
->T2 =
iso_clip
(
FFMAX
(3, basic_t2 /
factor
+ 5 *
s
->near),
94
s
->T1,
s
->maxval);
95
if
(
s
->T3 == 0 || reset_all)
96
s
->T3 =
iso_clip
(
FFMAX
(4, basic_t3 /
factor
+ 7 *
s
->near),
97
s
->T2,
s
->maxval);
98
}
99
100
if
(
s
->reset == 0 || reset_all)
101
s
->reset = 64;
102
ff_dlog
(
NULL
,
"[JPEG-LS RESET] T=%i,%i,%i\n"
,
s
->T1,
s
->T2,
s
->T3);
103
}
FFMAX
#define FFMAX(a, b)
Definition:
macros.h:47
JLSState
Definition:
jpegls.h:36
jpegls.h
s
#define s(width, name)
Definition:
cbs_vp9.c:256
NULL
#define NULL
Definition:
coverity.c:32
ff_dlog
#define ff_dlog(a,...)
Definition:
tableprint_vlc.h:28
for
for(k=2;k<=8;++k)
Definition:
h264pred_template.c:425
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:269
ff_jpegls_init_state
void ff_jpegls_init_state(JLSState *state)
Calculate initial JPEG-LS parameters.
Definition:
jpegls.c:33
internal.h
FFMIN
#define FFMIN(a, b)
Definition:
macros.h:49
ff_jpegls_reset_coding_parameters
void ff_jpegls_reset_coding_parameters(JLSState *s, int reset_all)
Calculate JPEG-LS codec values.
Definition:
jpegls.c:64
factor
static const int factor[16]
Definition:
vf_pp7.c:76
iso_clip
static int iso_clip(int v, int vmin, int vmax)
Custom value clipping function used in T1, T2, T3 calculation.
Definition:
jpegls.c:56
state
static struct @345 state
av_log2
int av_log2(unsigned v)
Definition:
intmath.c:26
intmath.h
Generated on Tue Feb 28 2023 21:33:20 for FFmpeg by
1.8.17