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