SEG_LVL_MODE: don't code ref_frame if it's implicit
If the SEG_LVL_MODE is an intra mode, then the reference frame must be INTRA_FRAME. Change-Id: I2cdeeac3780c077c74b39ce89a528bc280674231
This commit is contained in:
Родитель
1761a6b55a
Коммит
6d482706ef
|
@ -717,7 +717,11 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
|
|||
}
|
||||
|
||||
// Read the reference frame
|
||||
mbmi->ref_frame = read_ref_frame(pbi, bc, mbmi->segment_id);
|
||||
if (vp9_segfeature_active(xd, mbmi->segment_id, SEG_LVL_MODE)
|
||||
&& vp9_get_segdata(xd, mbmi->segment_id, SEG_LVL_MODE) < NEARESTMV)
|
||||
mbmi->ref_frame = INTRA_FRAME;
|
||||
else
|
||||
mbmi->ref_frame = read_ref_frame(pbi, bc, mbmi->segment_id);
|
||||
|
||||
// If reference frame is an Inter frame
|
||||
if (mbmi->ref_frame) {
|
||||
|
|
|
@ -863,7 +863,12 @@ static void pack_inter_mode_mvs(VP9_COMP *const cpi, vp9_writer *const bc) {
|
|||
}
|
||||
|
||||
// Encode the reference frame.
|
||||
encode_ref_frame(bc, pc, xd, segment_id, rf);
|
||||
if (!vp9_segfeature_active(xd, segment_id, SEG_LVL_MODE)
|
||||
|| vp9_get_segdata(xd, segment_id, SEG_LVL_MODE) >= NEARESTMV) {
|
||||
encode_ref_frame(bc, pc, xd, segment_id, rf);
|
||||
} else {
|
||||
assert(rf == INTRA_FRAME);
|
||||
}
|
||||
|
||||
if (rf == INTRA_FRAME) {
|
||||
#ifdef ENTROPY_STATS
|
||||
|
|
Загрузка…
Ссылка в новой задаче