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
8835c2c8
Commit
8835c2c8
authored
Dec 10, 2011
by
Kostya Shishkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
prores: move data shared between decoder and encoder to common file
parent
3ec623c2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
120 additions
and
62 deletions
+120
-62
Makefile
libavcodec/Makefile
+1
-1
proresdata.c
libavcodec/proresdata.c
+72
-0
proresdata.h
libavcodec/proresdata.h
+39
-0
proresdec.c
libavcodec/proresdec.c
+8
-61
No files found.
libavcodec/Makefile
View file @
8835c2c8
...
...
@@ -301,7 +301,7 @@ OBJS-$(CONFIG_PNG_DECODER) += png.o pngdec.o pngdsp.o
OBJS-$(CONFIG_PNG_ENCODER)
+=
png.o
pngenc.o
OBJS-$(CONFIG_PPM_DECODER)
+=
pnmdec.o
pnm.o
OBJS-$(CONFIG_PPM_ENCODER)
+=
pnmenc.o
pnm.o
OBJS-$(CONFIG_PRORES_DECODER)
+=
proresdec.o
proresdsp.o
OBJS-$(CONFIG_PRORES_DECODER)
+=
proresdec.o
proresd
ata.o
proresd
sp.o
OBJS-$(CONFIG_PTX_DECODER)
+=
ptx.o
OBJS-$(CONFIG_QCELP_DECODER)
+=
qcelpdec.o
celp_math.o
\
celp_filters.o
acelp_vectors.o
\
...
...
libavcodec/proresdata.c
0 → 100644
View file @
8835c2c8
/*
* Apple ProRes compatible decoder
*
* Copyright (c) 2010-2011 Maxim Poliakovski
*
* 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 "proresdata.h"
const
uint8_t
ff_prores_progressive_scan
[
64
]
=
{
0
,
1
,
8
,
9
,
2
,
3
,
10
,
11
,
16
,
17
,
24
,
25
,
18
,
19
,
26
,
27
,
4
,
5
,
12
,
20
,
13
,
6
,
7
,
14
,
21
,
28
,
29
,
22
,
15
,
23
,
30
,
31
,
32
,
33
,
40
,
48
,
41
,
34
,
35
,
42
,
49
,
56
,
57
,
50
,
43
,
36
,
37
,
44
,
51
,
58
,
59
,
52
,
45
,
38
,
39
,
46
,
53
,
60
,
61
,
54
,
47
,
55
,
62
,
63
};
const
uint8_t
ff_prores_interlaced_scan
[
64
]
=
{
0
,
8
,
1
,
9
,
16
,
24
,
17
,
25
,
2
,
10
,
3
,
11
,
18
,
26
,
19
,
27
,
32
,
40
,
33
,
34
,
41
,
48
,
56
,
49
,
42
,
35
,
43
,
50
,
57
,
58
,
51
,
59
,
4
,
12
,
5
,
6
,
13
,
20
,
28
,
21
,
14
,
7
,
15
,
22
,
29
,
36
,
44
,
37
,
30
,
23
,
31
,
38
,
45
,
52
,
60
,
53
,
46
,
39
,
47
,
54
,
61
,
62
,
55
,
63
};
const
uint8_t
ff_prores_dc_codebook
[
4
]
=
{
0x04
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 0
0x28
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 0
0x4D
,
// rice_order = 2, exp_golomb_order = 3, switch_bits = 1
0x70
// rice_order = 3, exp_golomb_order = 4, switch_bits = 0
};
const
uint8_t
ff_prores_ac_codebook
[
7
]
=
{
0x04
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 0
0x28
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 0
0x4C
,
// rice_order = 2, exp_golomb_order = 3, switch_bits = 0
0x05
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 1
0x29
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 1
0x06
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 2
0x0A
,
// rice_order = 0, exp_golomb_order = 2, switch_bits = 2
};
/**
* Lookup tables for adaptive switching between codebooks
* according with previous run/level value.
*/
const
uint8_t
ff_prores_run_to_cb_index
[
16
]
=
{
5
,
5
,
3
,
3
,
0
,
4
,
4
,
4
,
4
,
1
,
1
,
1
,
1
,
1
,
1
,
2
};
const
uint8_t
ff_prores_lev_to_cb_index
[
10
]
=
{
0
,
6
,
3
,
5
,
0
,
1
,
1
,
1
,
1
,
2
};
libavcodec/proresdata.h
0 → 100644
View file @
8835c2c8
/*
* Apple ProRes compatible decoder
*
* Copyright (c) 2010-2011 Maxim Poliakovski
*
* 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_PRORESDATA_H
#define AVCODEC_PRORESDATA_H
#include <stdint.h>
#define FRAME_ID MKBETAG('i', 'c', 'p', 'f')
extern
const
uint8_t
ff_prores_progressive_scan
[
64
];
extern
const
uint8_t
ff_prores_interlaced_scan
[
64
];
#define FIRST_DC_CB 0xB8 // rice_order = 5, exp_golomb_order = 6, switch_bits = 0
extern
const
uint8_t
ff_prores_dc_codebook
[
4
];
extern
const
uint8_t
ff_prores_ac_codebook
[
7
];
extern
const
uint8_t
ff_prores_run_to_cb_index
[
16
];
extern
const
uint8_t
ff_prores_lev_to_cb_index
[
10
];
#endif
/* AVCODEC_PRORESDATA_H */
libavcodec/proresdec.c
View file @
8835c2c8
...
...
@@ -34,6 +34,7 @@
#include "libavutil/intmath.h"
#include "avcodec.h"
#include "proresdata.h"
#include "proresdsp.h"
#include "get_bits.h"
...
...
@@ -75,29 +76,6 @@ typedef struct {
}
ProresContext
;
static
const
uint8_t
progressive_scan
[
64
]
=
{
0
,
1
,
8
,
9
,
2
,
3
,
10
,
11
,
16
,
17
,
24
,
25
,
18
,
19
,
26
,
27
,
4
,
5
,
12
,
20
,
13
,
6
,
7
,
14
,
21
,
28
,
29
,
22
,
15
,
23
,
30
,
31
,
32
,
33
,
40
,
48
,
41
,
34
,
35
,
42
,
49
,
56
,
57
,
50
,
43
,
36
,
37
,
44
,
51
,
58
,
59
,
52
,
45
,
38
,
39
,
46
,
53
,
60
,
61
,
54
,
47
,
55
,
62
,
63
};
static
const
uint8_t
interlaced_scan
[
64
]
=
{
0
,
8
,
1
,
9
,
16
,
24
,
17
,
25
,
2
,
10
,
3
,
11
,
18
,
26
,
19
,
27
,
32
,
40
,
33
,
34
,
41
,
48
,
56
,
49
,
42
,
35
,
43
,
50
,
57
,
58
,
51
,
59
,
4
,
12
,
5
,
6
,
13
,
20
,
28
,
21
,
14
,
7
,
15
,
22
,
29
,
36
,
44
,
37
,
30
,
23
,
31
,
38
,
45
,
52
,
60
,
53
,
46
,
39
,
47
,
54
,
61
,
62
,
55
,
63
};
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
)
{
ProresContext
*
ctx
=
avctx
->
priv_data
;
...
...
@@ -175,10 +153,10 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
if
(
ctx
->
scantable_type
!=
ctx
->
frame_type
)
{
if
(
!
ctx
->
frame_type
)
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
progressive_scan
);
ff_prores_
progressive_scan
);
else
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
interlaced_scan
);
ff_prores_
interlaced_scan
);
ctx
->
scantable_type
=
ctx
->
frame_type
;
}
...
...
@@ -352,16 +330,6 @@ static inline int decode_vlc_codeword(GetBitContext *gb, uint8_t codebook)
#define LSB2SIGN(x) (-((x) & 1))
#define TOSIGNED(x) (((x) >> 1) ^ LSB2SIGN(x))
#define FIRST_DC_CB 0xB8 // rice_order = 5, exp_golomb_order = 6, switch_bits = 0
static
uint8_t
dc_codebook
[
4
]
=
{
0x04
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 0
0x28
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 0
0x4D
,
// rice_order = 2, exp_golomb_order = 3, switch_bits = 1
0x70
// rice_order = 3, exp_golomb_order = 4, switch_bits = 0
};
/**
* Decode DC coefficients for all blocks in a slice.
*/
...
...
@@ -380,7 +348,7 @@ static inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
delta
=
3
;
for
(
i
=
1
;
i
<
nblocks
;
i
++
,
out
+=
64
)
{
code
=
decode_vlc_codeword
(
gb
,
dc_codebook
[
FFMIN
(
FFABS
(
delta
),
3
)]);
code
=
decode_vlc_codeword
(
gb
,
ff_prores_
dc_codebook
[
FFMIN
(
FFABS
(
delta
),
3
)]);
sign
=
-
(((
delta
>>
15
)
&
1
)
^
(
code
&
1
));
delta
=
(((
code
+
1
)
>>
1
)
^
sign
)
-
sign
;
...
...
@@ -390,26 +358,6 @@ static inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
}
static
uint8_t
ac_codebook
[
7
]
=
{
0x04
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 0
0x28
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 0
0x4C
,
// rice_order = 2, exp_golomb_order = 3, switch_bits = 0
0x05
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 1
0x29
,
// rice_order = 1, exp_golomb_order = 2, switch_bits = 1
0x06
,
// rice_order = 0, exp_golomb_order = 1, switch_bits = 2
0x0A
,
// rice_order = 0, exp_golomb_order = 2, switch_bits = 2
};
/**
* Lookup tables for adaptive switching between codebooks
* according with previous run/level value.
*/
static
uint8_t
run_to_cb_index
[
16
]
=
{
5
,
5
,
3
,
3
,
0
,
4
,
4
,
4
,
4
,
1
,
1
,
1
,
1
,
1
,
1
,
2
};
static
uint8_t
lev_to_cb_index
[
10
]
=
{
0
,
6
,
3
,
5
,
0
,
1
,
1
,
1
,
1
,
2
};
/**
* Decode AC coefficients for all blocks in a slice.
*/
...
...
@@ -429,20 +377,20 @@ static inline void decode_ac_coeffs(GetBitContext *gb, DCTELEM *out,
block_mask
=
blocks_per_slice
-
1
;
for
(
pos
=
blocks_per_slice
-
1
;
pos
<
max_coeffs
;)
{
run_cb_index
=
run_to_cb_index
[
FFMIN
(
run
,
15
)];
lev_cb_index
=
lev_to_cb_index
[
FFMIN
(
level
,
9
)];
run_cb_index
=
ff_prores_
run_to_cb_index
[
FFMIN
(
run
,
15
)];
lev_cb_index
=
ff_prores_
lev_to_cb_index
[
FFMIN
(
level
,
9
)];
bits_left
=
get_bits_left
(
gb
);
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
return
;
run
=
decode_vlc_codeword
(
gb
,
ac_codebook
[
run_cb_index
]);
run
=
decode_vlc_codeword
(
gb
,
ff_prores_
ac_codebook
[
run_cb_index
]);
bits_left
=
get_bits_left
(
gb
);
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
return
;
level
=
decode_vlc_codeword
(
gb
,
ac_codebook
[
lev_cb_index
])
+
1
;
level
=
decode_vlc_codeword
(
gb
,
ff_prores_
ac_codebook
[
lev_cb_index
])
+
1
;
pos
+=
run
+
1
;
if
(
pos
>=
max_coeffs
)
...
...
@@ -629,7 +577,6 @@ static int decode_picture(ProresContext *ctx, int pic_num,
}
#define FRAME_ID MKBETAG('i', 'c', 'p', 'f')
#define MOVE_DATA_PTR(nbytes) buf += (nbytes); buf_size -= (nbytes)
static
int
decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
...
...
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