Browse Source

hevc_mvs: make sure to always initialize the temporal MV fully

The spec requires this.

Fixes uninitialized reads on some samples.

Remove now unnecessary initialization of the whole merge candidate list.
tags/n2.5
Anton Khirnov 10 years ago
parent
commit
d208d1eba3
1 changed files with 4 additions and 10 deletions
  1. +4
    -10
      libavcodec/hevc_mvs.c

+ 4
- 10
libavcodec/hevc_mvs.c View File

@@ -481,14 +481,10 @@ static void derive_spatial_merge_candidates(HEVCContext *s, int x0, int y0,
mergecandlist[nb_merge_cand].is_intra = 0;
mergecandlist[nb_merge_cand].pred_flag[0] = available_l0;
mergecandlist[nb_merge_cand].pred_flag[1] = available_l1;
if (available_l0) {
mergecandlist[nb_merge_cand].mv[0] = mv_l0_col;
mergecandlist[nb_merge_cand].ref_idx[0] = 0;
}
if (available_l1) {
mergecandlist[nb_merge_cand].mv[1] = mv_l1_col;
mergecandlist[nb_merge_cand].ref_idx[1] = 0;
}
AV_ZERO16(mergecandlist[nb_merge_cand].ref_idx);
mergecandlist[nb_merge_cand].mv[0] = mv_l0_col;
mergecandlist[nb_merge_cand].mv[1] = mv_l1_col;

if (merge_idx == nb_merge_cand)
return;
nb_merge_cand++;
@@ -558,8 +554,6 @@ void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW,
int nPbH2 = nPbH;
HEVCLocalContext *lc = &s->HEVClc;

memset(mergecand_list, 0, MRG_MAX_NUM_CANDS * sizeof(*mergecand_list));

if (s->pps->log2_parallel_merge_level > 2 && nCS == 8) {
singleMCLFlag = 1;
x0 = lc->cu.x;


Loading…
Cancel
Save