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
6127af60
Commit
6127af60
authored
Dec 05, 2011
by
John Koleszar
Committed by
Gerrit Code Review
Dec 05, 2011
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Speed selection support for disabled reference frames"
parents
bdd60a7b
e55974bf
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
294 additions
and
287 deletions
+294
-287
vp8/encoder/onyx_if.c
vp8/encoder/onyx_if.c
+213
-232
vp8/encoder/onyx_int.h
vp8/encoder/onyx_int.h
+15
-15
vp8/encoder/pickinter.c
vp8/encoder/pickinter.c
+20
-13
vp8/encoder/ratectrl.c
vp8/encoder/ratectrl.c
+0
-1
vp8/encoder/rdopt.c
vp8/encoder/rdopt.c
+46
-26
No files found.
vp8/encoder/onyx_if.c
View file @
6127af60
This diff is collapsed.
Click to expand it.
vp8/encoder/onyx_int.h
View file @
6127af60
...
...
@@ -133,32 +133,32 @@ typedef struct
typedef
enum
{
THR_ZERO
MV
=
0
,
THR_ZERO
1
=
0
,
THR_DC
=
1
,
THR_NEAREST
MV
=
2
,
THR_NEAR
MV
=
3
,
THR_NEAREST
1
=
2
,
THR_NEAR
1
=
3
,
THR_ZERO
G
=
4
,
THR_NEAREST
G
=
5
,
THR_ZERO
2
=
4
,
THR_NEAREST
2
=
5
,
THR_ZERO
A
=
6
,
THR_NEAREST
A
=
7
,
THR_ZERO
3
=
6
,
THR_NEAREST
3
=
7
,
THR_NEAR
G
=
8
,
THR_NEAR
A
=
9
,
THR_NEAR
2
=
8
,
THR_NEAR
3
=
9
,
THR_V_PRED
=
10
,
THR_H_PRED
=
11
,
THR_TM
=
12
,
THR_NEW
MV
=
13
,
THR_NEW
G
=
14
,
THR_NEW
A
=
15
,
THR_NEW
1
=
13
,
THR_NEW
2
=
14
,
THR_NEW
3
=
15
,
THR_SPLIT
MV
=
16
,
THR_SPLIT
G
=
17
,
THR_SPLIT
A
=
18
,
THR_SPLIT
1
=
16
,
THR_SPLIT
2
=
17
,
THR_SPLIT
3
=
18
,
THR_B_PRED
=
19
,
}
...
...
vp8/encoder/pickinter.c
View file @
6127af60
...
...
@@ -39,7 +39,7 @@ extern int VP8_UVSSE(MACROBLOCK *x, const vp8_variance_rtcd_vtable_t *rtcd);
extern
unsigned
int
cnt_pm
;
#endif
extern
const
MV_REFERENCE_FRAME
vp8_ref_frame_order
[
MAX_MODES
];
extern
const
int
vp8_ref_frame_order
[
MAX_MODES
];
extern
const
MB_PREDICTION_MODE
vp8_mode_order
[
MAX_MODES
];
extern
unsigned
int
(
*
vp8_get4x4sse_cs
)(
unsigned
char
*
src_ptr
,
int
source_stride
,
unsigned
char
*
ref_ptr
,
int
recon_stride
);
...
...
@@ -439,8 +439,9 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
unsigned
char
*
y_buffer
[
4
];
unsigned
char
*
u_buffer
[
4
];
unsigned
char
*
v_buffer
[
4
];
int
i
;
int
ref_frame_map
[
4
];
int
skip_mode
[
4
]
=
{
0
,
0
,
0
,
0
};
int
found_near_mvs
[
4
]
=
{
0
,
0
,
0
,
0
};
int
have_subp_search
=
cpi
->
sf
.
half_pixel_search
;
/* In real-time mode, when Speed >= 15, no sub-pixel search. */
...
...
@@ -450,6 +451,17 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
vpx_memset
(
near_mv
,
0
,
sizeof
(
near_mv
));
vpx_memset
(
&
best_mbmode
,
0
,
sizeof
(
best_mbmode
));
/* Setup search priorities */
i
=
0
;
ref_frame_map
[
i
++
]
=
INTRA_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_LAST_FLAG
)
ref_frame_map
[
i
++
]
=
LAST_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_GOLD_FLAG
)
ref_frame_map
[
i
++
]
=
GOLDEN_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_ALT_FLAG
)
// &&(cpi->source_alt_ref_active || cpi->oxcf.number_of_layers > 1)
ref_frame_map
[
i
++
]
=
ALTREF_FRAME
;
for
(;
i
<
4
;
i
++
)
ref_frame_map
[
i
]
=
-
1
;
// set up all the refframe dependent pointers.
if
(
cpi
->
ref_frame_flags
&
VP8_LAST_FLAG
)
...
...
@@ -459,8 +471,6 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
u_buffer
[
LAST_FRAME
]
=
lst_yv12
->
u_buffer
+
recon_uvoffset
;
v_buffer
[
LAST_FRAME
]
=
lst_yv12
->
v_buffer
+
recon_uvoffset
;
}
else
skip_mode
[
LAST_FRAME
]
=
1
;
if
(
cpi
->
ref_frame_flags
&
VP8_GOLD_FLAG
)
{
...
...
@@ -469,19 +479,14 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
u_buffer
[
GOLDEN_FRAME
]
=
gld_yv12
->
u_buffer
+
recon_uvoffset
;
v_buffer
[
GOLDEN_FRAME
]
=
gld_yv12
->
v_buffer
+
recon_uvoffset
;
}
else
skip_mode
[
GOLDEN_FRAME
]
=
1
;
if
((
cpi
->
ref_frame_flags
&
VP8_ALT_FLAG
)
&&
(
cpi
->
source_alt_ref_active
||
cpi
->
oxcf
.
number_of_layers
>
1
))
if
(
cpi
->
ref_frame_flags
&
VP8_ALT_FLAG
)
{
YV12_BUFFER_CONFIG
*
alt_yv12
=
&
cpi
->
common
.
yv12_fb
[
cpi
->
common
.
alt_fb_idx
];
y_buffer
[
ALTREF_FRAME
]
=
alt_yv12
->
y_buffer
+
recon_yoffset
;
u_buffer
[
ALTREF_FRAME
]
=
alt_yv12
->
u_buffer
+
recon_uvoffset
;
v_buffer
[
ALTREF_FRAME
]
=
alt_yv12
->
v_buffer
+
recon_uvoffset
;
}
else
skip_mode
[
ALTREF_FRAME
]
=
1
;
cpi
->
mbs_tested_so_far
++
;
// Count of the number of MBs tested so far this frame
...
...
@@ -496,15 +501,17 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
{
int
frame_cost
;
int
this_rd
=
INT_MAX
;
int
this_ref_frame
=
ref_frame_map
[
vp8_ref_frame_order
[
mode_index
]];
if
(
best_rd
<=
cpi
->
rd_threshes
[
mode_index
])
continue
;
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
=
vp8_ref_frame_order
[
mode_index
];
if
(
skip_mode
[
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
])
if
(
this_ref_frame
<
0
)
continue
;
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
=
this_ref_frame
;
// Check to see if the testing frequency for this mode is at its max
// If so then prevent it from being tested and increase the threshold for its testing
if
(
cpi
->
mode_test_hit_counts
[
mode_index
]
&&
(
cpi
->
mode_check_freq
[
mode_index
]
>
1
))
...
...
vp8/encoder/ratectrl.c
View file @
6127af60
...
...
@@ -28,7 +28,6 @@
#define MAX_BPB_FACTOR 50
extern
const
MB_PREDICTION_MODE
vp8_mode_order
[
MAX_MODES
];
extern
const
MV_REFERENCE_FRAME
vp8_ref_frame_order
[
MAX_MODES
];
...
...
vp8/encoder/rdopt.c
View file @
6127af60
...
...
@@ -100,36 +100,39 @@ const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES] =
B_PRED
,
};
const
MV_REFERENCE_FRAME
vp8_ref_frame_order
[
MAX_MODES
]
=
/* This table determines the search order in reference frame priority order,
* which may not necessarily match INTRA,LAST,GOLDEN,ARF
*/
const
int
vp8_ref_frame_order
[
MAX_MODES
]
=
{
LAST_FRAME
,
INTRA_FRAME
,
1
,
0
,
LAST_FRAME
,
LAST_FRAME
,
1
,
1
,
GOLDEN_FRAME
,
GOLDEN_FRAME
,
2
,
2
,
ALTREF_FRAME
,
ALTREF_FRAME
,
3
,
3
,
GOLDEN_FRAME
,
ALTREF_FRAME
,
2
,
3
,
INTRA_FRAME
,
INTRA_FRAME
,
INTRA_FRAME
,
0
,
0
,
0
,
LAST_FRAME
,
GOLDEN_FRAME
,
ALTREF_FRAME
,
1
,
2
,
3
,
LAST_FRAME
,
GOLDEN_FRAME
,
ALTREF_FRAME
,
1
,
2
,
3
,
INTRA_FRAME
,
0
,
};
static
void
fill_token_costs
(
...
...
@@ -1789,10 +1792,23 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
unsigned
char
*
y_buffer
[
4
];
unsigned
char
*
u_buffer
[
4
];
unsigned
char
*
v_buffer
[
4
];
int
ref_frame_map
[
4
];
vpx_memset
(
&
best_mbmode
,
0
,
sizeof
(
best_mbmode
));
vpx_memset
(
&
best_bmodes
,
0
,
sizeof
(
best_bmodes
));
/* Setup search priorities */
i
=
0
;
ref_frame_map
[
i
++
]
=
INTRA_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_LAST_FLAG
)
ref_frame_map
[
i
++
]
=
LAST_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_GOLD_FLAG
)
ref_frame_map
[
i
++
]
=
GOLDEN_FRAME
;
if
(
cpi
->
ref_frame_flags
&
VP8_ALT_FLAG
)
ref_frame_map
[
i
++
]
=
ALTREF_FRAME
;
for
(;
i
<
4
;
i
++
)
ref_frame_map
[
i
]
=
-
1
;
if
(
cpi
->
ref_frame_flags
&
VP8_LAST_FLAG
)
{
YV12_BUFFER_CONFIG
*
lst_yv12
=
&
cpi
->
common
.
yv12_fb
[
cpi
->
common
.
lst_fb_idx
];
...
...
@@ -1852,6 +1868,7 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
int
lf_or_gf
=
0
;
// Lat Frame (01) or gf/arf (1)
int
disable_skip
=
0
;
int
other_cost
=
0
;
int
this_ref_frame
=
ref_frame_map
[
vp8_ref_frame_order
[
mode_index
]];
// Experimental debug code.
// Record of rd values recorded for this MB. -1 indicates not measured
...
...
@@ -1864,6 +1881,9 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
if
(
best_rd
<=
cpi
->
rd_threshes
[
mode_index
])
continue
;
if
(
this_ref_frame
<
0
)
continue
;
// These variables hold are rolling total cost and distortion for this mode
rate2
=
0
;
distortion2
=
0
;
...
...
@@ -1872,7 +1892,7 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
x
->
e_mbd
.
mode_info_context
->
mbmi
.
mode
=
this_mode
;
x
->
e_mbd
.
mode_info_context
->
mbmi
.
uv_mode
=
DC_PRED
;
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
=
vp8_ref_frame_order
[
mode_index
]
;
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
=
this_ref_frame
;
// Only consider ZEROMV/ALTREF_FRAME for alt ref frame,
// unless ARNR filtering is enabled in which case we want
...
...
@@ -1920,13 +1940,13 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
// Experimental code. Special case for gf and arf zeromv modes. Increase zbin size to supress noise
if
(
cpi
->
zbin_mode_boost_enabled
)
{
if
(
vp8_ref_frame_order
[
mode_index
]
==
INTRA_FRAME
)
if
(
this_ref_frame
==
INTRA_FRAME
)
cpi
->
zbin_mode_boost
=
0
;
else
{
if
(
vp8_mode_order
[
mode_index
]
==
ZEROMV
)
{
if
(
vp8_ref_frame_order
[
mode_index
]
!=
LAST_FRAME
)
if
(
this_ref_frame
!=
LAST_FRAME
)
cpi
->
zbin_mode_boost
=
GF_ZEROMV_ZBIN_BOOST
;
else
cpi
->
zbin_mode_boost
=
LF_ZEROMV_ZBIN_BOOST
;
...
...
@@ -1971,8 +1991,8 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
int
tmp_rd
;
int
this_rd_thresh
;
this_rd_thresh
=
(
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
==
LAST_FRAME
)
?
cpi
->
rd_threshes
[
THR_NEWMV
]
:
cpi
->
rd_threshes
[
THR_NEWA
];
this_rd_thresh
=
(
x
->
e_mbd
.
mode_info_context
->
mbmi
.
ref_frame
==
GOLDEN_FRAME
)
?
cpi
->
rd_threshes
[
THR_NEWG
]
:
this_rd_thresh
;
this_rd_thresh
=
(
vp8_ref_frame_order
[
mode_index
]
==
1
)
?
cpi
->
rd_threshes
[
THR_NEW1
]
:
cpi
->
rd_threshes
[
THR_NEW3
];
this_rd_thresh
=
(
vp8_ref_frame_order
[
mode_index
]
==
2
)
?
cpi
->
rd_threshes
[
THR_NEW2
]
:
this_rd_thresh
;
tmp_rd
=
vp8_rd_pick_best_mbsegmentation
(
cpi
,
x
,
&
best_ref_mv
,
best_yrd
,
mdcounts
,
...
...
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