summaryrefslogtreecommitdiff
path: root/vp8/decoder
diff options
context:
space:
mode:
authorScott LaVarnway <slavarnway@google.com>2012-09-13 11:51:27 -0700
committerScott LaVarnway <slavarnway@google.com>2012-09-13 11:51:27 -0700
commit648cfcb4375f23a6bec67b84d3677c0db728bae6 (patch)
tree753a23f2d8f04671a1059c4f27aaba27ae65a8d1 /vp8/decoder
parent08cf9faed0ac907a14ee83c9b1d99dd57fd89be6 (diff)
downloadlibvpx-648cfcb4375f23a6bec67b84d3677c0db728bae6.tar
libvpx-648cfcb4375f23a6bec67b84d3677c0db728bae6.tar.gz
libvpx-648cfcb4375f23a6bec67b84d3677c0db728bae6.tar.bz2
libvpx-648cfcb4375f23a6bec67b84d3677c0db728bae6.zip
Changed setup intra recon to be row based
Initialize the top line at the beginning of each frame and the left column at the beginning of each row. Change-Id: I5412f7ea49ffc490215cf65a62715a6c5e3a5a29
Diffstat (limited to 'vp8/decoder')
-rw-r--r--vp8/decoder/decodframe.c14
-rw-r--r--vp8/decoder/threading.c13
2 files changed, 16 insertions, 11 deletions
diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c
index ea8798f47..03a6759ac 100644
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -553,6 +553,8 @@ static void decode_mb_rows(VP8D_COMP *pbi)
if(pc->filter_level)
vp8_loop_filter_frame_init(pc, xd, pc->filter_level);
+ vp8_setup_intra_recon_top_line(&pc->yv12_fb[dst_fb_idx]);
+
/* Decode the individual macro block */
for (mb_row = 0; mb_row < pc->mb_rows; mb_row++)
{
@@ -593,6 +595,10 @@ static void decode_mb_rows(VP8D_COMP *pbi)
xd->recon_left_stride[0] = xd->dst.y_stride;
xd->recon_left_stride[1] = xd->dst.uv_stride;
+ setup_intra_recon_left(xd->recon_left[0], xd->recon_left[1],
+ xd->recon_left[2], xd->dst.y_stride,
+ xd->dst.uv_stride);
+
for (mb_col = 0; mb_col < pc->mb_cols; mb_col++)
{
/* Distance of Mb to the various image edges.
@@ -1383,14 +1389,6 @@ int vp8_decode_frame(VP8D_COMP *pbi)
}
}
-
- /* set up frame new frame for intra coded blocks */
-#if CONFIG_MULTITHREAD
- if (!(pbi->b_multithreaded_rd) || pc->multi_token_partition == ONE_PARTITION || !(pc->filter_level))
-#endif
- vp8_setup_intra_recon(&pc->yv12_fb[pc->new_fb_idx]);
-
-
/* clear out the coeff buffer */
vpx_memset(xd->qcoeff, 0, sizeof(xd->qcoeff));
diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c
index dce1e4cd6..de14789cb 100644
--- a/vp8/decoder/threading.c
+++ b/vp8/decoder/threading.c
@@ -24,6 +24,7 @@
#include "detokenize.h"
#include "vp8/common/reconintra4x4.h"
#include "vp8/common/reconinter.h"
+#include "vp8/common/setupintrarecon.h"
#if CONFIG_ERROR_CONCEALMENT
#include "error_concealment.h"
#endif
@@ -399,6 +400,10 @@ static void mt_decode_mb_rows(VP8D_COMP *pbi, MACROBLOCKD *xd, int start_mb_row)
/* TODO: move to outside row loop */
xd->recon_left_stride[0] = xd->dst.y_stride;
xd->recon_left_stride[1] = xd->dst.uv_stride;
+
+ setup_intra_recon_left(xd->recon_left[0], xd->recon_left[1],
+ xd->recon_left[2], xd->dst.y_stride,
+ xd->dst.uv_stride);
}
for (mb_col = 0; mb_col < pc->mb_cols; mb_col++)
@@ -873,9 +878,9 @@ void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
if (filter_level)
{
/* Set above_row buffer to 127 for decoding first MB row */
- vpx_memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, pc->yv12_fb[pc->lst_fb_idx].y_width + 5);
- vpx_memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (pc->yv12_fb[pc->lst_fb_idx].y_width>>1) +5);
- vpx_memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (pc->yv12_fb[pc->lst_fb_idx].y_width>>1) +5);
+ vpx_memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, pc->yv12_fb[pc->new_fb_idx].y_width + 5);
+ vpx_memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (pc->yv12_fb[pc->new_fb_idx].y_width>>1) +5);
+ vpx_memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (pc->yv12_fb[pc->new_fb_idx].y_width>>1) +5);
for (j=1; j<pc->mb_rows; j++)
{
@@ -895,6 +900,8 @@ void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
/* Initialize the loop filter for this frame. */
vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level);
}
+ else
+ vp8_setup_intra_recon_top_line(&pc->yv12_fb[pc->new_fb_idx]);
setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_count);