summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vp9/decoder/dequantize.h6
-rw-r--r--vp9/decoder/idct_blk.c6
-rw-r--r--vp9/encoder/block.h2
-rw-r--r--vp9/encoder/encodeframe.c44
-rw-r--r--vp9/encoder/firstpass.c2
-rw-r--r--vpxenc.c8
6 files changed, 47 insertions, 21 deletions
diff --git a/vp9/decoder/dequantize.h b/vp9/decoder/dequantize.h
index 026bd2af6..4d7ee427d 100644
--- a/vp9/decoder/dequantize.h
+++ b/vp9/decoder/dequantize.h
@@ -76,7 +76,8 @@ void vp9_dequant_dc_idct_add_y_block_8x8_inplace_c(short *q, short *dq,
void vp9_dequant_dc_idct_add_y_block_4x4_inplace_c(short *q, short *dq,
unsigned char *dst,
- int stride, char *eobs,
+ int stride,
+ unsigned short *eobs,
short *dc, MACROBLOCKD *xd);
void vp9_dequant_idct_add_uv_block_8x8_inplace_c(short *q, short *dq,
@@ -89,7 +90,8 @@ void vp9_dequant_idct_add_uv_block_8x8_inplace_c(short *q, short *dq,
void vp9_dequant_idct_add_uv_block_4x4_inplace_c(short *q, short *dq,
unsigned char *dstu,
unsigned char *dstv,
- int stride, char *eobs,
+ int stride,
+ unsigned short *eobs,
MACROBLOCKD *xd);
#endif
diff --git a/vp9/decoder/idct_blk.c b/vp9/decoder/idct_blk.c
index efe451e6c..cbf96e0da 100644
--- a/vp9/decoder/idct_blk.c
+++ b/vp9/decoder/idct_blk.c
@@ -39,7 +39,8 @@ void vp9_dequant_dc_idct_add_y_block_c(short *q, short *dq,
#if CONFIG_SUPERBLOCKS
void vp9_dequant_dc_idct_add_y_block_4x4_inplace_c(short *q, short *dq,
unsigned char *dst,
- int stride, char *eobs,
+ int stride,
+ unsigned short *eobs,
short *dc, MACROBLOCKD *xd) {
int i, j;
@@ -131,7 +132,8 @@ void vp9_dequant_idct_add_uv_block_c(short *q, short *dq, unsigned char *pre,
void vp9_dequant_idct_add_uv_block_4x4_inplace_c(short *q, short *dq,
unsigned char *dstu,
unsigned char *dstv,
- int stride, char *eobs,
+ int stride,
+ unsigned short *eobs,
MACROBLOCKD *xd) {
int i, j;
diff --git a/vp9/encoder/block.h b/vp9/encoder/block.h
index 7c0099368..9f4d060cc 100644
--- a/vp9/encoder/block.h
+++ b/vp9/encoder/block.h
@@ -86,9 +86,11 @@ typedef struct {
typedef struct macroblock {
DECLARE_ALIGNED(16, short, src_diff[400]); // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y
DECLARE_ALIGNED(16, short, coeff[400]); // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y
+#if !CONFIG_SUPERBLOCKS
DECLARE_ALIGNED(16, unsigned char, thismb[256]); // 16x16 Y
unsigned char *thismb_ptr;
+#endif
// 16 Y blocks, 4 U blocks, 4 V blocks,
// 1 DC 2nd order block each with 16 entries
BLOCK block[25];
diff --git a/vp9/encoder/encodeframe.c b/vp9/encoder/encodeframe.c
index 12e517a36..0f5835c47 100644
--- a/vp9/encoder/encodeframe.c
+++ b/vp9/encoder/encodeframe.c
@@ -294,8 +294,10 @@ static void build_activity_map(VP9_COMP *cpi) {
xd->left_available = (mb_col != 0);
recon_yoffset += 16;
#endif
+#if !CONFIG_SUPERBLOCKS
// Copy current mb to a buffer
vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16);
+#endif
// measure activity
mb_activity = mb_activity_measure(cpi, x, mb_row, mb_col);
@@ -575,8 +577,10 @@ static void pick_mb_modes(VP9_COMP *cpi,
xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset;
xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset;
+#if !CONFIG_SUPERBLOCKS
// Copy current MB to a work buffer
vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16);
+#endif
x->rddiv = cpi->RDDIV;
x->rdmult = cpi->RDMULT;
@@ -953,8 +957,10 @@ static void encode_sb(VP9_COMP *cpi,
xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_uvoffset;
xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_uvoffset;
+#if !CONFIG_SUPERBLOCKS
// Copy current MB to a work buffer
vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16);
+#endif
if (cpi->oxcf.tuning == VP8_TUNE_SSIM)
vp9_activity_masking(cpi, x);
@@ -1694,6 +1700,7 @@ void vp9_build_block_offsets(MACROBLOCK *x) {
vp9_build_block_doffsets(&x->e_mbd);
+#if !CONFIG_SUPERBLOCKS
// y blocks
x->thismb_ptr = &x->thismb[0];
for (br = 0; br < 4; br++) {
@@ -1708,6 +1715,20 @@ void vp9_build_block_offsets(MACROBLOCK *x) {
++block;
}
}
+#else
+ for (br = 0; br < 4; br++) {
+ for (bc = 0; bc < 4; bc++) {
+ BLOCK *this_block = &x->block[block];
+ // this_block->base_src = &x->src.y_buffer;
+ // this_block->src_stride = x->src.y_stride;
+ // this_block->src = 4 * br * this_block->src_stride + 4 * bc;
+ this_block->base_src = &x->src.y_buffer;
+ this_block->src_stride = x->src.y_stride;
+ this_block->src = 4 * br * this_block->src_stride + 4 * bc;
+ ++block;
+ }
+ }
+#endif
// u blocks
for (br = 0; br < 2; br++) {
@@ -2297,6 +2318,13 @@ static void encode_inter_superblock(VP9_COMP *cpi, MACROBLOCK *x,
for (n = 0; n < 4; n++) {
int x_idx = n & 1, y_idx = n >> 1;
+ xd->left_context = cm->left_context + y_idx;
+ xd->above_context = cm->above_context + mb_col + x_idx;
+ memcpy(&ta[n], xd->above_context, sizeof(ta[n]));
+ memcpy(&tl[n], xd->left_context, sizeof(tl[n]));
+ tp[n] = *t;
+ xd->mode_info_context = mi + x_idx + y_idx * cm->mode_info_stride;
+
vp9_subtract_mby_s_c(x->src_diff,
src + x_idx * 16 + y_idx * 16 * src_y_stride,
src_y_stride,
@@ -2318,12 +2346,6 @@ static void encode_inter_superblock(VP9_COMP *cpi, MACROBLOCK *x,
if (!x->skip) {
if (output_enabled) {
- xd->left_context = cm->left_context + (n >> 1);
- xd->above_context = cm->above_context + mb_col + (n & 1);
- memcpy(&ta[n], xd->above_context, sizeof(ta[n]));
- memcpy(&tl[n], xd->left_context, sizeof(tl[n]));
- tp[n] = *t;
- xd->mode_info_context = mi + x_idx + y_idx * cm->mode_info_stride;
vp9_tokenize_mb(cpi, &x->e_mbd, t, 0);
skip[n] = xd->mode_info_context->mbmi.mb_skip_coeff;
}
@@ -2333,18 +2355,14 @@ static void encode_inter_superblock(VP9_COMP *cpi, MACROBLOCK *x,
(x->e_mbd.mode_info_context - 1)->mbmi.mb_skip_coeff +
(x->e_mbd.mode_info_context - cpi->common.mode_info_stride)->mbmi.mb_skip_coeff :
0;
+ xd->mode_info_context->mbmi.mb_skip_coeff = skip[n] = 1;
if (cpi->common.mb_no_coeff_skip) {
- skip[n] = xd->mode_info_context->mbmi.mb_skip_coeff = 1;
- xd->left_context = cm->left_context + (n >> 1);
- xd->above_context = cm->above_context + mb_col + (n & 1);
- memcpy(&ta[n], xd->above_context, sizeof(ta[n]));
- memcpy(&tl[n], xd->left_context, sizeof(tl[n]));
- tp[n] = *t;
+ // TODO(rbultje) this should be done per-sb instead of per-mb?
cpi->skip_true_count[mb_skip_context]++;
vp9_fix_contexts(xd);
} else {
vp9_stuff_mb(cpi, xd, t, 0);
- xd->mode_info_context->mbmi.mb_skip_coeff = 0;
+ // TODO(rbultje) this should be done per-sb instead of per-mb?
cpi->skip_false_count[mb_skip_context]++;
}
}
diff --git a/vp9/encoder/firstpass.c b/vp9/encoder/firstpass.c
index efc9fb3e8..db7c4d771 100644
--- a/vp9/encoder/firstpass.c
+++ b/vp9/encoder/firstpass.c
@@ -521,8 +521,10 @@ void vp9_first_pass(VP9_COMP *cpi) {
xd->dst.v_buffer = new_yv12->v_buffer + recon_uvoffset;
xd->left_available = (mb_col != 0);
+#if !CONFIG_SUPERBLOCKS
// Copy current mb to a buffer
vp9_copy_mem16x16(x->src.y_buffer, x->src.y_stride, x->thismb, 16);
+#endif
// do intra 16x16 prediction
this_error = vp9_encode_intra(cpi, x, use_dc_pred);
diff --git a/vpxenc.c b/vpxenc.c
index 72fdf855b..beb7030c4 100644
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -2240,7 +2240,7 @@ float usec_to_fps(uint64_t usec, unsigned int frames) {
}
-static void test_decode(struct stream_state *stream, unsigned int frames_in) {
+static void test_decode(struct stream_state *stream) {
vpx_codec_control(&stream->encoder, VP8_COPY_REFERENCE, &stream->ref_enc);
ctx_exit_on_error(&stream->encoder, "Failed to get encoder reference frame");
vpx_codec_control(&stream->decoder, VP8_COPY_REFERENCE, &stream->ref_dec);
@@ -2250,8 +2250,8 @@ static void test_decode(struct stream_state *stream, unsigned int frames_in) {
&& !compare_img(&stream->ref_enc.img, &stream->ref_dec.img)) {
/* TODO(jkoleszar): make fatal. */
warn("Stream %d: Encode/decode mismatch on frame %d",
- stream->index, frames_in);
- stream->mismatch_seen = frames_in;
+ stream->index, stream->frames_out);
+ stream->mismatch_seen = stream->frames_out;
}
}
@@ -2419,7 +2419,7 @@ int main(int argc, const char **argv_) {
FOREACH_STREAM(get_cx_data(stream, &global, &got_data));
if (got_data && global.test_decode)
- FOREACH_STREAM(test_decode(stream, frames_in));
+ FOREACH_STREAM(test_decode(stream));
}
fflush(stdout);