On 21/11/14 13:57, Vittorio Giovara wrote:
> From: Michael Niedermayer <[email protected]>
>
> CC: [email protected]
> Bug-Id: CID 1194380 / CID 1194381
> ---
> libavcodec/vc1_block.c | 12 ++++++++----
> libavcodec/vc1_loopfilter.c | 14 +++++++-------
> 2 files changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c
> index acd5145..c14ef3a 100644
> --- a/libavcodec/vc1_block.c
> +++ b/libavcodec/vc1_block.c
> @@ -1649,7 +1649,8 @@ static int vc1_decode_p_mb_intfr(VC1Context *v)
> s->current_picture.motion_val[1][s->block_index[i]][1] = 0;
> }
> s->current_picture.mb_type[mb_pos] =
> MB_TYPE_INTRA;
> - s->mb_intra = v->is_intra[s->mb_x] = 1;
> + s->mb_intra = 1;
> + v->is_intra[s->mb_x] = 0x3F;
> for (i = 0; i < 6; i++)
> v->mb_type[0][s->block_index[i]] = 1;
> fieldtx = v->fieldtx_plane[mb_pos] = get_bits1(gb);
> @@ -1818,7 +1819,8 @@ static int vc1_decode_p_mb_intfi(VC1Context *v)
>
> idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_IF_MBMODE_VLC_BITS,
> 2);
> if (idx_mbmode <= 1) { // intra MB
> - s->mb_intra = v->is_intra[s->mb_x] = 1;
> + s->mb_intra = 1;
> + v->is_intra[s->mb_x] = 0x3F;
> s->current_picture.motion_val[1][s->block_index[0] +
> v->blocks_off][0] = 0;
> s->current_picture.motion_val[1][s->block_index[0] +
> v->blocks_off][1] = 0;
> s->current_picture.mb_type[mb_pos + v->mb_off] = MB_TYPE_INTRA;
> @@ -2095,7 +2097,8 @@ static void vc1_decode_b_mb_intfi(VC1Context *v)
>
> idx_mbmode = get_vlc2(gb, v->mbmode_vlc->table, VC1_IF_MBMODE_VLC_BITS,
> 2);
> if (idx_mbmode <= 1) { // intra MB
> - s->mb_intra = v->is_intra[s->mb_x] = 1;
> + s->mb_intra = 1;
> + v->is_intra[s->mb_x] = 0x3F;
> s->current_picture.motion_val[1][s->block_index[0]][0] = 0;
> s->current_picture.motion_val[1][s->block_index[0]][1] = 0;
> s->current_picture.mb_type[mb_pos + v->mb_off] =
> MB_TYPE_INTRA;
> @@ -2314,7 +2317,8 @@ static int vc1_decode_b_mb_intfr(VC1Context *v)
> s->mv[1][i][1] =
> s->current_picture.motion_val[1][s->block_index[i]][1] = 0;
> }
> s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA;
> - s->mb_intra = v->is_intra[s->mb_x] = 1;
> + s->mb_intra = 1;
> + v->is_intra[s->mb_x] = 0x3F;
> for (i = 0; i < 6; i++)
> v->mb_type[0][s->block_index[i]] = 1;
> fieldtx = v->fieldtx_plane[mb_pos] = get_bits1(gb);
The part above seems unrelated.
> diff --git a/libavcodec/vc1_loopfilter.c b/libavcodec/vc1_loopfilter.c
> index 1b76d83..78a5d65 100644
> --- a/libavcodec/vc1_loopfilter.c
> +++ b/libavcodec/vc1_loopfilter.c
> @@ -224,14 +224,14 @@ static av_always_inline void
> vc1_apply_p_v_loop_filter(VC1Context *v, int block_
>
> if (block_num > 3) {
> bottom_cbp = v->cbp[s->mb_x] >> (block_num * 4);
> - bottom_is_intra = v->is_intra[s->mb_x] >> (block_num * 4);
> + bottom_is_intra = v->is_intra[s->mb_x] >> block_num;
> mv = &v->luma_mv[s->mb_x - s->mb_stride];
> mv_stride = s->mb_stride;
> } else {
> bottom_cbp = (block_num < 2) ? (mb_cbp >>
> ((block_num + 2) * 4))
> : (v->cbp[s->mb_x] >>
> ((block_num - 2) * 4));
> - bottom_is_intra = (block_num < 2) ? (mb_is_intra >>
> ((block_num + 2) * 4))
> - : (v->is_intra[s->mb_x] >>
> ((block_num - 2) * 4));
> + bottom_is_intra = (block_num < 2) ? (mb_is_intra >>
> (block_num + 2))
> + : (v->is_intra[s->mb_x] >>
> (block_num - 2));
> mv_stride = s->b8_stride;
> mv =
> &s->current_picture.motion_val[0][s->block_index[block_num] - 2 * mv_stride];
> }
> @@ -273,7 +273,7 @@ static av_always_inline void
> vc1_apply_p_h_loop_filter(VC1Context *v, int block_
> int mb_cbp = v->cbp[s->mb_x - 1 - s->mb_stride],
> block_cbp = mb_cbp >> (block_num * 4), right_cbp,
> mb_is_intra = v->is_intra[s->mb_x - 1 - s->mb_stride],
> - block_is_intra = mb_is_intra >> (block_num * 4), right_is_intra;
> + block_is_intra = mb_is_intra >> block_num, right_is_intra;
> int idx, linesize = block_num > 3 ? s->uvlinesize : s->linesize, ttblk;
> uint8_t *dst;
>
> @@ -288,13 +288,13 @@ static av_always_inline void
> vc1_apply_p_h_loop_filter(VC1Context *v, int block_
>
> if (block_num > 3) {
> right_cbp = v->cbp[s->mb_x - s->mb_stride] >> (block_num *
> 4);
> - right_is_intra = v->is_intra[s->mb_x - s->mb_stride] >>
> (block_num * 4);
> + right_is_intra = v->is_intra[s->mb_x - s->mb_stride] >>
> block_num;
> mv = &v->luma_mv[s->mb_x - s->mb_stride - 1];
> } else {
> right_cbp = (block_num & 1) ? (v->cbp[s->mb_x -
> s->mb_stride] >> ((block_num - 1) * 4))
> : (mb_cbp
> >> ((block_num + 1) * 4));
> - right_is_intra = (block_num & 1) ? (v->is_intra[s->mb_x -
> s->mb_stride] >> ((block_num - 1) * 4))
> - : (mb_is_intra
> >> ((block_num + 1) * 4));
> + right_is_intra = (block_num & 1) ? (v->is_intra[s->mb_x -
> s->mb_stride] >> (block_num - 1))
> + : (mb_is_intra
> >> (block_num + 1));
> mv =
> &s->current_picture.motion_val[0][s->block_index[block_num] - s->b8_stride *
> 2 - 2];
> }
> if (block_is_intra & 1 || right_is_intra & 1 || mv[0][0] != mv[1][0]
> || mv[0][1] != mv[1][1]) {
>
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel