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
9fa888c0
Commit
9fa888c0
authored
Feb 20, 2016
by
Vittorio Giovara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
intrax8: Keep a reference to the decoder blocks
parent
c2084ffc
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
24 additions
and
15 deletions
+24
-15
intrax8.c
libavcodec/intrax8.c
+16
-15
intrax8.h
libavcodec/intrax8.h
+6
-0
vc1dec.c
libavcodec/vc1dec.c
+1
-0
wmv2dec.c
libavcodec/wmv2dec.c
+1
-0
No files found.
libavcodec/intrax8.c
View file @
9fa888c0
...
@@ -480,9 +480,8 @@ static void x8_get_prediction(IntraX8Context *const w)
...
@@ -480,9 +480,8 @@ static void x8_get_prediction(IntraX8Context *const w)
static
void
x8_ac_compensation
(
IntraX8Context
*
const
w
,
const
int
direction
,
static
void
x8_ac_compensation
(
IntraX8Context
*
const
w
,
const
int
direction
,
const
int
dc_level
)
const
int
dc_level
)
{
{
MpegEncContext
*
const
s
=
w
->
s
;
int
t
;
int
t
;
#define B(x, y)
s
->block[0][w->idsp.idct_permutation[(x) + (y) * 8]]
#define B(x, y)
w
->block[0][w->idsp.idct_permutation[(x) + (y) * 8]]
#define T(x) ((x) * dc_level + 0x8000) >> 16;
#define T(x) ((x) * dc_level + 0x8000) >> 16;
switch
(
direction
)
{
switch
(
direction
)
{
case
0
:
case
0
:
...
@@ -526,7 +525,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
...
@@ -526,7 +525,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
t
=
T
(
1084
);
// g
t
=
T
(
1084
);
// g
B
(
1
,
1
)
+=
t
;
B
(
1
,
1
)
+=
t
;
s
->
block_last_index
[
0
]
=
FFMAX
(
s
->
block_last_index
[
0
],
7
*
8
);
w
->
block_last_index
[
0
]
=
FFMAX
(
w
->
block_last_index
[
0
],
7
*
8
);
break
;
break
;
case
1
:
case
1
:
B
(
0
,
1
)
-=
T
(
6269
);
B
(
0
,
1
)
-=
T
(
6269
);
...
@@ -534,7 +533,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
...
@@ -534,7 +533,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
B
(
0
,
5
)
-=
T
(
172
);
B
(
0
,
5
)
-=
T
(
172
);
B
(
0
,
7
)
-=
T
(
73
);
B
(
0
,
7
)
-=
T
(
73
);
s
->
block_last_index
[
0
]
=
FFMAX
(
s
->
block_last_index
[
0
],
7
*
8
);
w
->
block_last_index
[
0
]
=
FFMAX
(
w
->
block_last_index
[
0
],
7
*
8
);
break
;
break
;
case
2
:
case
2
:
B
(
1
,
0
)
-=
T
(
6269
);
B
(
1
,
0
)
-=
T
(
6269
);
...
@@ -542,7 +541,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
...
@@ -542,7 +541,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction,
B
(
5
,
0
)
-=
T
(
172
);
B
(
5
,
0
)
-=
T
(
172
);
B
(
7
,
0
)
-=
T
(
73
);
B
(
7
,
0
)
-=
T
(
73
);
s
->
block_last_index
[
0
]
=
FFMAX
(
s
->
block_last_index
[
0
],
7
);
w
->
block_last_index
[
0
]
=
FFMAX
(
w
->
block_last_index
[
0
],
7
);
break
;
break
;
}
}
#undef B
#undef B
...
@@ -572,8 +571,6 @@ static const int16_t quant_table[64] = {
...
@@ -572,8 +571,6 @@ static const int16_t quant_table[64] = {
static
int
x8_decode_intra_mb
(
IntraX8Context
*
const
w
,
const
int
chroma
)
static
int
x8_decode_intra_mb
(
IntraX8Context
*
const
w
,
const
int
chroma
)
{
{
MpegEncContext
*
const
s
=
w
->
s
;
uint8_t
*
scantable
;
uint8_t
*
scantable
;
int
final
,
run
,
level
;
int
final
,
run
,
level
;
int
ac_mode
,
dc_mode
,
est_run
,
dc_level
;
int
ac_mode
,
dc_mode
,
est_run
,
dc_level
;
...
@@ -583,7 +580,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
...
@@ -583,7 +580,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
int
sign
;
int
sign
;
assert
(
w
->
orient
<
12
);
assert
(
w
->
orient
<
12
);
w
->
bdsp
.
clear_block
(
s
->
block
[
0
]);
w
->
bdsp
.
clear_block
(
w
->
block
[
0
]);
if
(
chroma
)
if
(
chroma
)
dc_mode
=
2
;
dc_mode
=
2
;
...
@@ -644,12 +641,12 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
...
@@ -644,12 +641,12 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
if
(
use_quant_matrix
)
if
(
use_quant_matrix
)
level
=
(
level
*
quant_table
[
pos
])
>>
8
;
level
=
(
level
*
quant_table
[
pos
])
>>
8
;
s
->
block
[
0
][
scantable
[
pos
]]
=
level
;
w
->
block
[
0
][
scantable
[
pos
]]
=
level
;
}
while
(
!
final
);
}
while
(
!
final
);
s
->
block_last_index
[
0
]
=
pos
;
w
->
block_last_index
[
0
]
=
pos
;
}
else
{
// DC only
}
else
{
// DC only
s
->
block_last_index
[
0
]
=
0
;
w
->
block_last_index
[
0
]
=
0
;
if
(
w
->
flat_dc
&&
((
unsigned
)
(
dc_level
+
1
))
<
3
)
{
// [-1; 1]
if
(
w
->
flat_dc
&&
((
unsigned
)
(
dc_level
+
1
))
<
3
)
{
// [-1; 1]
int32_t
divide_quant
=
!
chroma
?
w
->
divide_quant_dc_luma
int32_t
divide_quant
=
!
chroma
?
w
->
divide_quant_dc_luma
:
w
->
divide_quant_dc_chroma
;
:
w
->
divide_quant_dc_chroma
;
...
@@ -669,9 +666,9 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
...
@@ -669,9 +666,9 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
zeros_only
=
(
dc_level
==
0
);
zeros_only
=
(
dc_level
==
0
);
}
}
if
(
!
chroma
)
if
(
!
chroma
)
s
->
block
[
0
][
0
]
=
dc_level
*
w
->
quant
;
w
->
block
[
0
][
0
]
=
dc_level
*
w
->
quant
;
else
else
s
->
block
[
0
][
0
]
=
dc_level
*
w
->
quant_dc_chroma
;
w
->
block
[
0
][
0
]
=
dc_level
*
w
->
quant_dc_chroma
;
// there is !zero_only check in the original, but dc_level check is enough
// there is !zero_only check in the original, but dc_level check is enough
if
((
unsigned
int
)
(
dc_level
+
1
)
>=
3
&&
(
w
->
edges
&
3
)
!=
3
)
{
if
((
unsigned
int
)
(
dc_level
+
1
)
>=
3
&&
(
w
->
edges
&
3
)
!=
3
)
{
...
@@ -681,7 +678,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
...
@@ -681,7 +678,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
direction
=
(
0x6A017C
>>
(
w
->
orient
*
2
))
&
3
;
direction
=
(
0x6A017C
>>
(
w
->
orient
*
2
))
&
3
;
if
(
direction
!=
3
)
{
if
(
direction
!=
3
)
{
// modify block_last[]
// modify block_last[]
x8_ac_compensation
(
w
,
direction
,
s
->
block
[
0
][
0
]);
x8_ac_compensation
(
w
,
direction
,
w
->
block
[
0
][
0
]);
}
}
}
}
...
@@ -696,7 +693,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
...
@@ -696,7 +693,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
if
(
!
zeros_only
)
if
(
!
zeros_only
)
w
->
idsp
.
idct_add
(
w
->
dest
[
chroma
],
w
->
idsp
.
idct_add
(
w
->
dest
[
chroma
],
w
->
frame
->
linesize
[
!!
chroma
],
w
->
frame
->
linesize
[
!!
chroma
],
s
->
block
[
0
]);
w
->
block
[
0
]);
block_placed:
block_placed:
if
(
!
chroma
)
if
(
!
chroma
)
...
@@ -735,6 +732,8 @@ static void x8_init_block_index(IntraX8Context *w, AVFrame *frame)
...
@@ -735,6 +732,8 @@ static void x8_init_block_index(IntraX8Context *w, AVFrame *frame)
av_cold
int
ff_intrax8_common_init
(
AVCodecContext
*
avctx
,
av_cold
int
ff_intrax8_common_init
(
AVCodecContext
*
avctx
,
IntraX8Context
*
w
,
IDCTDSPContext
*
idsp
,
IntraX8Context
*
w
,
IDCTDSPContext
*
idsp
,
int16_t
(
*
block
)[
64
],
int
block_last_index
[
12
],
int
mb_width
,
int
mb_height
,
int
mb_width
,
int
mb_height
,
MpegEncContext
*
const
s
)
MpegEncContext
*
const
s
)
{
{
...
@@ -746,6 +745,8 @@ av_cold int ff_intrax8_common_init(AVCodecContext *avctx,
...
@@ -746,6 +745,8 @@ av_cold int ff_intrax8_common_init(AVCodecContext *avctx,
w
->
idsp
=
*
idsp
;
w
->
idsp
=
*
idsp
;
w
->
mb_width
=
mb_width
;
w
->
mb_width
=
mb_width
;
w
->
mb_height
=
mb_height
;
w
->
mb_height
=
mb_height
;
w
->
block
=
block
;
w
->
block_last_index
=
block_last_index
;
w
->
s
=
s
;
w
->
s
=
s
;
// two rows, 2 blocks per cannon mb
// two rows, 2 blocks per cannon mb
...
...
libavcodec/intrax8.h
View file @
9fa888c0
...
@@ -37,6 +37,8 @@ typedef struct IntraX8Context {
...
@@ -37,6 +37,8 @@ typedef struct IntraX8Context {
uint8_t
*
prediction_table
;
// 2 * (mb_w * 2)
uint8_t
*
prediction_table
;
// 2 * (mb_w * 2)
ScanTable
scantable
[
3
];
ScanTable
scantable
[
3
];
AVCodecContext
*
avctx
;
AVCodecContext
*
avctx
;
int
*
block_last_index
;
///< last nonzero coefficient in block
int16_t
(
*
block
)[
64
];
// set by the caller codec
// set by the caller codec
MpegEncContext
*
s
;
MpegEncContext
*
s
;
...
@@ -77,6 +79,8 @@ typedef struct IntraX8Context {
...
@@ -77,6 +79,8 @@ typedef struct IntraX8Context {
* @param avctx pointer to AVCodecContext
* @param avctx pointer to AVCodecContext
* @param w pointer to IntraX8Context
* @param w pointer to IntraX8Context
* @param idsp pointer to IDCTDSPContext
* @param idsp pointer to IDCTDSPContext
* @param block pointer to block array
* @param block_last_index pointer to index array
* @param mb_width macroblock width
* @param mb_width macroblock width
* @param mb_height macroblock height
* @param mb_height macroblock height
* @param s pointer to MpegEncContext of the parent codec
* @param s pointer to MpegEncContext of the parent codec
...
@@ -84,6 +88,8 @@ typedef struct IntraX8Context {
...
@@ -84,6 +88,8 @@ typedef struct IntraX8Context {
*/
*/
int
ff_intrax8_common_init
(
AVCodecContext
*
avctx
,
int
ff_intrax8_common_init
(
AVCodecContext
*
avctx
,
IntraX8Context
*
w
,
IDCTDSPContext
*
idsp
,
IntraX8Context
*
w
,
IDCTDSPContext
*
idsp
,
int16_t
(
*
block
)[
64
],
int
block_last_index
[
12
],
int
mb_width
,
int
mb_height
,
int
mb_width
,
int
mb_height
,
MpegEncContext
*
const
s
);
MpegEncContext
*
const
s
);
...
...
libavcodec/vc1dec.c
View file @
9fa888c0
...
@@ -380,6 +380,7 @@ av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v)
...
@@ -380,6 +380,7 @@ av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v)
}
}
ret
=
ff_intrax8_common_init
(
s
->
avctx
,
&
v
->
x8
,
&
s
->
idsp
,
ret
=
ff_intrax8_common_init
(
s
->
avctx
,
&
v
->
x8
,
&
s
->
idsp
,
s
->
block
,
s
->
block_last_index
,
s
->
mb_width
,
s
->
mb_height
,
s
->
mb_width
,
s
->
mb_height
,
s
);
s
);
if
(
ret
<
0
)
if
(
ret
<
0
)
...
...
libavcodec/wmv2dec.c
View file @
9fa888c0
...
@@ -475,6 +475,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx)
...
@@ -475,6 +475,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx)
ff_wmv2_common_init
(
w
);
ff_wmv2_common_init
(
w
);
return
ff_intrax8_common_init
(
avctx
,
&
w
->
x8
,
&
w
->
s
.
idsp
,
return
ff_intrax8_common_init
(
avctx
,
&
w
->
x8
,
&
w
->
s
.
idsp
,
w
->
s
.
block
,
w
->
s
.
block_last_index
,
w
->
s
.
mb_width
,
w
->
s
.
mb_height
,
&
w
->
s
);
w
->
s
.
mb_width
,
w
->
s
.
mb_height
,
&
w
->
s
);
}
}
...
...
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