summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2013-04-29 11:28:56 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-04-29 11:28:56 -0700
commitc8bed9d4f9286704d6b8277e936247081d66c688 (patch)
tree865a921db613d602d6b2b8b85a94fcf8b0503114
parentf5ad77481485868e6ad6ccdc178741e82b627d10 (diff)
parent3ac3c4695c75d096874ea62a4dbdc38fa2869e4c (diff)
downloadlibvpx-c8bed9d4f9286704d6b8277e936247081d66c688.tar
libvpx-c8bed9d4f9286704d6b8277e936247081d66c688.tar.gz
libvpx-c8bed9d4f9286704d6b8277e936247081d66c688.tar.bz2
libvpx-c8bed9d4f9286704d6b8277e936247081d66c688.zip
Merge "Immigrate tokenize_mb into tokenize_sb" into experimental
-rw-r--r--vp9/encoder/vp9_encodeframe.c3
-rw-r--r--vp9/encoder/vp9_tokenize.c82
-rw-r--r--vp9/encoder/vp9_tokenize.h2
3 files changed, 11 insertions, 76 deletions
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index 6d5583bf3..aa1f6f389 100644
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -2167,8 +2167,7 @@ static void encode_macroblock(VP9_COMP *cpi, TOKENEXTRA **t,
}
#endif
- vp9_tokenize_mb(cpi, xd, t, !output_enabled);
-
+ vp9_tokenize_sb(cpi, xd, t, !output_enabled, BLOCK_SIZE_MB16X16);
} else {
// FIXME(rbultje): not tile-aware (mi - 1)
int mb_skip_context =
diff --git a/vp9/encoder/vp9_tokenize.c b/vp9/encoder/vp9_tokenize.c
index d1e4943f4..8fa1a3367 100644
--- a/vp9/encoder/vp9_tokenize.c
+++ b/vp9/encoder/vp9_tokenize.c
@@ -390,10 +390,7 @@ void vp9_tokenize_sb(VP9_COMP *cpi,
const int segment_id = mbmi->segment_id;
const int skip_inc = !vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP);
const TX_SIZE txfm_size = mbmi->txfm_size;
- const TX_SIZE uv_txfm_size = (bsize < BLOCK_SIZE_SB32X32 &&
- txfm_size == TX_16X16) ? TX_8X8 :
- (bsize < BLOCK_SIZE_SB64X64 &&
- txfm_size == TX_32X32) ? TX_16X16 : txfm_size;
+ TX_SIZE uv_txfm_size = get_uv_tx_size(xd);
int b;
const int n_y = (1 << (bwl + bhl)), n_uv = (n_y * 3) >> 1;
@@ -446,9 +443,15 @@ void vp9_tokenize_sb(VP9_COMP *cpi,
for (b = 0; b < n_y; b += 4)
tokenize_b(cpi, xd, b, t, PLANE_TYPE_Y_WITH_DC,
TX_8X8, n_y, dry_run);
- for (; b < n_uv; b += 4)
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV,
- TX_8X8, n_y, dry_run);
+ if (uv_txfm_size == TX_8X8) {
+ for (; b < n_uv; b += 4)
+ tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV,
+ TX_8X8, n_y, dry_run);
+ } else {
+ for (; b < n_uv; ++b)
+ tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV,
+ TX_4X4, n_y, dry_run);
+ }
break;
case TX_4X4:
for (b = 0; b < n_y; b++)
@@ -465,71 +468,6 @@ void vp9_tokenize_sb(VP9_COMP *cpi,
*t = t_backup;
}
-void vp9_tokenize_mb(VP9_COMP *cpi,
- MACROBLOCKD *xd,
- TOKENEXTRA **t,
- int dry_run) {
- int b;
- int tx_size = xd->mode_info_context->mbmi.txfm_size;
- int mb_skip_context = vp9_get_pred_context(&cpi->common, xd, PRED_MBSKIP);
- TOKENEXTRA *t_backup = *t;
-
- // If the MB is going to be skipped because of a segment level flag
- // exclude this from the skip count stats used to calculate the
- // transmitted skip probability;
- int skip_inc;
- int segment_id = xd->mode_info_context->mbmi.segment_id;
-
- if (!vp9_segfeature_active(xd, segment_id, SEG_LVL_SKIP)) {
- skip_inc = 1;
- } else
- skip_inc = 0;
-
- xd->mode_info_context->mbmi.mb_skip_coeff = vp9_sb_is_skippable(xd,
- BLOCK_SIZE_MB16X16);
-
- if (xd->mode_info_context->mbmi.mb_skip_coeff) {
- if (!dry_run)
- cpi->skip_true_count[mb_skip_context] += skip_inc;
- vp9_reset_sb_tokens_context(xd, BLOCK_SIZE_MB16X16);
-
- if (dry_run)
- *t = t_backup;
- return;
- }
-
- if (!dry_run)
- cpi->skip_false_count[mb_skip_context] += skip_inc;
-
- if (tx_size == TX_16X16) {
- tokenize_b(cpi, xd, 0, t, PLANE_TYPE_Y_WITH_DC, TX_16X16, 16, dry_run);
- for (b = 16; b < 24; b += 4) {
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV, TX_8X8, 16, dry_run);
- }
- } else if (tx_size == TX_8X8) {
- for (b = 0; b < 16; b += 4) {
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_Y_WITH_DC, TX_8X8, 16, dry_run);
- }
- if (xd->mode_info_context->mbmi.mode == I8X8_PRED ||
- xd->mode_info_context->mbmi.mode == SPLITMV) {
- for (b = 16; b < 24; b++) {
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV, TX_4X4, 16, dry_run);
- }
- } else {
- for (b = 16; b < 24; b += 4) {
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV, TX_8X8, 16, dry_run);
- }
- }
- } else {
- for (b = 0; b < 16; b++)
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_Y_WITH_DC, TX_4X4, 16, dry_run);
- for (b = 16; b < 24; b++)
- tokenize_b(cpi, xd, b, t, PLANE_TYPE_UV, TX_4X4, 16, dry_run);
- }
- if (dry_run)
- *t = t_backup;
-}
-
#ifdef ENTROPY_STATS
void init_context_counters(void) {
FILE *f = fopen("context.bin", "rb");
diff --git a/vp9/encoder/vp9_tokenize.h b/vp9/encoder/vp9_tokenize.h
index 816534830..bff5cfd4b 100644
--- a/vp9/encoder/vp9_tokenize.h
+++ b/vp9/encoder/vp9_tokenize.h
@@ -39,8 +39,6 @@ int vp9_sby_is_skippable(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize);
int vp9_sbuv_is_skippable(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize);
struct VP9_COMP;
-void vp9_tokenize_mb(struct VP9_COMP *cpi, MACROBLOCKD *xd,
- TOKENEXTRA **t, int dry_run);
void vp9_tokenize_sb(struct VP9_COMP *cpi, MACROBLOCKD *xd,
TOKENEXTRA **t, int dry_run, BLOCK_SIZE_TYPE bsize);