FFmpeg
4.4.6
libavcodec
mss12.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012 Konstantin Shishkov
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
/**
22
* @file
23
* Common header for Microsoft Screen 1 and 2
24
*/
25
26
#ifndef AVCODEC_MSS12_H
27
#define AVCODEC_MSS12_H
28
29
#include "
libavutil/intreadwrite.h
"
30
#include "
avcodec.h
"
31
#include "
get_bits.h
"
32
#include "
bytestream.h
"
33
34
#define MODEL_MIN_SYMS 2
35
#define MODEL_MAX_SYMS 256
36
#define THRESH_ADAPTIVE -1
37
#define THRESH_LOW 15
38
#define THRESH_HIGH 50
39
40
typedef
struct
Model
{
41
int16_t
cum_prob
[
MODEL_MAX_SYMS
+ 1];
42
int16_t
weights
[
MODEL_MAX_SYMS
+ 1];
43
uint8_t
idx2sym
[
MODEL_MAX_SYMS
+ 1];
44
int
num_syms
;
45
int
thr_weight
,
threshold
;
46
}
Model
;
47
48
typedef
struct
ArithCoder
{
49
int
low
,
high
,
value
;
50
int
overread
;
51
#define MAX_OVERREAD 16
52
union
{
53
GetBitContext
*
gb
;
54
GetByteContext
*
gB
;
55
}
gbc
;
56
int
(*
get_model_sym
)(
struct
ArithCoder
*
c
,
Model
*m);
57
int
(*
get_number
) (
struct
ArithCoder
*
c
,
int
n);
58
}
ArithCoder
;
59
60
typedef
struct
PixContext
{
61
int
cache_size
,
num_syms
;
62
uint8_t
cache
[12];
63
Model
cache_model
,
full_model
;
64
Model
sec_models
[15][4];
65
int
special_initial_cache
;
66
}
PixContext
;
67
68
struct
MSS12Context
;
69
70
typedef
struct
SliceContext
{
71
struct
MSS12Context
*
c
;
72
Model
intra_region
,
inter_region
;
73
Model
pivot
,
edge_mode
,
split_mode
;
74
PixContext
intra_pix_ctx
,
inter_pix_ctx
;
75
}
SliceContext
;
76
77
typedef
struct
MSS12Context
{
78
AVCodecContext
*
avctx
;
79
uint32_t
pal
[256];
80
uint8_t
*
pal_pic
;
81
uint8_t
*
last_pal_pic
;
82
ptrdiff_t
pal_stride
;
83
uint8_t
*
mask
;
84
ptrdiff_t
mask_stride
;
85
uint8_t
*
rgb_pic
;
86
uint8_t
*
last_rgb_pic
;
87
ptrdiff_t
rgb_stride
;
88
int
free_colours
;
89
int
keyframe
;
90
int
mvX
,
mvY
;
91
int
corrupted
;
92
int
slice_split
;
93
int
full_model_syms
;
94
}
MSS12Context
;
95
96
int
ff_mss12_decode_rect
(
SliceContext
*
ctx
,
ArithCoder
*acoder,
97
int
x,
int
y,
int
width
,
int
height
);
98
void
ff_mss12_model_update
(
Model
*m,
int
val
);
99
void
ff_mss12_slicecontext_reset
(
SliceContext
*sc);
100
int
ff_mss12_decode_init
(
MSS12Context
*
c
,
int
version
,
101
SliceContext
*sc1,
SliceContext
*sc2);
102
int
ff_mss12_decode_end
(
MSS12Context
*
ctx
);
103
104
#define ARITH_GET_BIT(prefix) \
105
static int prefix ## _get_bit(ArithCoder *c) \
106
{ \
107
int range = c->high - c->low + 1; \
108
int bit = 2 * c->value - c->low >= c->high; \
109
\
110
if (bit) \
111
c->low += range >> 1; \
112
else \
113
c->high = c->low + (range >> 1) - 1; \
114
\
115
prefix ## _normalise(c); \
116
\
117
return bit; \
118
}
119
120
#define ARITH_GET_MODEL_SYM(prefix) \
121
static int prefix ## _get_model_sym(ArithCoder *c, Model *m) \
122
{ \
123
int idx, val; \
124
\
125
idx = prefix ## _get_prob(c, m->cum_prob); \
126
\
127
val = m->idx2sym[idx]; \
128
ff_mss12_model_update(m, idx); \
129
\
130
prefix ## _normalise(c); \
131
\
132
return val; \
133
}
134
135
#endif
/* AVCODEC_MSS12_H */
val
static double val(void *priv, double ch)
Definition:
aeval.c:76
uint8_t
uint8_t
Definition:
audio_convert.c:194
avcodec.h
Libavcodec external API header.
bytestream.h
int
int
Definition:
ffmpeg_filter.c:170
get_bits.h
bitstream reader API header.
intreadwrite.h
version
version
Definition:
libkvazaar.c:326
MODEL_MAX_SYMS
#define MODEL_MAX_SYMS
Definition:
mss12.h:35
ff_mss12_decode_end
int ff_mss12_decode_end(MSS12Context *ctx)
Definition:
mss12.c:692
ff_mss12_decode_rect
int ff_mss12_decode_rect(SliceContext *ctx, ArithCoder *acoder, int x, int y, int width, int height)
Definition:
mss12.c:542
ff_mss12_model_update
void ff_mss12_model_update(Model *m, int val)
Definition:
mss12.c:95
ff_mss12_decode_init
int ff_mss12_decode_init(MSS12Context *c, int version, SliceContext *sc1, SliceContext *sc2)
Definition:
mss12.c:580
ff_mss12_slicecontext_reset
void ff_mss12_slicecontext_reset(SliceContext *sc)
Definition:
mss12.c:436
AVCodecContext
main external API structure.
Definition:
avcodec.h:536
ArithCoder
Definition:
dstdec.c:57
ArithCoder::gB
GetByteContext * gB
Definition:
mss12.h:54
ArithCoder::gbc
union ArithCoder::@101 gbc
ArithCoder::overread
int overread
Definition:
mss12.h:50
ArithCoder::low
int low
Definition:
mss12.h:49
ArithCoder::high
int high
Definition:
mss12.h:49
ArithCoder::get_number
int(* get_number)(struct ArithCoder *c, int n)
Definition:
mss12.h:57
ArithCoder::gb
GetBitContext * gb
Definition:
mss12.h:53
ArithCoder::c
unsigned int c
Definition:
dstdec.c:59
ArithCoder::value
int value
Definition:
mss12.h:49
ArithCoder::get_model_sym
int(* get_model_sym)(struct ArithCoder *c, Model *m)
Definition:
mss12.h:56
GetBitContext
Definition:
get_bits.h:61
GetByteContext
Definition:
bytestream.h:33
MSS12Context
Definition:
mss12.h:77
MSS12Context::last_pal_pic
uint8_t * last_pal_pic
Definition:
mss12.h:81
MSS12Context::pal
uint32_t pal[256]
Definition:
mss12.h:79
MSS12Context::pal_pic
uint8_t * pal_pic
Definition:
mss12.h:80
MSS12Context::mvX
int mvX
Definition:
mss12.h:90
MSS12Context::slice_split
int slice_split
Definition:
mss12.h:92
MSS12Context::mvY
int mvY
Definition:
mss12.h:90
MSS12Context::free_colours
int free_colours
Definition:
mss12.h:88
MSS12Context::full_model_syms
int full_model_syms
Definition:
mss12.h:93
MSS12Context::pal_stride
ptrdiff_t pal_stride
Definition:
mss12.h:82
MSS12Context::last_rgb_pic
uint8_t * last_rgb_pic
Definition:
mss12.h:86
MSS12Context::mask_stride
ptrdiff_t mask_stride
Definition:
mss12.h:84
MSS12Context::rgb_pic
uint8_t * rgb_pic
Definition:
mss12.h:85
MSS12Context::avctx
AVCodecContext * avctx
Definition:
mss12.h:78
MSS12Context::corrupted
int corrupted
Definition:
mss12.h:91
MSS12Context::mask
uint8_t * mask
Definition:
mss12.h:83
MSS12Context::keyframe
int keyframe
Definition:
mss12.h:89
MSS12Context::rgb_stride
ptrdiff_t rgb_stride
Definition:
mss12.h:87
Model
Definition:
mss12.h:40
Model::cum_prob
int16_t cum_prob[MODEL_MAX_SYMS+1]
Definition:
mss12.h:41
Model::idx2sym
uint8_t idx2sym[MODEL_MAX_SYMS+1]
Definition:
mss12.h:43
Model::thr_weight
int thr_weight
Definition:
mss12.h:45
Model::weights
int16_t weights[MODEL_MAX_SYMS+1]
Definition:
mss12.h:42
Model::threshold
int threshold
Definition:
mss12.h:45
Model::num_syms
int num_syms
Definition:
mss12.h:44
PixContext
Definition:
mss12.h:60
PixContext::special_initial_cache
int special_initial_cache
Definition:
mss12.h:65
PixContext::cache
uint8_t cache[12]
Definition:
mss12.h:62
PixContext::cache_model
Model cache_model
Definition:
mss12.h:63
PixContext::full_model
Model full_model
Definition:
mss12.h:63
PixContext::num_syms
int num_syms
Definition:
mss12.h:61
PixContext::cache_size
int cache_size
Definition:
mss12.h:61
PixContext::sec_models
Model sec_models[15][4]
Definition:
mss12.h:64
SliceContext
Definition:
mss12.h:70
SliceContext::inter_pix_ctx
PixContext inter_pix_ctx
Definition:
mss12.h:74
SliceContext::split_mode
Model split_mode
Definition:
mss12.h:73
SliceContext::edge_mode
Model edge_mode
Definition:
mss12.h:73
SliceContext::pivot
Model pivot
Definition:
mss12.h:73
SliceContext::inter_region
Model inter_region
Definition:
mss12.h:72
SliceContext::intra_pix_ctx
PixContext intra_pix_ctx
Definition:
mss12.h:74
SliceContext::c
struct MSS12Context * c
Definition:
mss12.h:71
SliceContext::intra_region
Model intra_region
Definition:
mss12.h:72
ctx
AVFormatContext * ctx
Definition:
movenc.c:48
height
#define height
width
#define width
c
static double c[64]
Definition:
vsrc_mptestsrc.c:92
Generated on Sun May 18 2025 06:24:34 for FFmpeg by
1.9.1