diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2015-04-30 11:36:06 +0200 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2015-05-01 08:45:54 +0200 |
commit | cf62f2d2d6e75fa1475b6381c810bb2974a8dea3 (patch) | |
tree | 489e50d1bcf182da718c029b933e0045107214bb /libavcodec/vp9.c | |
parent | f052ea6ba54e439f015702d8661be921b0e3ca05 (diff) | |
download | ffmpeg-cf62f2d2d6e75fa1475b6381c810bb2974a8dea3.tar.gz |
vp9: more specifically specify mask destination to mask_edges().
Diffstat (limited to 'libavcodec/vp9.c')
-rw-r--r-- | libavcodec/vp9.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 3ffd094d75..dbedf334ff 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -2853,7 +2853,7 @@ static void inter_recon(AVCodecContext *ctx) } } -static av_always_inline void mask_edges(struct VP9Filter *lflvl, int is_uv, +static av_always_inline void mask_edges(uint8_t (*mask)[8][4], int is_uv, int row_and_7, int col_and_7, int w, int h, int col_end, int row_end, enum TxfmMode tx, int skip_inter) @@ -2894,8 +2894,8 @@ static av_always_inline void mask_edges(struct VP9Filter *lflvl, int is_uv, for (y = row_and_7; y < h + row_and_7; y++) { int col_mask_id = 2 - !(y & 7); - lflvl->mask[is_uv][0][y][1] |= m_row_8; - lflvl->mask[is_uv][0][y][2] |= m_row_4; + mask[0][y][1] |= m_row_8; + mask[0][y][2] |= m_row_4; // for odd lines, if the odd col is not being filtered, // skip odd row also: // .---. <-- a @@ -2907,9 +2907,9 @@ static av_always_inline void mask_edges(struct VP9Filter *lflvl, int is_uv, // if a/c are even row/col and b/d are odd, and d is skipped, // e.g. right edge of size-66x66.webm, then skip b also (bug) if ((col_end & 1) && (y & 1)) { - lflvl->mask[is_uv][1][y][col_mask_id] |= m_col_odd; + mask[1][y][col_mask_id] |= m_col_odd; } else { - lflvl->mask[is_uv][1][y][col_mask_id] |= m_col; + mask[1][y][col_mask_id] |= m_col; } } } else { @@ -2918,11 +2918,11 @@ static av_always_inline void mask_edges(struct VP9Filter *lflvl, int is_uv, for (y = row_and_7; y < h + row_and_7; y++) { int col_mask_id = 2 - !(y & 3); - lflvl->mask[is_uv][0][y][1] |= m_row_8; // row edge - lflvl->mask[is_uv][0][y][2] |= m_row_4; - lflvl->mask[is_uv][1][y][col_mask_id] |= m_col; // col edge - lflvl->mask[is_uv][0][y][3] |= m_col; - lflvl->mask[is_uv][1][y][3] |= m_col; + mask[0][y][1] |= m_row_8; // row edge + mask[0][y][2] |= m_row_4; + mask[1][y][col_mask_id] |= m_col; // col edge + mask[0][y][3] |= m_col; + mask[1][y][3] |= m_col; } } } else { @@ -2941,47 +2941,47 @@ static av_always_inline void mask_edges(struct VP9Filter *lflvl, int is_uv, int m_row_8 = m_row - m_row_16; for (y = row_and_7; y < h + row_and_7; y++) { - lflvl->mask[is_uv][0][y][0] |= m_row_16; - lflvl->mask[is_uv][0][y][1] |= m_row_8; + mask[0][y][0] |= m_row_16; + mask[0][y][1] |= m_row_8; } } else { for (y = row_and_7; y < h + row_and_7; y++) - lflvl->mask[is_uv][0][y][mask_id] |= m_row; + mask[0][y][mask_id] |= m_row; } if (is_uv && tx > TX_8X8 && (h ^ (h - 1)) == 1) { for (y = row_and_7; y < h + row_and_7 - 1; y += step1d) - lflvl->mask[is_uv][1][y][0] |= m_col; + mask[1][y][0] |= m_col; if (y - row_and_7 == h - 1) - lflvl->mask[is_uv][1][y][1] |= m_col; + mask[1][y][1] |= m_col; } else { for (y = row_and_7; y < h + row_and_7; y += step1d) - lflvl->mask[is_uv][1][y][mask_id] |= m_col; + mask[1][y][mask_id] |= m_col; } } else if (tx != TX_4X4) { int mask_id; mask_id = (tx == TX_8X8) || (is_uv && h == 1); - lflvl->mask[is_uv][1][row_and_7][mask_id] |= m_col; + mask[1][row_and_7][mask_id] |= m_col; mask_id = (tx == TX_8X8) || (is_uv && w == 1); for (y = row_and_7; y < h + row_and_7; y++) - lflvl->mask[is_uv][0][y][mask_id] |= t; + mask[0][y][mask_id] |= t; } else if (is_uv) { int t8 = t & 0x01, t4 = t - t8; for (y = row_and_7; y < h + row_and_7; y++) { - lflvl->mask[is_uv][0][y][2] |= t4; - lflvl->mask[is_uv][0][y][1] |= t8; + mask[0][y][2] |= t4; + mask[0][y][1] |= t8; } - lflvl->mask[is_uv][1][row_and_7][2 - !(row_and_7 & 7)] |= m_col; + mask[1][row_and_7][2 - !(row_and_7 & 7)] |= m_col; } else { int t8 = t & 0x11, t4 = t - t8; for (y = row_and_7; y < h + row_and_7; y++) { - lflvl->mask[is_uv][0][y][2] |= t4; - lflvl->mask[is_uv][0][y][1] |= t8; + mask[0][y][2] |= t4; + mask[0][y][1] |= t8; } - lflvl->mask[is_uv][1][row_and_7][2 - !(row_and_7 & 3)] |= m_col; + mask[1][row_and_7][2 - !(row_and_7 & 3)] |= m_col; } } } @@ -3131,9 +3131,9 @@ static void decode_b(AVCodecContext *ctx, int row, int col, int skip_inter = !b->intra && b->skip, col7 = s->col7, row7 = s->row7; setctx_2d(&lflvl->level[row7 * 8 + col7], w4, h4, 8, lvl); - mask_edges(lflvl, 0, row7, col7, x_end, y_end, 0, 0, b->tx, skip_inter); + mask_edges(lflvl->mask[0], 0, row7, col7, x_end, y_end, 0, 0, b->tx, skip_inter); if (s->ss_h || s->ss_v) - mask_edges(lflvl, 1, row7, col7, x_end, y_end, + mask_edges(lflvl->mask[1], 1, row7, col7, x_end, y_end, s->cols & 1 && col + w4 >= s->cols ? s->cols & 7 : 0, s->rows & 1 && row + h4 >= s->rows ? s->rows & 7 : 0, b->uvtx, skip_inter); |