summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorDmitry Kovalev <dkovalev@google.com>2013-06-05 20:56:37 -0700
committerDmitry Kovalev <dkovalev@google.com>2013-06-05 20:56:37 -0700
commit12345cb3913a2b646c46b532dad3aa6a116a8be4 (patch)
tree7d536693aa5e793c8b70bc026db9d3e535e5f831 /vp9/common
parent30226a658f7e9c36aa8bb259af167b07ab4e2f25 (diff)
downloadlibvpx-12345cb3913a2b646c46b532dad3aa6a116a8be4.tar
libvpx-12345cb3913a2b646c46b532dad3aa6a116a8be4.tar.gz
libvpx-12345cb3913a2b646c46b532dad3aa6a116a8be4.tar.bz2
libvpx-12345cb3913a2b646c46b532dad3aa6a116a8be4.zip
Moving bits from compressed header to uncompressed one.
Bits moved: refresh_frame_flags, active_ref_idx[], ref_frame_sign_bias[], allow_high_precision_mv, mcomp_filter_type, ref_pred_probs[]. Derf results: +0.040% Change-Id: I011f43c7eac0371d533b255fd99aee5ed75b85a5
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_alloccommon.c151
-rw-r--r--vp9/common/vp9_alloccommon.h2
-rw-r--r--vp9/common/vp9_enums.h2
-rw-r--r--vp9/common/vp9_onyxc_int.h5
4 files changed, 68 insertions, 92 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index ef14e1ab6..b770d0505 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -10,41 +10,39 @@
#include "./vpx_config.h"
-#include "vp9/common/vp9_blockd.h"
#include "vpx_mem/vpx_mem.h"
-#include "vp9/common/vp9_onyxc_int.h"
-#include "vp9/common/vp9_findnearmv.h"
+#include "vp9/common/vp9_blockd.h"
#include "vp9/common/vp9_entropymode.h"
#include "vp9/common/vp9_entropymv.h"
+#include "vp9/common/vp9_findnearmv.h"
+#include "vp9/common/vp9_onyxc_int.h"
#include "vp9/common/vp9_systemdependent.h"
-
-void vp9_update_mode_info_border(VP9_COMMON *cpi, MODE_INFO *mi) {
- const int stride = cpi->mode_info_stride;
+void vp9_update_mode_info_border(VP9_COMMON *cm, MODE_INFO *mi) {
+ const int stride = cm->mode_info_stride;
int i;
// Clear down top border row
vpx_memset(mi, 0, sizeof(MODE_INFO) * stride);
// Clear left border column
- for (i = 1; i < cpi->mi_rows + 1; i++)
+ for (i = 1; i < cm->mi_rows + 1; i++)
vpx_memset(&mi[i * stride], 0, sizeof(MODE_INFO));
}
-void vp9_update_mode_info_in_image(VP9_COMMON *cpi, MODE_INFO *mi) {
+void vp9_update_mode_info_in_image(VP9_COMMON *cm, MODE_INFO *mi) {
int i, j;
- MODE_INFO *ptr;
// For each in image mode_info element set the in image flag to 1
- for (i = 0; i < cpi->mi_rows; i++) {
- ptr = mi;
- for (j = 0; j < cpi->mi_cols; j++) {
+ for (i = 0; i < cm->mi_rows; i++) {
+ MODE_INFO *ptr = mi;
+ for (j = 0; j < cm->mi_cols; j++) {
ptr->mbmi.mb_in_image = 1;
ptr++; // Next element in the row
}
// Step over border element at start of next row
- mi += cpi->mode_info_stride;
+ mi += cm->mode_info_stride;
}
}
@@ -69,23 +67,46 @@ void vp9_free_frame_buffers(VP9_COMMON *oci) {
oci->above_seg_context = 0;
}
+static void set_mb_mi(VP9_COMMON *cm, int aligned_width, int aligned_height) {
+ cm->mb_cols = aligned_width >> 4;
+ cm->mb_rows = aligned_height >> 4;
+ cm->MBs = cm->mb_rows * cm->mb_cols;
+
+ cm->mi_cols = aligned_width >> LOG2_MI_SIZE;
+ cm->mi_rows = aligned_height >> LOG2_MI_SIZE;
+ cm->mode_info_stride = cm->mi_cols + 1;
+}
+
+static void setup_mi(VP9_COMMON *cm) {
+ cm->mi = cm->mip + cm->mode_info_stride + 1;
+ cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1;
+
+ vpx_memset(cm->mip, 0,
+ cm->mode_info_stride * (cm->mi_rows + 1) * sizeof(MODE_INFO));
+
+ vp9_update_mode_info_border(cm, cm->mip);
+ vp9_update_mode_info_in_image(cm, cm->mi);
+
+ vp9_update_mode_info_border(cm, cm->prev_mip);
+ vp9_update_mode_info_in_image(cm, cm->prev_mi);
+}
+
int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
int i, mi_cols;
// Our internal buffers are always multiples of 16
const int aligned_width = multiple16(width);
const int aligned_height = multiple16(height);
+ const int ss_x = oci->subsampling_x;
+ const int ss_y = oci->subsampling_y;
vp9_free_frame_buffers(oci);
for (i = 0; i < NUM_YV12_BUFFERS; i++) {
oci->fb_idx_ref_cnt[i] = 0;
- if (vp9_alloc_frame_buffer(&oci->yv12_fb[i], width, height,
- oci->subsampling_x, oci->subsampling_y,
- VP9BORDERINPIXELS) < 0) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
+ if (vp9_alloc_frame_buffer(&oci->yv12_fb[i], width, height, ss_x, ss_y,
+ VP9BORDERINPIXELS) < 0)
+ goto fail;
}
oci->new_fb_idx = NUM_YV12_BUFFERS - 1;
@@ -99,47 +120,28 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
oci->fb_idx_ref_cnt[i] = 1;
}
- if (vp9_alloc_frame_buffer(&oci->temp_scale_frame, width, 16,
- oci->subsampling_x, oci->subsampling_y,
- VP9BORDERINPIXELS) < 0) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
+ if (vp9_alloc_frame_buffer(&oci->temp_scale_frame, width, 16, ss_x, ss_y,
+ VP9BORDERINPIXELS) < 0)
+ goto fail;
- if (vp9_alloc_frame_buffer(&oci->post_proc_buffer, width, height,
- oci->subsampling_x, oci->subsampling_y,
- VP9BORDERINPIXELS) < 0) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
+ if (vp9_alloc_frame_buffer(&oci->post_proc_buffer, width, height, ss_x, ss_y,
+ VP9BORDERINPIXELS) < 0)
+ goto fail;
+
+ set_mb_mi(oci, aligned_width, aligned_height);
- oci->mb_rows = aligned_height >> 4;
- oci->mi_rows = aligned_height >> LOG2_MI_SIZE;
- oci->mb_cols = aligned_width >> 4;
- oci->mi_cols = aligned_width >> LOG2_MI_SIZE;
- oci->MBs = oci->mb_rows * oci->mb_cols;
- oci->mode_info_stride = oci->mi_cols + 1;
+ // Allocation
oci->mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1),
sizeof(MODE_INFO));
-
- if (!oci->mip) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
-
- oci->mi = oci->mip + oci->mode_info_stride + 1;
-
- /* allocate memory for last frame MODE_INFO array */
+ if (!oci->mip)
+ goto fail;
oci->prev_mip = vpx_calloc(oci->mode_info_stride * (oci->mi_rows + 1),
sizeof(MODE_INFO));
+ if (!oci->prev_mip)
+ goto fail;
- if (!oci->prev_mip) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
-
- oci->prev_mi = oci->prev_mip + oci->mode_info_stride + 1;
+ setup_mi(oci);
// FIXME(jkoleszar): allocate subsampled arrays for U/V once subsampling
// information is exposed at this level
@@ -150,26 +152,22 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
#else
oci->above_context[0] = vpx_calloc(sizeof(ENTROPY_CONTEXT) * 6 * mi_cols, 1);
#endif
- if (!oci->above_context[0]) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
+ if (!oci->above_context[0])
+ goto fail;
+
for (i = 1; i < MAX_MB_PLANE; i++)
oci->above_context[i] =
oci->above_context[0] + i * sizeof(ENTROPY_CONTEXT) * 2 * mi_cols;
- oci->above_seg_context =
- vpx_calloc(sizeof(PARTITION_CONTEXT) * mi_cols, 1);
-
- if (!oci->above_seg_context) {
- vp9_free_frame_buffers(oci);
- return 1;
- }
-
- vp9_update_mode_info_border(oci, oci->mip);
- vp9_update_mode_info_in_image(oci, oci->mi);
+ oci->above_seg_context = vpx_calloc(sizeof(PARTITION_CONTEXT) * mi_cols, 1);
+ if (!oci->above_seg_context)
+ goto fail;
return 0;
+
+ fail:
+ vp9_free_frame_buffers(oci);
+ return 1;
}
void vp9_setup_version(VP9_COMMON *cm) {
@@ -222,27 +220,10 @@ void vp9_initialize_common() {
vp9_entropy_mv_init();
}
-
void vp9_update_frame_size(VP9_COMMON *cm) {
const int aligned_width = multiple16(cm->width);
const int aligned_height = multiple16(cm->height);
- cm->mb_rows = aligned_height >> 4;
- cm->mb_cols = aligned_width >> 4;
-
- cm->mi_rows = aligned_height >> LOG2_MI_SIZE;
- cm->mi_cols = aligned_width >> LOG2_MI_SIZE;
-
- cm->MBs = cm->mb_rows * cm->mb_cols;
- cm->mode_info_stride = cm->mi_cols + 1;
- cm->mi = cm->mip + cm->mode_info_stride + 1;
- cm->prev_mi = cm->prev_mip + cm->mode_info_stride + 1;
-
- memset(cm->mip, 0,
- cm->mode_info_stride * (cm->mi_rows + 1) * sizeof(MODE_INFO));
- vp9_update_mode_info_border(cm, cm->mip);
- vp9_update_mode_info_in_image(cm, cm->mi);
-
- vp9_update_mode_info_border(cm, cm->prev_mip);
- vp9_update_mode_info_in_image(cm, cm->prev_mi);
+ set_mb_mi(cm, aligned_width, aligned_height);
+ setup_mi(cm);
}
diff --git a/vp9/common/vp9_alloccommon.h b/vp9/common/vp9_alloccommon.h
index 814a7607a..fc79f6377 100644
--- a/vp9/common/vp9_alloccommon.h
+++ b/vp9/common/vp9_alloccommon.h
@@ -14,6 +14,8 @@
#include "vp9/common/vp9_onyxc_int.h"
+void vp9_initialize_common();
+
void vp9_update_mode_info_border(VP9_COMMON *cpi, MODE_INFO *mi);
void vp9_update_mode_info_in_image(VP9_COMMON *cpi, MODE_INFO *mi);
diff --git a/vp9/common/vp9_enums.h b/vp9/common/vp9_enums.h
index 7fb0d895d..e18d353d3 100644
--- a/vp9/common/vp9_enums.h
+++ b/vp9/common/vp9_enums.h
@@ -16,8 +16,6 @@
#define LOG2_MI_SIZE 3
#define MI_SIZE (1 << LOG2_MI_SIZE)
-#define MI_UV_SIZE (1 << (LOG2_MI_SIZE - 1))
-
#define MI_MASK ((64 >> LOG2_MI_SIZE) - 1)
typedef enum BLOCK_SIZE_TYPE {
diff --git a/vp9/common/vp9_onyxc_int.h b/vp9/common/vp9_onyxc_int.h
index 665f00e91..ddc0c39ab 100644
--- a/vp9/common/vp9_onyxc_int.h
+++ b/vp9/common/vp9_onyxc_int.h
@@ -26,8 +26,6 @@
/* Create/destroy static data structures. */
-void vp9_initialize_common(void);
-
// Define the number of candidate reference buffers.
#define NUM_REF_FRAMES 8
#define NUM_REF_FRAMES_LG2 3
@@ -248,9 +246,6 @@ typedef struct VP9Common {
int near_boffset[3];
int version;
-#ifdef PACKET_TESTING
- VP9_HEADER oh;
-#endif
double bitrate;
double framerate;