diff options
-rw-r--r-- | vp9/decoder/dequantize.h | 6 | ||||
-rw-r--r-- | vp9/decoder/idct_blk.c | 6 | ||||
-rw-r--r-- | vp9/encoder/block.h | 2 | ||||
-rw-r--r-- | vp9/encoder/encodeframe.c | 44 | ||||
-rw-r--r-- | vp9/encoder/firstpass.c | 2 | ||||
-rw-r--r-- | vpxenc.c | 8 |
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); @@ -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); |