Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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
Show 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
...
@@ -301,7 +301,7 @@ OBJS-$(CONFIG_PNG_DECODER) += png.o pngdec.o pngdsp.o
OBJS-$(CONFIG_PNG_ENCODER)
+=
png.o
pngenc.o
OBJS-$(CONFIG_PNG_ENCODER)
+=
png.o
pngenc.o
OBJS-$(CONFIG_PPM_DECODER)
+=
pnmdec.o
pnm.o
OBJS-$(CONFIG_PPM_DECODER)
+=
pnmdec.o
pnm.o
OBJS-$(CONFIG_PPM_ENCODER)
+=
pnmenc.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_PTX_DECODER)
+=
ptx.o
OBJS-$(CONFIG_QCELP_DECODER)
+=
qcelpdec.o
celp_math.o
\
OBJS-$(CONFIG_QCELP_DECODER)
+=
qcelpdec.o
celp_math.o
\
celp_filters.o
acelp_vectors.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 @@
...
@@ -34,6 +34,7 @@
#include "libavutil/intmath.h"
#include "libavutil/intmath.h"
#include "avcodec.h"
#include "avcodec.h"
#include "proresdata.h"
#include "proresdsp.h"
#include "proresdsp.h"
#include "get_bits.h"
#include "get_bits.h"
...
@@ -75,29 +76,6 @@ typedef struct {
...
@@ -75,29 +76,6 @@ typedef struct {
}
ProresContext
;
}
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
)
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
)
{
{
ProresContext
*
ctx
=
avctx
->
priv_data
;
ProresContext
*
ctx
=
avctx
->
priv_data
;
...
@@ -175,10 +153,10 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
...
@@ -175,10 +153,10 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
if
(
ctx
->
scantable_type
!=
ctx
->
frame_type
)
{
if
(
ctx
->
scantable_type
!=
ctx
->
frame_type
)
{
if
(
!
ctx
->
frame_type
)
if
(
!
ctx
->
frame_type
)
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
progressive_scan
);
ff_prores_
progressive_scan
);
else
else
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
ff_init_scantable
(
ctx
->
dsp
.
idct_permutation
,
&
ctx
->
scantable
,
interlaced_scan
);
ff_prores_
interlaced_scan
);
ctx
->
scantable_type
=
ctx
->
frame_type
;
ctx
->
scantable_type
=
ctx
->
frame_type
;
}
}
...
@@ -352,16 +330,6 @@ static inline int decode_vlc_codeword(GetBitContext *gb, uint8_t codebook)
...
@@ -352,16 +330,6 @@ static inline int decode_vlc_codeword(GetBitContext *gb, uint8_t codebook)
#define LSB2SIGN(x) (-((x) & 1))
#define LSB2SIGN(x) (-((x) & 1))
#define TOSIGNED(x) (((x) >> 1) ^ LSB2SIGN(x))
#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.
* Decode DC coefficients for all blocks in a slice.
*/
*/
...
@@ -380,7 +348,7 @@ static inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
...
@@ -380,7 +348,7 @@ static inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
delta
=
3
;
delta
=
3
;
for
(
i
=
1
;
i
<
nblocks
;
i
++
,
out
+=
64
)
{
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
));
sign
=
-
(((
delta
>>
15
)
&
1
)
^
(
code
&
1
));
delta
=
(((
code
+
1
)
>>
1
)
^
sign
)
-
sign
;
delta
=
(((
code
+
1
)
>>
1
)
^
sign
)
-
sign
;
...
@@ -390,26 +358,6 @@ static inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
...
@@ -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.
* Decode AC coefficients for all blocks in a slice.
*/
*/
...
@@ -429,20 +377,20 @@ static inline void decode_ac_coeffs(GetBitContext *gb, DCTELEM *out,
...
@@ -429,20 +377,20 @@ static inline void decode_ac_coeffs(GetBitContext *gb, DCTELEM *out,
block_mask
=
blocks_per_slice
-
1
;
block_mask
=
blocks_per_slice
-
1
;
for
(
pos
=
blocks_per_slice
-
1
;
pos
<
max_coeffs
;)
{
for
(
pos
=
blocks_per_slice
-
1
;
pos
<
max_coeffs
;)
{
run_cb_index
=
run_to_cb_index
[
FFMIN
(
run
,
15
)];
run_cb_index
=
ff_prores_
run_to_cb_index
[
FFMIN
(
run
,
15
)];
lev_cb_index
=
lev_to_cb_index
[
FFMIN
(
level
,
9
)];
lev_cb_index
=
ff_prores_
lev_to_cb_index
[
FFMIN
(
level
,
9
)];
bits_left
=
get_bits_left
(
gb
);
bits_left
=
get_bits_left
(
gb
);
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
return
;
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
);
bits_left
=
get_bits_left
(
gb
);
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
if
(
bits_left
<=
0
||
(
bits_left
<=
8
&&
!
show_bits
(
gb
,
bits_left
)))
return
;
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
;
pos
+=
run
+
1
;
if
(
pos
>=
max_coeffs
)
if
(
pos
>=
max_coeffs
)
...
@@ -629,7 +577,6 @@ static int decode_picture(ProresContext *ctx, int pic_num,
...
@@ -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)
#define MOVE_DATA_PTR(nbytes) buf += (nbytes); buf_size -= (nbytes)
static
int
decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
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