|
|
|
@@ -411,17 +411,17 @@ static inline int svq3_mc_dir(H264Context *h, int size, int mode, int dir, |
|
|
|
int32_t mv = pack16to32(mx,my); |
|
|
|
|
|
|
|
if (part_height == 8 && i < 8) { |
|
|
|
*(int32_t *) h->mv_cache[dir][scan8[k] + 1*8] = mv; |
|
|
|
AV_WN32A(h->mv_cache[dir][scan8[k] + 1*8], mv); |
|
|
|
|
|
|
|
if (part_width == 8 && j < 8) { |
|
|
|
*(int32_t *) h->mv_cache[dir][scan8[k] + 1 + 1*8] = mv; |
|
|
|
AV_WN32A(h->mv_cache[dir][scan8[k] + 1 + 1*8], mv); |
|
|
|
} |
|
|
|
} |
|
|
|
if (part_width == 8 && j < 8) { |
|
|
|
*(int32_t *) h->mv_cache[dir][scan8[k] + 1] = mv; |
|
|
|
AV_WN32A(h->mv_cache[dir][scan8[k] + 1], mv); |
|
|
|
} |
|
|
|
if (part_width == 4 || part_height == 4) { |
|
|
|
*(int32_t *) h->mv_cache[dir][scan8[k]] = mv; |
|
|
|
AV_WN32A(h->mv_cache[dir][scan8[k]], mv); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@@ -489,11 +489,11 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type) |
|
|
|
for (m = 0; m < 2; m++) { |
|
|
|
if (s->mb_x > 0 && h->intra4x4_pred_mode[h->mb2br_xy[mb_xy - 1]+6] != -1) { |
|
|
|
for (i = 0; i < 4; i++) { |
|
|
|
*(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = *(uint32_t *) s->current_picture.f.motion_val[m][b_xy - 1 + i*h->b_stride]; |
|
|
|
AV_COPY32(h->mv_cache[m][scan8[0] - 1 + i*8], s->current_picture.f.motion_val[m][b_xy - 1 + i*h->b_stride]); |
|
|
|
} |
|
|
|
} else { |
|
|
|
for (i = 0; i < 4; i++) { |
|
|
|
*(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = 0; |
|
|
|
AV_ZERO32(h->mv_cache[m][scan8[0] - 1 + i*8]); |
|
|
|
} |
|
|
|
} |
|
|
|
if (s->mb_y > 0) { |
|
|
|
@@ -501,14 +501,14 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type) |
|
|
|
memset(&h->ref_cache[m][scan8[0] - 1*8], (h->intra4x4_pred_mode[h->mb2br_xy[mb_xy - s->mb_stride]] == -1) ? PART_NOT_AVAILABLE : 1, 4); |
|
|
|
|
|
|
|
if (s->mb_x < (s->mb_width - 1)) { |
|
|
|
*(uint32_t *) h->mv_cache[m][scan8[0] + 4 - 1*8] = *(uint32_t *) s->current_picture.f.motion_val[m][b_xy - h->b_stride + 4]; |
|
|
|
AV_COPY32(h->mv_cache[m][scan8[0] + 4 - 1*8], s->current_picture.f.motion_val[m][b_xy - h->b_stride + 4]); |
|
|
|
h->ref_cache[m][scan8[0] + 4 - 1*8] = |
|
|
|
(h->intra4x4_pred_mode[h->mb2br_xy[mb_xy - s->mb_stride + 1]+6] == -1 || |
|
|
|
h->intra4x4_pred_mode[h->mb2br_xy[mb_xy - s->mb_stride ] ] == -1) ? PART_NOT_AVAILABLE : 1; |
|
|
|
}else |
|
|
|
h->ref_cache[m][scan8[0] + 4 - 1*8] = PART_NOT_AVAILABLE; |
|
|
|
if (s->mb_x > 0) { |
|
|
|
*(uint32_t *) h->mv_cache[m][scan8[0] - 1 - 1*8] = *(uint32_t *) s->current_picture.f.motion_val[m][b_xy - h->b_stride - 1]; |
|
|
|
AV_COPY32(h->mv_cache[m][scan8[0] - 1 - 1*8], s->current_picture.f.motion_val[m][b_xy - h->b_stride - 1]); |
|
|
|
h->ref_cache[m][scan8[0] - 1 - 1*8] = (h->intra4x4_pred_mode[h->mb2br_xy[mb_xy - s->mb_stride - 1]+3] == -1) ? PART_NOT_AVAILABLE : 1; |
|
|
|
}else |
|
|
|
h->ref_cache[m][scan8[0] - 1 - 1*8] = PART_NOT_AVAILABLE; |
|
|
|
@@ -660,7 +660,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type) |
|
|
|
if (IS_INTRA16x16(mb_type)) { |
|
|
|
AV_ZERO128(h->mb_luma_dc[0]+0); |
|
|
|
AV_ZERO128(h->mb_luma_dc[0]+8); |
|
|
|
if (svq3_decode_block(&s->gb, *h->mb_luma_dc, 0, 1)){ |
|
|
|
if (svq3_decode_block(&s->gb, h->mb_luma_dc[0], 0, 1)){ |
|
|
|
av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding intra luma dc\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|