Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
aom-rav1e
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Xiph.Org
aom-rav1e
Commits
b7f441a0
Commit
b7f441a0
authored
Jul 30, 2015
by
Alex Converse
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup rdcost_block_args
Change-Id: I9d613cbe9e76b5dd15e935878ef9fd04521690ba
parent
c0f0245e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
43 additions
and
46 deletions
+43
-46
vp9/encoder/vp9_rdopt.c
vp9/encoder/vp9_rdopt.c
+43
-46
No files found.
vp9/encoder/vp9_rdopt.c
View file @
b7f441a0
...
...
@@ -66,15 +66,12 @@ struct rdcost_block_args {
MACROBLOCK
*
x
;
ENTROPY_CONTEXT
t_above
[
16
];
ENTROPY_CONTEXT
t_left
[
16
];
int
rate
;
int64_t
dist
;
int64_t
sse
;
int
this_rate
;
int64_t
this_dist
;
int64_t
this_sse
;
int64_t
this_rd
;
int64_t
best_rd
;
int
skip
;
int
exit_early
;
int
use_fast_coef_costing
;
const
scan_order
*
so
;
};
...
...
@@ -429,15 +426,12 @@ static int cost_coeffs(MACROBLOCK *x,
return
cost
;
}
static
void
dist_block
(
MACROBLOCK
*
x
,
int
plane
,
int
block
,
TX_SIZE
tx_size
,
#if CONFIG_VP9_HIGHBITDEPTH
static
void
dist_block
(
int
plane
,
int
block
,
TX_SIZE
tx_size
,
struct
rdcost_block_args
*
args
,
int
bd
)
{
#else
static
void
dist_block
(
int
plane
,
int
block
,
TX_SIZE
tx_size
,
struct
rdcost_block_args
*
args
)
{
int
bd
,
#endif // CONFIG_VP9_HIGHBITDEPTH
int64_t
*
out_dist
,
int64_t
*
out_sse
)
{
const
int
ss_txfrm_size
=
tx_size
<<
1
;
MACROBLOCK
*
const
x
=
args
->
x
;
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
const
struct
macroblock_plane
*
const
p
=
&
x
->
plane
[
plane
];
const
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
...
...
@@ -446,13 +440,13 @@ static void dist_block(int plane, int block, TX_SIZE tx_size,
tran_low_t
*
const
coeff
=
BLOCK_OFFSET
(
p
->
coeff
,
block
);
tran_low_t
*
const
dqcoeff
=
BLOCK_OFFSET
(
pd
->
dqcoeff
,
block
);
#if CONFIG_VP9_HIGHBITDEPTH
args
->
dist
=
vp9_highbd_block_error
(
coeff
,
dqcoeff
,
16
<<
ss_txfrm_size
,
&
this_sse
,
bd
)
>>
shift
;
*
out_
dist
=
vp9_highbd_block_error
(
coeff
,
dqcoeff
,
16
<<
ss_txfrm_size
,
&
this_sse
,
bd
)
>>
shift
;
#else
args
->
dist
=
vp9_block_error
(
coeff
,
dqcoeff
,
16
<<
ss_txfrm_size
,
&
this_sse
)
>>
shift
;
*
out_
dist
=
vp9_block_error
(
coeff
,
dqcoeff
,
16
<<
ss_txfrm_size
,
&
this_sse
)
>>
shift
;
#endif // CONFIG_VP9_HIGHBITDEPTH
args
->
sse
=
this_sse
>>
shift
;
*
out_sse
=
this_sse
>>
shift
;
if
(
x
->
skip_encode
&&
!
is_inter_block
(
&
xd
->
mi
[
0
]
->
mbmi
))
{
// TODO(jingning): tune the model to better capture the distortion.
...
...
@@ -463,20 +457,20 @@ static void dist_block(int plane, int block, TX_SIZE tx_size,
p
>>=
((
xd
->
bd
-
8
)
*
2
);
}
#endif // CONFIG_VP9_HIGHBITDEPTH
args
->
dist
+=
(
p
>>
4
);
args
->
sse
+=
p
;
*
out_
dist
+=
(
p
>>
4
);
*
out_
sse
+=
p
;
}
}
static
void
rate_block
(
int
plane
,
int
block
,
BLOCK_SIZE
plane_bsize
,
TX_SIZE
tx_size
,
struct
rdcost_block_args
*
args
)
{
static
int
rate_block
(
int
plane
,
int
block
,
BLOCK_SIZE
plane_bsize
,
TX_SIZE
tx_size
,
struct
rdcost_block_args
*
args
)
{
int
x_idx
,
y_idx
;
txfrm_block_to_raster_xy
(
plane_bsize
,
tx_size
,
block
,
&
x_idx
,
&
y_idx
);
args
->
rate
=
cost_coeffs
(
args
->
x
,
plane
,
block
,
args
->
t_above
+
x_idx
,
args
->
t_left
+
y_idx
,
tx_size
,
args
->
so
->
scan
,
args
->
so
->
neighbors
,
args
->
use_fast_coef_costing
);
return
cost_coeffs
(
args
->
x
,
plane
,
block
,
args
->
t_above
+
x_idx
,
args
->
t_left
+
y_idx
,
tx_size
,
args
->
so
->
scan
,
args
->
so
->
neighbors
,
args
->
use_fast_coef_costing
);
}
static
void
block_rd_txfm
(
int
plane
,
int
block
,
BLOCK_SIZE
plane_bsize
,
...
...
@@ -486,8 +480,11 @@ static void block_rd_txfm(int plane, int block, BLOCK_SIZE plane_bsize,
MACROBLOCKD
*
const
xd
=
&
x
->
e_mbd
;
MB_MODE_INFO
*
const
mbmi
=
&
xd
->
mi
[
0
]
->
mbmi
;
int64_t
rd1
,
rd2
,
rd
;
int
rate
;
int64_t
dist
;
int64_t
sse
;
if
(
args
->
skip
)
if
(
args
->
exit_early
)
return
;
if
(
!
is_inter_block
(
mbmi
))
{
...
...
@@ -495,12 +492,12 @@ static void block_rd_txfm(int plane, int block, BLOCK_SIZE plane_bsize,
vp9_encode_block_intra
(
plane
,
block
,
plane_bsize
,
tx_size
,
&
arg
);
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
xd
->
bd
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
xd
->
bd
,
&
dist
,
&
sse
);
}
else
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
8
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
8
,
&
dist
,
&
sse
);
}
#else
dist_block
(
plane
,
block
,
tx_size
,
args
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
&
dist
,
&
sse
);
#endif // CONFIG_VP9_HIGHBITDEPTH
}
else
if
(
max_txsize_lookup
[
plane_bsize
]
==
tx_size
)
{
if
(
x
->
skip_txfm
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
==
0
)
{
...
...
@@ -508,20 +505,20 @@ static void block_rd_txfm(int plane, int block, BLOCK_SIZE plane_bsize,
vp9_xform_quant
(
x
,
plane
,
block
,
plane_bsize
,
tx_size
);
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
xd
->
bd
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
xd
->
bd
,
&
dist
,
&
sse
);
}
else
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
8
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
8
,
&
dist
,
&
sse
);
}
#else
dist_block
(
plane
,
block
,
tx_size
,
args
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
&
dist
,
&
sse
);
#endif // CONFIG_VP9_HIGHBITDEPTH
}
else
if
(
x
->
skip_txfm
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
==
2
)
{
// compute DC coefficient
tran_low_t
*
const
coeff
=
BLOCK_OFFSET
(
x
->
plane
[
plane
].
coeff
,
block
);
tran_low_t
*
const
dqcoeff
=
BLOCK_OFFSET
(
xd
->
plane
[
plane
].
dqcoeff
,
block
);
vp9_xform_quant_dc
(
x
,
plane
,
block
,
plane_bsize
,
tx_size
);
args
->
sse
=
x
->
bsse
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
<<
4
;
args
->
dist
=
args
->
sse
;
sse
=
x
->
bsse
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
<<
4
;
dist
=
sse
;
if
(
x
->
plane
[
plane
].
eobs
[
block
])
{
const
int64_t
orig_sse
=
(
int64_t
)
coeff
[
0
]
*
coeff
[
0
];
const
int64_t
resd_sse
=
coeff
[
0
]
-
dqcoeff
[
0
];
...
...
@@ -532,31 +529,31 @@ static void block_rd_txfm(int plane, int block, BLOCK_SIZE plane_bsize,
if
(
tx_size
!=
TX_32X32
)
dc_correct
>>=
2
;
args
->
dist
=
MAX
(
0
,
args
->
sse
-
dc_correct
);
dist
=
MAX
(
0
,
sse
-
dc_correct
);
}
}
else
{
// skip forward transform
x
->
plane
[
plane
].
eobs
[
block
]
=
0
;
args
->
sse
=
x
->
bsse
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
<<
4
;
args
->
dist
=
args
->
sse
;
sse
=
x
->
bsse
[(
plane
<<
2
)
+
(
block
>>
(
tx_size
<<
1
))]
<<
4
;
dist
=
sse
;
}
}
else
{
// full forward transform and quantization
vp9_xform_quant
(
x
,
plane
,
block
,
plane_bsize
,
tx_size
);
#if CONFIG_VP9_HIGHBITDEPTH
if
(
xd
->
cur_buf
->
flags
&
YV12_FLAG_HIGHBITDEPTH
)
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
xd
->
bd
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
xd
->
bd
,
&
dist
,
&
sse
);
}
else
{
dist_block
(
plane
,
block
,
tx_size
,
args
,
8
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
8
,
&
dist
,
&
sse
);
}
#else
dist_block
(
plane
,
block
,
tx_size
,
args
);
dist_block
(
x
,
plane
,
block
,
tx_size
,
&
dist
,
&
sse
);
#endif // CONFIG_VP9_HIGHBITDEPTH
}
rate_block
(
plane
,
block
,
plane_bsize
,
tx_size
,
args
);
rd1
=
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
args
->
rate
,
args
->
dist
);
rd2
=
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
0
,
args
->
sse
);
rate
=
rate
_block
(
plane
,
block
,
plane_bsize
,
tx_size
,
args
);
rd1
=
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
rate
,
dist
);
rd2
=
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
0
,
sse
);
// TODO(jingning): temporarily enabled only for luma component
rd
=
MIN
(
rd1
,
rd2
);
...
...
@@ -564,13 +561,13 @@ static void block_rd_txfm(int plane, int block, BLOCK_SIZE plane_bsize,
x
->
zcoeff_blk
[
tx_size
][
block
]
=
!
x
->
plane
[
plane
].
eobs
[
block
]
||
(
rd1
>
rd2
&&
!
xd
->
lossless
);
args
->
this_rate
+=
args
->
rate
;
args
->
this_dist
+=
args
->
dist
;
args
->
this_sse
+=
args
->
sse
;
args
->
this_rate
+=
rate
;
args
->
this_dist
+=
dist
;
args
->
this_sse
+=
sse
;
args
->
this_rd
+=
rd
;
if
(
args
->
this_rd
>
args
->
best_rd
)
{
args
->
skip
=
1
;
args
->
exit_early
=
1
;
return
;
}
}
...
...
@@ -598,7 +595,7 @@ static void txfm_rd_in_plane(MACROBLOCK *x,
vp9_foreach_transformed_block_in_plane
(
xd
,
bsize
,
plane
,
block_rd_txfm
,
&
args
);
if
(
args
.
skip
)
{
if
(
args
.
exit_early
)
{
*
rate
=
INT_MAX
;
*
distortion
=
INT64_MAX
;
*
sse
=
INT64_MAX
;
...
...
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