Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
acfb6b6c
Commit
acfb6b6c
authored
Jul 09, 2012
by
Kostya Shishkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mss3: split DSP functions that are used in MTS2(MSS4) into separate file
parent
82f82ccf
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
163 additions
and
92 deletions
+163
-92
Makefile
libavcodec/Makefile
+1
-1
mss3.c
libavcodec/mss3.c
+3
-91
mss34dsp.c
libavcodec/mss34dsp.c
+114
-0
mss34dsp.h
libavcodec/mss34dsp.h
+45
-0
No files found.
libavcodec/Makefile
View file @
acfb6b6c
...
@@ -292,7 +292,7 @@ OBJS-$(CONFIG_MSMPEG4V3_ENCODER) += msmpeg4.o msmpeg4enc.o msmpeg4data.o \
...
@@ -292,7 +292,7 @@ OBJS-$(CONFIG_MSMPEG4V3_ENCODER) += msmpeg4.o msmpeg4enc.o msmpeg4data.o \
h263dec.o
h263.o
ituh263dec.o
\
h263dec.o
h263.o
ituh263dec.o
\
mpeg4videodec.o
mpeg4videodec.o
OBJS-$(CONFIG_MSRLE_DECODER)
+=
msrle.o
msrledec.o
OBJS-$(CONFIG_MSRLE_DECODER)
+=
msrle.o
msrledec.o
OBJS-$(CONFIG_MSA1_DECODER)
+=
mss3.o
OBJS-$(CONFIG_MSA1_DECODER)
+=
mss3.o
mss34dsp.o
OBJS-$(CONFIG_MSS1_DECODER)
+=
mss1.o
OBJS-$(CONFIG_MSS1_DECODER)
+=
mss1.o
OBJS-$(CONFIG_MSVIDEO1_DECODER)
+=
msvideo1.o
OBJS-$(CONFIG_MSVIDEO1_DECODER)
+=
msvideo1.o
OBJS-$(CONFIG_MSZH_DECODER)
+=
lcldec.o
OBJS-$(CONFIG_MSZH_DECODER)
+=
lcldec.o
...
...
libavcodec/mss3.c
View file @
acfb6b6c
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include "avcodec.h"
#include "avcodec.h"
#include "bytestream.h"
#include "bytestream.h"
#include "mss34dsp.h"
#define HEADER_SIZE 27
#define HEADER_SIZE 27
...
@@ -119,28 +120,6 @@ typedef struct MSS3Context {
...
@@ -119,28 +120,6 @@ typedef struct MSS3Context {
int
hblock
[
16
*
16
];
int
hblock
[
16
*
16
];
}
MSS3Context
;
}
MSS3Context
;
static
const
uint8_t
mss3_luma_quant
[
64
]
=
{
16
,
11
,
10
,
16
,
24
,
40
,
51
,
61
,
12
,
12
,
14
,
19
,
26
,
58
,
60
,
55
,
14
,
13
,
16
,
24
,
40
,
57
,
69
,
56
,
14
,
17
,
22
,
29
,
51
,
87
,
80
,
62
,
18
,
22
,
37
,
56
,
68
,
109
,
103
,
77
,
24
,
35
,
55
,
64
,
81
,
104
,
113
,
92
,
49
,
64
,
78
,
87
,
103
,
121
,
120
,
101
,
72
,
92
,
95
,
98
,
112
,
100
,
103
,
99
};
static
const
uint8_t
mss3_chroma_quant
[
64
]
=
{
17
,
18
,
24
,
47
,
99
,
99
,
99
,
99
,
18
,
21
,
26
,
66
,
99
,
99
,
99
,
99
,
24
,
26
,
56
,
99
,
99
,
99
,
99
,
99
,
47
,
66
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
};
static
const
uint8_t
zigzag_scan
[
64
]
=
{
static
const
uint8_t
zigzag_scan
[
64
]
=
{
0
,
1
,
8
,
16
,
9
,
2
,
3
,
10
,
0
,
1
,
8
,
16
,
9
,
2
,
3
,
10
,
17
,
24
,
32
,
25
,
18
,
11
,
4
,
5
,
17
,
24
,
32
,
25
,
18
,
11
,
4
,
5
,
...
@@ -586,58 +565,6 @@ static int decode_dct(RangeCoder *c, DCTBlockCoder *bc, int *block,
...
@@ -586,58 +565,6 @@ static int decode_dct(RangeCoder *c, DCTBlockCoder *bc, int *block,
return
pos
==
64
?
0
:
-
1
;
return
pos
==
64
?
0
:
-
1
;
}
}
#define DCT_TEMPLATE(blk, step, SOP, shift) \
const int t0 = -39409 * blk[7 * step] - 58980 * blk[1 * step]; \
const int t1 = 39410 * blk[1 * step] - 58980 * blk[7 * step]; \
const int t2 = -33410 * blk[5 * step] - 167963 * blk[3 * step]; \
const int t3 = 33410 * blk[3 * step] - 167963 * blk[5 * step]; \
const int t4 = blk[3 * step] + blk[7 * step]; \
const int t5 = blk[1 * step] + blk[5 * step]; \
const int t6 = 77062 * t4 + 51491 * t5; \
const int t7 = 77062 * t5 - 51491 * t4; \
const int t8 = 35470 * blk[2 * step] - 85623 * blk[6 * step]; \
const int t9 = 35470 * blk[6 * step] + 85623 * blk[2 * step]; \
const int tA = SOP(blk[0 * step] - blk[4 * step]); \
const int tB = SOP(blk[0 * step] + blk[4 * step]); \
\
blk[0 * step] = ( t1 + t6 + t9 + tB) >> shift; \
blk[1 * step] = ( t3 + t7 + t8 + tA) >> shift; \
blk[2 * step] = ( t2 + t6 - t8 + tA) >> shift; \
blk[3 * step] = ( t0 + t7 - t9 + tB) >> shift; \
blk[4 * step] = (-(t0 + t7) - t9 + tB) >> shift; \
blk[5 * step] = (-(t2 + t6) - t8 + tA) >> shift; \
blk[6 * step] = (-(t3 + t7) + t8 + tA) >> shift; \
blk[7 * step] = (-(t1 + t6) + t9 + tB) >> shift; \
#define SOP_ROW(a) ((a) << 16) + 0x2000
#define SOP_COL(a) ((a + 32) << 16)
static
void
dct_put
(
uint8_t
*
dst
,
int
stride
,
int
*
block
)
{
int
i
,
j
;
int
*
ptr
;
ptr
=
block
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
DCT_TEMPLATE
(
ptr
,
1
,
SOP_ROW
,
13
);
ptr
+=
8
;
}
ptr
=
block
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
DCT_TEMPLATE
(
ptr
,
8
,
SOP_COL
,
22
);
ptr
++
;
}
ptr
=
block
;
for
(
j
=
0
;
j
<
8
;
j
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
dst
[
i
]
=
av_clip_uint8
(
ptr
[
i
]
+
128
);
dst
+=
stride
;
ptr
+=
8
;
}
}
static
void
decode_dct_block
(
RangeCoder
*
c
,
DCTBlockCoder
*
bc
,
static
void
decode_dct_block
(
RangeCoder
*
c
,
DCTBlockCoder
*
bc
,
uint8_t
*
dst
,
int
stride
,
int
block_size
,
uint8_t
*
dst
,
int
stride
,
int
block_size
,
int
*
block
,
int
mb_x
,
int
mb_y
)
int
*
block
,
int
mb_x
,
int
mb_y
)
...
@@ -655,7 +582,7 @@ static void decode_dct_block(RangeCoder *c, DCTBlockCoder *bc,
...
@@ -655,7 +582,7 @@ static void decode_dct_block(RangeCoder *c, DCTBlockCoder *bc,
c
->
got_error
=
1
;
c
->
got_error
=
1
;
return
;
return
;
}
}
dct_put
(
dst
+
i
*
8
,
stride
,
block
);
ff_mss34_
dct_put
(
dst
+
i
*
8
,
stride
,
block
);
}
}
dst
+=
8
*
stride
;
dst
+=
8
*
stride
;
}
}
...
@@ -702,14 +629,6 @@ static void decode_haar_block(RangeCoder *c, HaarBlockCoder *hc,
...
@@ -702,14 +629,6 @@ static void decode_haar_block(RangeCoder *c, HaarBlockCoder *hc,
}
}
}
}
static
void
gen_quant_mat
(
uint16_t
*
qmat
,
const
uint8_t
*
ref
,
float
scale
)
{
int
i
;
for
(
i
=
0
;
i
<
64
;
i
++
)
qmat
[
i
]
=
(
uint16_t
)(
ref
[
i
]
*
scale
+
50
.
0
)
/
100
;
}
static
void
reset_coders
(
MSS3Context
*
ctx
,
int
quality
)
static
void
reset_coders
(
MSS3Context
*
ctx
,
int
quality
)
{
{
int
i
,
j
;
int
i
,
j
;
...
@@ -726,15 +645,8 @@ static void reset_coders(MSS3Context *ctx, int quality)
...
@@ -726,15 +645,8 @@ static void reset_coders(MSS3Context *ctx, int quality)
for
(
j
=
0
;
j
<
125
;
j
++
)
for
(
j
=
0
;
j
<
125
;
j
++
)
model_reset
(
&
ctx
->
image_coder
[
i
].
vq_model
[
j
]);
model_reset
(
&
ctx
->
image_coder
[
i
].
vq_model
[
j
]);
if
(
ctx
->
dct_coder
[
i
].
quality
!=
quality
)
{
if
(
ctx
->
dct_coder
[
i
].
quality
!=
quality
)
{
float
scale
;
ctx
->
dct_coder
[
i
].
quality
=
quality
;
ctx
->
dct_coder
[
i
].
quality
=
quality
;
if
(
quality
>
50
)
ff_mss34_gen_quant_mat
(
ctx
->
dct_coder
[
i
].
qmat
,
quality
,
!
i
);
scale
=
200
.
0
f
-
2
*
quality
;
else
scale
=
5000
.
0
f
/
quality
;
gen_quant_mat
(
ctx
->
dct_coder
[
i
].
qmat
,
i
?
mss3_chroma_quant
:
mss3_luma_quant
,
scale
);
}
}
memset
(
ctx
->
dct_coder
[
i
].
prev_dc
,
0
,
memset
(
ctx
->
dct_coder
[
i
].
prev_dc
,
0
,
sizeof
(
*
ctx
->
dct_coder
[
i
].
prev_dc
)
*
sizeof
(
*
ctx
->
dct_coder
[
i
].
prev_dc
)
*
...
...
libavcodec/mss34dsp.c
0 → 100644
View file @
acfb6b6c
/*
* Common stuff for some Microsoft Screen codecs
* Copyright (C) 2012 Konstantin Shishkov
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdint.h>
#include "libavutil/common.h"
#include "mss34dsp.h"
static
const
uint8_t
luma_quant
[
64
]
=
{
16
,
11
,
10
,
16
,
24
,
40
,
51
,
61
,
12
,
12
,
14
,
19
,
26
,
58
,
60
,
55
,
14
,
13
,
16
,
24
,
40
,
57
,
69
,
56
,
14
,
17
,
22
,
29
,
51
,
87
,
80
,
62
,
18
,
22
,
37
,
56
,
68
,
109
,
103
,
77
,
24
,
35
,
55
,
64
,
81
,
104
,
113
,
92
,
49
,
64
,
78
,
87
,
103
,
121
,
120
,
101
,
72
,
92
,
95
,
98
,
112
,
100
,
103
,
99
};
static
const
uint8_t
chroma_quant
[
64
]
=
{
17
,
18
,
24
,
47
,
99
,
99
,
99
,
99
,
18
,
21
,
26
,
66
,
99
,
99
,
99
,
99
,
24
,
26
,
56
,
99
,
99
,
99
,
99
,
99
,
47
,
66
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
,
99
};
void
ff_mss34_gen_quant_mat
(
uint16_t
*
qmat
,
int
quality
,
int
luma
)
{
int
i
;
const
uint8_t
*
qsrc
=
luma
?
luma_quant
:
chroma_quant
;
if
(
quality
>=
50
)
{
int
scale
=
200
-
2
*
quality
;
for
(
i
=
0
;
i
<
64
;
i
++
)
qmat
[
i
]
=
(
qsrc
[
i
]
*
scale
+
50
)
/
100
;
}
else
{
for
(
i
=
0
;
i
<
64
;
i
++
)
qmat
[
i
]
=
(
5000
*
qsrc
[
i
]
/
quality
+
50
)
/
100
;
}
}
#define DCT_TEMPLATE(blk, step, SOP, shift) \
const int t0 = -39409 * blk[7 * step] - 58980 * blk[1 * step]; \
const int t1 = 39410 * blk[1 * step] - 58980 * blk[7 * step]; \
const int t2 = -33410 * blk[5 * step] - 167963 * blk[3 * step]; \
const int t3 = 33410 * blk[3 * step] - 167963 * blk[5 * step]; \
const int t4 = blk[3 * step] + blk[7 * step]; \
const int t5 = blk[1 * step] + blk[5 * step]; \
const int t6 = 77062 * t4 + 51491 * t5; \
const int t7 = 77062 * t5 - 51491 * t4; \
const int t8 = 35470 * blk[2 * step] - 85623 * blk[6 * step]; \
const int t9 = 35470 * blk[6 * step] + 85623 * blk[2 * step]; \
const int tA = SOP(blk[0 * step] - blk[4 * step]); \
const int tB = SOP(blk[0 * step] + blk[4 * step]); \
\
blk[0 * step] = ( t1 + t6 + t9 + tB) >> shift; \
blk[1 * step] = ( t3 + t7 + t8 + tA) >> shift; \
blk[2 * step] = ( t2 + t6 - t8 + tA) >> shift; \
blk[3 * step] = ( t0 + t7 - t9 + tB) >> shift; \
blk[4 * step] = (-(t0 + t7) - t9 + tB) >> shift; \
blk[5 * step] = (-(t2 + t6) - t8 + tA) >> shift; \
blk[6 * step] = (-(t3 + t7) + t8 + tA) >> shift; \
blk[7 * step] = (-(t1 + t6) + t9 + tB) >> shift; \
#define SOP_ROW(a) ((a) << 16) + 0x2000
#define SOP_COL(a) ((a + 32) << 16)
void
ff_mss34_dct_put
(
uint8_t
*
dst
,
int
stride
,
int
*
block
)
{
int
i
,
j
;
int
*
ptr
;
ptr
=
block
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
DCT_TEMPLATE
(
ptr
,
1
,
SOP_ROW
,
13
);
ptr
+=
8
;
}
ptr
=
block
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
DCT_TEMPLATE
(
ptr
,
8
,
SOP_COL
,
22
);
ptr
++
;
}
ptr
=
block
;
for
(
j
=
0
;
j
<
8
;
j
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
dst
[
i
]
=
av_clip_uint8
(
ptr
[
i
]
+
128
);
dst
+=
stride
;
ptr
+=
8
;
}
}
libavcodec/mss34dsp.h
0 → 100644
View file @
acfb6b6c
/*
* Common stuff for some Microsoft Screen codecs
* Copyright (C) 2012 Konstantin Shishkov
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_MSS34DSP_H
#define AVCODEC_MSS34DSP_H
#include <stdint.h>
/**
* Generate quantisation matrix for given quality.
*
* @param qmat destination matrix
* @param quality quality setting (1-100)
* @param luma generate quantisation matrix for luma or chroma
*/
void
ff_mss34_gen_quant_mat
(
uint16_t
*
qmat
,
int
quality
,
int
luma
);
/**
* Transform and output DCT block.
*
* @param dst output plane
* @param stride output plane stride
* @param block block to transform and output
*/
void
ff_mss34_dct_put
(
uint8_t
*
dst
,
int
stride
,
int
*
block
);
#endif
/* AVCODEC_MSS34DSP_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment