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 "
internal.h
"
29
#include "
jpegls.h
"
30
31
void
ff_jpegls_init_state
(
JLSState
*
state
)
32
{
33
int
i
;
34
35
state
->twonear =
state
->near * 2 + 1;
36
state
->range = (
state
->maxval +
state
->twonear - 1) /
state
->twonear + 1;
37
38
// QBPP = ceil(log2(RANGE))
39
for
(
state
->qbpp = 0; (1 <<
state
->qbpp) <
state
->range;
state
->qbpp++)
40
;
41
42
state
->bpp =
FFMAX
(
av_log2
(
state
->maxval) + 1, 2);
43
state
->limit = 2*(
state
->bpp +
FFMAX
(
state
->bpp, 8)) -
state
->qbpp;
44
45
for
(
i
= 0;
i
< 367;
i
++) {
46
state
->A[
i
] =
FFMAX
(
state
->range + 32 >> 6, 2);
47
state
->N[
i
] = 1;
48
}
49
}
50
51
/**
52
* Custom value clipping function used in T1, T2, T3 calculation
53
*/
54
static
inline
int
iso_clip
(
int
v,
int
vmin,
int
vmax)
55
{
56
if
(v > vmax || v < vmin)
57
return
vmin;
58
else
59
return
v;
60
}
61
62
void
ff_jpegls_reset_coding_parameters
(
JLSState
*
s
,
int
reset_all)
63
{
64
const
int
basic_t1 = 3;
65
const
int
basic_t2 = 7;
66
const
int
basic_t3 = 21;
67
int
factor
;
68
69
if
(
s
->maxval == 0 || reset_all)
70
s
->maxval = (1 <<
s
->bpp) - 1;
71
72
if
(
s
->maxval >= 128) {
73
factor
=
FFMIN
(
s
->maxval, 4095) + 128 >> 8;
74
75
if
(
s
->T1 == 0 || reset_all)
76
s
->T1 =
iso_clip
(
factor
* (basic_t1 - 2) + 2 + 3 *
s
->near,
77
s
->near + 1,
s
->maxval);
78
if
(
s
->T2 == 0 || reset_all)
79
s
->T2 =
iso_clip
(
factor
* (basic_t2 - 3) + 3 + 5 *
s
->near,
80
s
->T1,
s
->maxval);
81
if
(
s
->T3 == 0 || reset_all)
82
s
->T3 =
iso_clip
(
factor
* (basic_t3 - 4) + 4 + 7 *
s
->near,
83
s
->T2,
s
->maxval);
84
}
else
{
85
factor
= 256 / (
s
->maxval + 1);
86
87
if
(
s
->T1 == 0 || reset_all)
88
s
->T1 =
iso_clip
(
FFMAX
(2, basic_t1 /
factor
+ 3 *
s
->near),
89
s
->near + 1,
s
->maxval);
90
if
(
s
->T2 == 0 || reset_all)
91
s
->T2 =
iso_clip
(
FFMAX
(3, basic_t2 /
factor
+ 5 *
s
->near),
92
s
->T1,
s
->maxval);
93
if
(
s
->T3 == 0 || reset_all)
94
s
->T3 =
iso_clip
(
FFMAX
(4, basic_t3 /
factor
+ 7 *
s
->near),
95
s
->T2,
s
->maxval);
96
}
97
98
if
(
s
->reset == 0 || reset_all)
99
s
->reset = 64;
100
ff_dlog
(
NULL
,
"[JPEG-LS RESET] T=%i,%i,%i\n"
,
s
->T1,
s
->T2,
s
->T3);
101
}
internal.h
JLSState
Definition:
jpegls.h:41
jpegls.h
s
#define s(width, name)
Definition:
cbs_vp9.c:257
NULL
#define NULL
Definition:
coverity.c:32
for
for(j=16;j >0;--j)
Definition:
h264pred_template.c:469
ff_dlog
#define ff_dlog(a,...)
Definition:
tableprint_vlc.h:29
FFMAX
#define FFMAX(a, b)
Definition:
common.h:94
state
static struct @314 state
FFMIN
#define FFMIN(a, b)
Definition:
common.h:96
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:31
ff_jpegls_reset_coding_parameters
void ff_jpegls_reset_coding_parameters(JLSState *s, int reset_all)
Calculate JPEG-LS codec values.
Definition:
jpegls.c:62
factor
static const int factor[16]
Definition:
vf_pp7.c:75
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:54
av_log2
int av_log2(unsigned v)
Definition:
intmath.c:26
Generated on Wed Aug 24 2022 21:31:20 for FFmpeg by
1.8.17