Merge remote branch 'internal/upstream' into HEAD

Conflicts:
	vp8/decoder/decodemv.c
	vp8/decoder/onyxd_if.c
	vp8/encoder/ratectrl.c
	vp8/encoder/rdopt.c

Change-Id: Ia1c1c5e589f4200822d12378c7749ba62bd17ae2
This commit is contained in:
John Koleszar 2011-03-23 00:27:52 -04:00
commit 51bcf621c1
38 changed files with 364 additions and 809 deletions

View File

@ -20,7 +20,7 @@
extern void vp8_init_scan_order_mask(); extern void vp8_init_scan_order_mask();
void vp8_update_mode_info_border(MODE_INFO *mi, int rows, int cols) static void update_mode_info_border(MODE_INFO *mi, int rows, int cols)
{ {
int i; int i;
vpx_memset(mi - cols - 2, 0, sizeof(MODE_INFO) * (cols + 1)); vpx_memset(mi - cols - 2, 0, sizeof(MODE_INFO) * (cols + 1));
@ -119,7 +119,7 @@ int vp8_alloc_frame_buffers(VP8_COMMON *oci, int width, int height)
return 1; return 1;
} }
vp8_update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols); update_mode_info_border(oci->mi, oci->mb_rows, oci->mb_cols);
return 0; return 0;
} }

View File

@ -38,7 +38,7 @@ DECLARE_ALIGNED(16, const short, vp8_sub_pel_filters[8][6]) =
{ 0, -1, 12, 123, -6, 0 }, { 0, -1, 12, 123, -6, 0 },
}; };
void vp8_filter_block2d_first_pass static void filter_block2d_first_pass
( (
unsigned char *src_ptr, unsigned char *src_ptr,
int *output_ptr, int *output_ptr,
@ -82,7 +82,7 @@ void vp8_filter_block2d_first_pass
} }
} }
void vp8_filter_block2d_second_pass static void filter_block2d_second_pass
( (
int *src_ptr, int *src_ptr,
unsigned char *output_ptr, unsigned char *output_ptr,
@ -129,7 +129,7 @@ void vp8_filter_block2d_second_pass
} }
void vp8_filter_block2d static void filter_block2d
( (
unsigned char *src_ptr, unsigned char *src_ptr,
unsigned char *output_ptr, unsigned char *output_ptr,
@ -142,39 +142,13 @@ void vp8_filter_block2d
int FData[9*4]; /* Temp data buffer used in filtering */ int FData[9*4]; /* Temp data buffer used in filtering */
/* First filter 1-D horizontally... */ /* First filter 1-D horizontally... */
vp8_filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 4, HFilter); filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 4, HFilter);
/* then filter verticaly... */ /* then filter verticaly... */
vp8_filter_block2d_second_pass(FData + 8, output_ptr, output_pitch, 4, 4, 4, 4, VFilter); filter_block2d_second_pass(FData + 8, output_ptr, output_pitch, 4, 4, 4, 4, VFilter);
} }
void vp8_block_variation_c
(
unsigned char *src_ptr,
int src_pixels_per_line,
int *HVar,
int *VVar
)
{
int i, j;
unsigned char *Ptr = src_ptr;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
*HVar += abs((int)Ptr[j] - (int)Ptr[j+1]);
*VVar += abs((int)Ptr[j] - (int)Ptr[j+src_pixels_per_line]);
}
Ptr += src_pixels_per_line;
}
}
void vp8_sixtap_predict_c void vp8_sixtap_predict_c
( (
unsigned char *src_ptr, unsigned char *src_ptr,
@ -191,7 +165,7 @@ void vp8_sixtap_predict_c
HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
vp8_filter_block2d(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter); filter_block2d(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter);
} }
void vp8_sixtap_predict8x8_c void vp8_sixtap_predict8x8_c
( (
@ -211,11 +185,11 @@ void vp8_sixtap_predict8x8_c
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
/* First filter 1-D horizontally... */ /* First filter 1-D horizontally... */
vp8_filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 13, 8, HFilter); filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 13, 8, HFilter);
/* then filter verticaly... */ /* then filter verticaly... */
vp8_filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 8, 8, VFilter); filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 8, 8, VFilter);
} }
@ -237,11 +211,11 @@ void vp8_sixtap_predict8x4_c
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
/* First filter 1-D horizontally... */ /* First filter 1-D horizontally... */
vp8_filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 8, HFilter); filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 8, HFilter);
/* then filter verticaly... */ /* then filter verticaly... */
vp8_filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 4, 8, VFilter); filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 4, 8, VFilter);
} }
@ -264,10 +238,10 @@ void vp8_sixtap_predict16x16_c
VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */
/* First filter 1-D horizontally... */ /* First filter 1-D horizontally... */
vp8_filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 21, 16, HFilter); filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 21, 16, HFilter);
/* then filter verticaly... */ /* then filter verticaly... */
vp8_filter_block2d_second_pass(FData + 32, dst_ptr, dst_pitch, 16, 16, 16, 16, VFilter); filter_block2d_second_pass(FData + 32, dst_ptr, dst_pitch, 16, 16, 16, 16, VFilter);
} }
@ -294,7 +268,7 @@ void vp8_sixtap_predict16x16_c
* Two filter taps should sum to VP8_FILTER_WEIGHT. * Two filter taps should sum to VP8_FILTER_WEIGHT.
* *
****************************************************************************/ ****************************************************************************/
void vp8_filter_block2d_bil_first_pass static void filter_block2d_bil_first_pass
( (
unsigned char *src_ptr, unsigned char *src_ptr,
unsigned short *dst_ptr, unsigned short *dst_ptr,
@ -345,7 +319,7 @@ void vp8_filter_block2d_bil_first_pass
* Two filter taps should sum to VP8_FILTER_WEIGHT. * Two filter taps should sum to VP8_FILTER_WEIGHT.
* *
****************************************************************************/ ****************************************************************************/
void vp8_filter_block2d_bil_second_pass static void filter_block2d_bil_second_pass
( (
unsigned short *src_ptr, unsigned short *src_ptr,
unsigned char *dst_ptr, unsigned char *dst_ptr,
@ -399,7 +373,7 @@ void vp8_filter_block2d_bil_second_pass
* SPECIAL NOTES : The largest block size can be handled here is 16x16 * SPECIAL NOTES : The largest block size can be handled here is 16x16
* *
****************************************************************************/ ****************************************************************************/
void vp8_filter_block2d_bil static void filter_block2d_bil
( (
unsigned char *src_ptr, unsigned char *src_ptr,
unsigned char *dst_ptr, unsigned char *dst_ptr,
@ -415,10 +389,10 @@ void vp8_filter_block2d_bil
unsigned short FData[17*16]; /* Temp data buffer used in filtering */ unsigned short FData[17*16]; /* Temp data buffer used in filtering */
/* First filter 1-D horizontally... */ /* First filter 1-D horizontally... */
vp8_filter_block2d_bil_first_pass(src_ptr, FData, src_pitch, Height + 1, Width, HFilter); filter_block2d_bil_first_pass(src_ptr, FData, src_pitch, Height + 1, Width, HFilter);
/* then 1-D vertically... */ /* then 1-D vertically... */
vp8_filter_block2d_bil_second_pass(FData, dst_ptr, dst_pitch, Height, Width, VFilter); filter_block2d_bil_second_pass(FData, dst_ptr, dst_pitch, Height, Width, VFilter);
} }
@ -444,19 +418,19 @@ void vp8_bilinear_predict4x4_c
unsigned char temp2[16]; unsigned char temp2[16];
bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4); bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4);
vp8_filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4); filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4);
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
{ {
if (temp1[i] != temp2[i]) if (temp1[i] != temp2[i])
{ {
bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4); bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4);
vp8_filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4); filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4);
} }
} }
} }
#endif #endif
vp8_filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4); filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4);
} }
@ -476,7 +450,7 @@ void vp8_bilinear_predict8x8_c
HFilter = vp8_bilinear_filters[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8_filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8); filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8);
} }
@ -496,7 +470,7 @@ void vp8_bilinear_predict8x4_c
HFilter = vp8_bilinear_filters[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8_filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4); filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4);
} }
@ -516,5 +490,5 @@ void vp8_bilinear_predict16x16_c
HFilter = vp8_bilinear_filters[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_filters[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8_filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16); filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16);
} }

View File

@ -11,6 +11,13 @@
#include "findnearmv.h" #include "findnearmv.h"
const unsigned char vp8_mbsplit_offset[4][16] = {
{ 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 2, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
};
/* Predict motion vectors using those from already-decoded nearby blocks. /* Predict motion vectors using those from already-decoded nearby blocks.
Note that we only consider one 4x4 subblock from each candidate 16x16 Note that we only consider one 4x4 subblock from each candidate 16x16
macroblock. */ macroblock. */

View File

@ -70,4 +70,6 @@ const B_MODE_INFO *vp8_left_bmi(const MODE_INFO *cur_mb, int b);
const B_MODE_INFO *vp8_above_bmi(const MODE_INFO *cur_mb, int b, int mi_stride); const B_MODE_INFO *vp8_above_bmi(const MODE_INFO *cur_mb, int b, int mi_stride);
extern const unsigned char vp8_mbsplit_offset[4][16];
#endif #endif

View File

@ -17,7 +17,7 @@ typedef enum
DEST = 1 DEST = 1
} BLOCKSET; } BLOCKSET;
void vp8_setup_block static void setup_block
( (
BLOCKD *b, BLOCKD *b,
int mv_stride, int mv_stride,
@ -43,7 +43,8 @@ void vp8_setup_block
} }
void vp8_setup_macroblock(MACROBLOCKD *x, BLOCKSET bs)
static void setup_macroblock(MACROBLOCKD *x, BLOCKSET bs)
{ {
int block; int block;
@ -64,16 +65,16 @@ void vp8_setup_macroblock(MACROBLOCKD *x, BLOCKSET bs)
for (block = 0; block < 16; block++) /* y blocks */ for (block = 0; block < 16; block++) /* y blocks */
{ {
vp8_setup_block(&x->block[block], x->dst.y_stride, y, x->dst.y_stride, setup_block(&x->block[block], x->dst.y_stride, y, x->dst.y_stride,
(block >> 2) * 4 * x->dst.y_stride + (block & 3) * 4, bs); (block >> 2) * 4 * x->dst.y_stride + (block & 3) * 4, bs);
} }
for (block = 16; block < 20; block++) /* U and V blocks */ for (block = 16; block < 20; block++) /* U and V blocks */
{ {
vp8_setup_block(&x->block[block], x->dst.uv_stride, u, x->dst.uv_stride, setup_block(&x->block[block], x->dst.uv_stride, u, x->dst.uv_stride,
((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4, bs); ((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4, bs);
vp8_setup_block(&x->block[block+4], x->dst.uv_stride, v, x->dst.uv_stride, setup_block(&x->block[block+4], x->dst.uv_stride, v, x->dst.uv_stride,
((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4, bs); ((block - 16) >> 1) * 4 * x->dst.uv_stride + (block & 1) * 4, bs);
} }
} }
@ -124,6 +125,6 @@ void vp8_build_block_doffsets(MACROBLOCKD *x)
{ {
/* handle the destination pitch features */ /* handle the destination pitch features */
vp8_setup_macroblock(x, DEST); setup_macroblock(x, DEST);
vp8_setup_macroblock(x, PRED); setup_macroblock(x, PRED);
} }

View File

@ -211,7 +211,7 @@ void vp8_post_proc_down_and_across_c
} }
} }
int vp8_q2mbl(int x) static int q2mbl(int x)
{ {
if (x < 20) x = 20; if (x < 20) x = 20;
@ -314,8 +314,8 @@ static void vp8_deblock_and_de_macro_block(YV12_BUFFER_CONFIG *source,
(void) flag; (void) flag;
POSTPROC_INVOKE(rtcd, downacross)(source->y_buffer, post->y_buffer, source->y_stride, post->y_stride, source->y_height, source->y_width, ppl); POSTPROC_INVOKE(rtcd, downacross)(source->y_buffer, post->y_buffer, source->y_stride, post->y_stride, source->y_height, source->y_width, ppl);
POSTPROC_INVOKE(rtcd, across)(post->y_buffer, post->y_stride, post->y_height, post->y_width, vp8_q2mbl(q)); POSTPROC_INVOKE(rtcd, across)(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
POSTPROC_INVOKE(rtcd, down)(post->y_buffer, post->y_stride, post->y_height, post->y_width, vp8_q2mbl(q)); POSTPROC_INVOKE(rtcd, down)(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
POSTPROC_INVOKE(rtcd, downacross)(source->u_buffer, post->u_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl); POSTPROC_INVOKE(rtcd, downacross)(source->u_buffer, post->u_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
POSTPROC_INVOKE(rtcd, downacross)(source->v_buffer, post->v_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl); POSTPROC_INVOKE(rtcd, downacross)(source->v_buffer, post->v_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);

View File

@ -168,7 +168,7 @@ void vp8_build_inter_predictors_b(BLOCKD *d, int pitch, vp8_subpix_fn_t sppf)
} }
} }
void vp8_build_inter_predictors4b(MACROBLOCKD *x, BLOCKD *d, int pitch) static void build_inter_predictors4b(MACROBLOCKD *x, BLOCKD *d, int pitch)
{ {
unsigned char *ptr_base; unsigned char *ptr_base;
unsigned char *ptr; unsigned char *ptr;
@ -187,7 +187,7 @@ void vp8_build_inter_predictors4b(MACROBLOCKD *x, BLOCKD *d, int pitch)
} }
} }
void vp8_build_inter_predictors2b(MACROBLOCKD *x, BLOCKD *d, int pitch) static void build_inter_predictors2b(MACROBLOCKD *x, BLOCKD *d, int pitch)
{ {
unsigned char *ptr_base; unsigned char *ptr_base;
unsigned char *ptr; unsigned char *ptr;
@ -246,7 +246,7 @@ void vp8_build_inter_predictors_mbuv(MACROBLOCKD *x)
BLOCKD *d1 = &x->block[i+1]; BLOCKD *d1 = &x->block[i+1];
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
vp8_build_inter_predictors2b(x, d0, 8); build_inter_predictors2b(x, d0, 8);
else else
{ {
vp8_build_inter_predictors_b(d0, 8, x->subpixel_predict); vp8_build_inter_predictors_b(d0, 8, x->subpixel_predict);
@ -291,7 +291,7 @@ void vp8_build_inter_predictors_mby(MACROBLOCKD *x)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
BLOCKD *d = &x->block[bbb[i]]; BLOCKD *d = &x->block[bbb[i]];
vp8_build_inter_predictors4b(x, d, 16); build_inter_predictors4b(x, d, 16);
} }
} }
@ -303,7 +303,7 @@ void vp8_build_inter_predictors_mby(MACROBLOCKD *x)
BLOCKD *d1 = &x->block[i+1]; BLOCKD *d1 = &x->block[i+1];
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
vp8_build_inter_predictors2b(x, d0, 16); build_inter_predictors2b(x, d0, 16);
else else
{ {
vp8_build_inter_predictors_b(d0, 16, x->subpixel_predict); vp8_build_inter_predictors_b(d0, 16, x->subpixel_predict);
@ -372,7 +372,7 @@ void vp8_build_inter_predictors_mb(MACROBLOCKD *x)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
BLOCKD *d = &x->block[bbb[i]]; BLOCKD *d = &x->block[bbb[i]];
vp8_build_inter_predictors4b(x, d, 16); build_inter_predictors4b(x, d, 16);
} }
} }
else else
@ -383,7 +383,7 @@ void vp8_build_inter_predictors_mb(MACROBLOCKD *x)
BLOCKD *d1 = &x->block[i+1]; BLOCKD *d1 = &x->block[i+1];
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
vp8_build_inter_predictors2b(x, d0, 16); build_inter_predictors2b(x, d0, 16);
else else
{ {
vp8_build_inter_predictors_b(d0, 16, x->subpixel_predict); vp8_build_inter_predictors_b(d0, 16, x->subpixel_predict);
@ -400,7 +400,7 @@ void vp8_build_inter_predictors_mb(MACROBLOCKD *x)
BLOCKD *d1 = &x->block[i+1]; BLOCKD *d1 = &x->block[i+1];
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
vp8_build_inter_predictors2b(x, d0, 8); build_inter_predictors2b(x, d0, 8);
else else
{ {
vp8_build_inter_predictors_b(d0, 8, x->subpixel_predict); vp8_build_inter_predictors_b(d0, 8, x->subpixel_predict);
@ -600,7 +600,7 @@ void vp8_build_inter_predictors_mb_s(MACROBLOCKD *x)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
BLOCKD *d = &x->block[bbb[i]]; BLOCKD *d = &x->block[bbb[i]];
/*vp8_build_inter_predictors4b(x, d, 16);*/ /*build_inter_predictors4b(x, d, 16);*/
{ {
unsigned char *ptr_base; unsigned char *ptr_base;
@ -630,7 +630,7 @@ void vp8_build_inter_predictors_mb_s(MACROBLOCKD *x)
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
{ {
/*vp8_build_inter_predictors2b(x, d0, 16);*/ /*build_inter_predictors2b(x, d0, 16);*/
unsigned char *ptr_base; unsigned char *ptr_base;
unsigned char *ptr; unsigned char *ptr;
unsigned char *pred_ptr = d0->predictor; unsigned char *pred_ptr = d0->predictor;
@ -662,7 +662,7 @@ void vp8_build_inter_predictors_mb_s(MACROBLOCKD *x)
if (d0->bmi.mv.as_int == d1->bmi.mv.as_int) if (d0->bmi.mv.as_int == d1->bmi.mv.as_int)
{ {
/*vp8_build_inter_predictors2b(x, d0, 8);*/ /*build_inter_predictors2b(x, d0, 8);*/
unsigned char *ptr_base; unsigned char *ptr_base;
unsigned char *ptr; unsigned char *ptr;
unsigned char *pred_ptr = d0->predictor; unsigned char *pred_ptr = d0->predictor;

View File

@ -113,97 +113,6 @@ nextrow:
ret ret
;
; THIS FUNCTION APPEARS TO BE UNUSED
;
;void vp8_filter_block1d_v6_mmx
;(
; short *src_ptr,
; unsigned char *output_ptr,
; unsigned int pixels_per_line,
; unsigned int pixel_step,
; unsigned int output_height,
; unsigned int output_width,
; short * vp8_filter
;)
global sym(vp8_filter_block1d_v6_mmx)
sym(vp8_filter_block1d_v6_mmx):
push rbp
mov rbp, rsp
SHADOW_ARGS_TO_STACK 7
GET_GOT rbx
push rsi
push rdi
; end prolog
movq mm5, [GLOBAL(rd)]
push rbx
mov rbx, arg(6) ;vp8_filter
movq mm1, [rbx + 16] ; do both the negative taps first!!!
movq mm2, [rbx + 32] ;
movq mm6, [rbx + 48] ;
movq mm7, [rbx + 64] ;
movsxd rdx, dword ptr arg(2) ;pixels_per_line
mov rdi, arg(1) ;output_ptr
mov rsi, arg(0) ;src_ptr
sub rsi, rdx
sub rsi, rdx
movsxd rcx, DWORD PTR arg(4) ;output_height
movsxd rax, DWORD PTR arg(5) ;output_width ; destination pitch?
pxor mm0, mm0 ; mm0 = 00000000
nextrow_v:
movq mm3, [rsi+rdx] ; mm3 = p0..p8 = row -1
pmullw mm3, mm1 ; mm3 *= kernel 1 modifiers.
movq mm4, [rsi + 4*rdx] ; mm4 = p0..p3 = row 2
pmullw mm4, mm7 ; mm4 *= kernel 4 modifiers.
paddsw mm3, mm4 ; mm3 += mm4
movq mm4, [rsi + 2*rdx] ; mm4 = p0..p3 = row 0
pmullw mm4, mm2 ; mm4 *= kernel 2 modifiers.
paddsw mm3, mm4 ; mm3 += mm4
movq mm4, [rsi] ; mm4 = p0..p3 = row -2
pmullw mm4, [rbx] ; mm4 *= kernel 0 modifiers.
paddsw mm3, mm4 ; mm3 += mm4
add rsi, rdx ; move source forward 1 line to avoid 3 * pitch
movq mm4, [rsi + 2*rdx] ; mm4 = p0..p3 = row 1
pmullw mm4, mm6 ; mm4 *= kernel 3 modifiers.
paddsw mm3, mm4 ; mm3 += mm4
movq mm4, [rsi + 4*rdx] ; mm4 = p0..p3 = row 3
pmullw mm4, [rbx +80] ; mm4 *= kernel 3 modifiers.
paddsw mm3, mm4 ; mm3 += mm4
paddsw mm3, mm5 ; mm3 += round value
psraw mm3, VP8_FILTER_SHIFT ; mm3 /= 128
packuswb mm3, mm0 ; pack and saturate
movd [rdi],mm3 ; store the results in the destination
add rdi,rax;
dec rcx ; decrement count
jnz nextrow_v ; next row
pop rbx
; begin epilog
pop rdi
pop rsi
RESTORE_GOT
UNSHADOW_ARGS
pop rbp
ret
;void vp8_filter_block1dc_v6_mmx ;void vp8_filter_block1dc_v6_mmx
;( ;(
; short *src_ptr, ; short *src_ptr,

View File

@ -228,15 +228,8 @@ unsigned int vp8_mv_cont_count[5][4] =
}; };
#endif #endif
unsigned char vp8_mbsplit_offset[4][16] = { static const unsigned char mbsplit_fill_count[4] = {8, 8, 4, 1};
{ 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, static const unsigned char mbsplit_fill_offset[4][16] = {
{ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 2, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
};
unsigned char vp8_mbsplit_fill_count[4] = {8, 8, 4, 1};
unsigned char vp8_mbsplit_fill_offset[4][16] = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{ 0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15}, { 0, 1, 4, 5, 8, 9, 12, 13, 2, 3, 6, 7, 10, 11, 14, 15},
{ 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15}, { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15},
@ -245,7 +238,7 @@ unsigned char vp8_mbsplit_fill_offset[4][16] = {
void vp8_mb_mode_mv_init(VP8D_COMP *pbi) static void mb_mode_mv_init(VP8D_COMP *pbi)
{ {
vp8_reader *const bc = & pbi->bc; vp8_reader *const bc = & pbi->bc;
MV_CONTEXT *const mvc = pbi->common.fc.mvc; MV_CONTEXT *const mvc = pbi->common.fc.mvc;
@ -292,7 +285,7 @@ void vp8_mb_mode_mv_init(VP8D_COMP *pbi)
} }
} }
void vp8_read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
int mb_row, int mb_col) int mb_row, int mb_col)
{ {
const MV Zero = { 0, 0}; const MV Zero = { 0, 0};
@ -447,10 +440,10 @@ void vp8_read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
/* Fill (uniform) modes, mvs of jth subset. /* Fill (uniform) modes, mvs of jth subset.
Must do it here because ensuing subsets can Must do it here because ensuing subsets can
refer back to us via "left" or "above". */ refer back to us via "left" or "above". */
unsigned char *fill_offset; const unsigned char *fill_offset;
unsigned int fill_count = vp8_mbsplit_fill_count[s]; unsigned int fill_count = mbsplit_fill_count[s];
fill_offset = &vp8_mbsplit_fill_offset[s][(unsigned char)j * vp8_mbsplit_fill_count[s]]; fill_offset = &mbsplit_fill_offset[s][(unsigned char)j * mbsplit_fill_count[s]];
do { do {
mi->bmi[ *fill_offset] = bmi; mi->bmi[ *fill_offset] = bmi;
@ -567,7 +560,7 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
MODE_INFO *mi = pbi->common.mi; MODE_INFO *mi = pbi->common.mi;
int mb_row = -1; int mb_row = -1;
vp8_mb_mode_mv_init(pbi); mb_mode_mv_init(pbi);
while (++mb_row < pbi->common.mb_rows) while (++mb_row < pbi->common.mb_rows)
{ {
@ -585,11 +578,11 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
while (++mb_col < pbi->common.mb_cols) while (++mb_col < pbi->common.mb_cols)
{ {
/*vp8_read_mb_modes_mv(pbi, xd->mode_info_context, &xd->mode_info_context->mbmi, mb_row, mb_col);*/ /*read_mb_modes_mv(pbi, xd->mode_info_context, &xd->mode_info_context->mbmi, mb_row, mb_col);*/
if(pbi->common.frame_type == KEY_FRAME) if(pbi->common.frame_type == KEY_FRAME)
vp8_kfread_modes(pbi, mi, mb_row, mb_col); vp8_kfread_modes(pbi, mi, mb_row, mb_col);
else else
vp8_read_mb_modes_mv(pbi, mi, &mi->mbmi, mb_row, mb_col); read_mb_modes_mv(pbi, mi, &mi->mbmi, mb_row, mb_col);
mi++; /* next macroblock */ mi++; /* next macroblock */
} }

View File

@ -175,7 +175,7 @@ void clamp_mvs(MACROBLOCKD *xd)
} }
void vp8_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd) static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd)
{ {
int eobtotal = 0; int eobtotal = 0;
int i, do_clamp = xd->mode_info_context->mbmi.need_to_clamp_mvs; int i, do_clamp = xd->mode_info_context->mbmi.need_to_clamp_mvs;
@ -320,10 +320,8 @@ FILE *vpxlog = 0;
void vp8_decode_mb_row(VP8D_COMP *pbi, static void
VP8_COMMON *pc, decode_mb_row(VP8D_COMP *pbi, VP8_COMMON *pc, int mb_row, MACROBLOCKD *xd)
int mb_row,
MACROBLOCKD *xd)
{ {
int i; int i;
@ -395,7 +393,7 @@ void vp8_decode_mb_row(VP8D_COMP *pbi,
else else
pbi->debugoutput =0; pbi->debugoutput =0;
*/ */
vp8_decode_macroblock(pbi, xd); decode_macroblock(pbi, xd);
/* check if the boolean decoder has suffered an error */ /* check if the boolean decoder has suffered an error */
xd->corrupted |= vp8dx_bool_error(xd->current_bc); xd->corrupted |= vp8dx_bool_error(xd->current_bc);
@ -906,7 +904,7 @@ int vp8_decode_frame(VP8D_COMP *pbi)
ibc = 0; ibc = 0;
} }
vp8_decode_mb_row(pbi, pc, mb_row, xd); decode_mb_row(pbi, pc, mb_row, xd);
} }
} }

View File

@ -19,7 +19,13 @@
#define BOOL_DATA UINT8 #define BOOL_DATA UINT8
#define OCB_X PREV_COEF_CONTEXTS * ENTROPY_NODES #define OCB_X PREV_COEF_CONTEXTS * ENTROPY_NODES
DECLARE_ALIGNED(16, UINT8, vp8_coef_bands_x[16]) = { 0, 1 * OCB_X, 2 * OCB_X, 3 * OCB_X, 6 * OCB_X, 4 * OCB_X, 5 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 7 * OCB_X}; DECLARE_ALIGNED(16, static const unsigned char, coef_bands_x[16]) =
{
0 * OCB_X, 1 * OCB_X, 2 * OCB_X, 3 * OCB_X,
6 * OCB_X, 4 * OCB_X, 5 * OCB_X, 6 * OCB_X,
6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 6 * OCB_X,
6 * OCB_X, 6 * OCB_X, 6 * OCB_X, 7 * OCB_X
};
#define EOB_CONTEXT_NODE 0 #define EOB_CONTEXT_NODE 0
#define ZERO_CONTEXT_NODE 1 #define ZERO_CONTEXT_NODE 1
#define ONE_CONTEXT_NODE 2 #define ONE_CONTEXT_NODE 2
@ -135,7 +141,7 @@ DECLARE_ALIGNED(16, extern const unsigned char, vp8dx_bitreader_norm[256]);
Prob = coef_probs; \ Prob = coef_probs; \
if(c<15) {\ if(c<15) {\
++c; \ ++c; \
Prob += vp8_coef_bands_x[c]; \ Prob += coef_bands_x[c]; \
goto branch; \ goto branch; \
} goto BLOCK_FINISHED; /*for malformed input */\ } goto BLOCK_FINISHED; /*for malformed input */\
} \ } \
@ -244,7 +250,7 @@ BLOCK_LOOP:
Prob += v * ENTROPY_NODES; Prob += v * ENTROPY_NODES;
DO_WHILE: DO_WHILE:
Prob += vp8_coef_bands_x[c]; Prob += coef_bands_x[c];
DECODE_AND_BRANCH_IF_ZERO(Prob[EOB_CONTEXT_NODE], BLOCK_FINISHED); DECODE_AND_BRANCH_IF_ZERO(Prob[EOB_CONTEXT_NODE], BLOCK_FINISHED);
CHECK_0_: CHECK_0_:

View File

@ -37,43 +37,6 @@
extern void vp8_init_loop_filter(VP8_COMMON *cm); extern void vp8_init_loop_filter(VP8_COMMON *cm);
extern void vp8cx_init_de_quantizer(VP8D_COMP *pbi); extern void vp8cx_init_de_quantizer(VP8D_COMP *pbi);
#if CONFIG_DEBUG
void vp8_recon_write_yuv_frame(unsigned char *name, YV12_BUFFER_CONFIG *s)
{
FILE *yuv_file = fopen((char *)name, "ab");
unsigned char *src = s->y_buffer;
int h = s->y_height;
do
{
fwrite(src, s->y_width, 1, yuv_file);
src += s->y_stride;
}
while (--h);
src = s->u_buffer;
h = s->uv_height;
do
{
fwrite(src, s->uv_width, 1, yuv_file);
src += s->uv_stride;
}
while (--h);
src = s->v_buffer;
h = s->uv_height;
do
{
fwrite(src, s->uv_width, 1, yuv_file);
src += s->uv_stride;
}
while (--h);
fclose(yuv_file);
}
#endif
void vp8dx_initialize() void vp8dx_initialize()
{ {
@ -158,35 +121,6 @@ void vp8dx_remove_decompressor(VP8D_PTR ptr)
} }
void vp8dx_set_setting(VP8D_PTR comp, VP8D_SETTING oxst, int x)
{
VP8D_COMP *pbi = (VP8D_COMP *) comp;
(void) pbi;
(void) x;
switch (oxst)
{
case VP8D_OK:
break;
}
}
int vp8dx_get_setting(VP8D_PTR comp, VP8D_SETTING oxst)
{
VP8D_COMP *pbi = (VP8D_COMP *) comp;
(void) pbi;
switch (oxst)
{
case VP8D_OK:
break;
}
return -1;
}
int vp8dx_get_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd) int vp8dx_get_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd)
{ {
VP8D_COMP *pbi = (VP8D_COMP *) ptr; VP8D_COMP *pbi = (VP8D_COMP *) ptr;
@ -206,6 +140,8 @@ int vp8dx_get_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_C
return 0; return 0;
} }
int vp8dx_set_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd) int vp8dx_set_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd)
{ {
VP8D_COMP *pbi = (VP8D_COMP *) ptr; VP8D_COMP *pbi = (VP8D_COMP *) ptr;
@ -462,14 +398,8 @@ int vp8dx_receive_compressed_data(VP8D_PTR ptr, unsigned long size, const unsign
vp8_yv12_extend_frame_borders_ptr(cm->frame_to_show); vp8_yv12_extend_frame_borders_ptr(cm->frame_to_show);
} }
#if 0
/* DEBUG code */
/*vp8_recon_write_yuv_frame("recon.yuv", cm->frame_to_show);*/
vp8_recon_write_yuv_frame("recon.yuv", cm->frame_to_show); vp8_recon_write_yuv_frame("recon.yuv", cm->frame_to_show);
if (cm->current_video_frame <= 5)
write_dx_frame_to_file(cm->frame_to_show, cm->current_video_frame);
#endif
vp8_clear_system_state(); vp8_clear_system_state();

View File

@ -33,7 +33,7 @@ extern void vp8_build_uvmvs(MACROBLOCKD *x, int fullpixel);
#define RTCD_VTABLE(x) NULL #define RTCD_VTABLE(x) NULL
#endif #endif
void vp8_setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_DEC *mbrd, int count) static void setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_DEC *mbrd, int count)
{ {
VP8_COMMON *const pc = & pbi->common; VP8_COMMON *const pc = & pbi->common;
int i, j; int i, j;
@ -87,7 +87,7 @@ void vp8_setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_DEC
} }
void vp8mt_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb_col) static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb_col)
{ {
int eobtotal = 0; int eobtotal = 0;
int i, do_clamp = xd->mode_info_context->mbmi.need_to_clamp_mvs; int i, do_clamp = xd->mode_info_context->mbmi.need_to_clamp_mvs;
@ -214,7 +214,7 @@ void vp8mt_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd, int mb_row, int mb
} }
THREAD_FUNCTION vp8_thread_decoding_proc(void *p_data) static THREAD_FUNCTION thread_decoding_proc(void *p_data)
{ {
int ithread = ((DECODETHREAD_DATA *)p_data)->ithread; int ithread = ((DECODETHREAD_DATA *)p_data)->ithread;
VP8D_COMP *pbi = (VP8D_COMP *)(((DECODETHREAD_DATA *)p_data)->ptr1); VP8D_COMP *pbi = (VP8D_COMP *)(((DECODETHREAD_DATA *)p_data)->ptr1);
@ -318,7 +318,7 @@ THREAD_FUNCTION vp8_thread_decoding_proc(void *p_data)
xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer + recon_uvoffset; xd->pre.v_buffer = pc->yv12_fb[ref_fb_idx].v_buffer + recon_uvoffset;
vp8_build_uvmvs(xd, pc->full_pixel); vp8_build_uvmvs(xd, pc->full_pixel);
vp8mt_decode_macroblock(pbi, xd, mb_row, mb_col); decode_macroblock(pbi, xd, mb_row, mb_col);
if (pbi->common.filter_level) if (pbi->common.filter_level)
{ {
@ -450,7 +450,7 @@ void vp8_decoder_create_threads(VP8D_COMP *pbi)
pbi->de_thread_data[ithread].ptr1 = (void *)pbi; pbi->de_thread_data[ithread].ptr1 = (void *)pbi;
pbi->de_thread_data[ithread].ptr2 = (void *) &pbi->mb_row_di[ithread]; pbi->de_thread_data[ithread].ptr2 = (void *) &pbi->mb_row_di[ithread];
pthread_create(&pbi->h_decoding_thread[ithread], 0, vp8_thread_decoding_proc, (&pbi->de_thread_data[ithread])); pthread_create(&pbi->h_decoding_thread[ithread], 0, thread_decoding_proc, (&pbi->de_thread_data[ithread]));
} }
sem_init(&pbi->h_event_end_decoding, 0, 0); sem_init(&pbi->h_event_end_decoding, 0, 0);
@ -632,7 +632,7 @@ void vp8_decoder_remove_threads(VP8D_COMP *pbi)
} }
void vp8mt_lpf_init( VP8D_COMP *pbi, int default_filt_lvl) static void lpf_init( VP8D_COMP *pbi, int default_filt_lvl)
{ {
VP8_COMMON *cm = &pbi->common; VP8_COMMON *cm = &pbi->common;
MACROBLOCKD *mbd = &pbi->mb; MACROBLOCKD *mbd = &pbi->mb;
@ -715,10 +715,10 @@ void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
vpx_memset(pbi->mt_uleft_col[i], (unsigned char)129, 8); vpx_memset(pbi->mt_uleft_col[i], (unsigned char)129, 8);
vpx_memset(pbi->mt_vleft_col[i], (unsigned char)129, 8); vpx_memset(pbi->mt_vleft_col[i], (unsigned char)129, 8);
} }
vp8mt_lpf_init(pbi, pc->filter_level); lpf_init(pbi, pc->filter_level);
} }
vp8_setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_count); setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_count);
for (i = 0; i < pbi->decoding_thread_count; i++) for (i = 0; i < pbi->decoding_thread_count; i++)
sem_post(&pbi->h_event_start_decoding[i]); sem_post(&pbi->h_event_start_decoding[i]);
@ -803,7 +803,7 @@ void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
} }
vp8_build_uvmvs(xd, pc->full_pixel); vp8_build_uvmvs(xd, pc->full_pixel);
vp8mt_decode_macroblock(pbi, xd, mb_row, mb_col); decode_macroblock(pbi, xd, mb_row, mb_col);
/* check if the boolean decoder has suffered an error */ /* check if the boolean decoder has suffered an error */
xd->corrupted |= vp8dx_bool_error(xd->current_bc); xd->corrupted |= vp8dx_bool_error(xd->current_bc);

View File

@ -17,7 +17,7 @@
#if HAVE_MMX #if HAVE_MMX
void vp8_dequantize_b_impl_mmx(short *sq, short *dq, short *q); void vp8_dequantize_b_impl_mmx(short *sq, short *dq, short *q);
void vp8_dequantize_b_mmx(BLOCKD *d) static void dequantize_b_mmx(BLOCKD *d)
{ {
short *sq = (short *) d->qcoeff; short *sq = (short *) d->qcoeff;
short *dq = (short *) d->dqcoeff; short *dq = (short *) d->dqcoeff;
@ -41,7 +41,7 @@ void vp8_arch_x86_decode_init(VP8D_COMP *pbi)
#if HAVE_MMX #if HAVE_MMX
if (flags & HAS_MMX) if (flags & HAS_MMX)
{ {
pbi->dequant.block = vp8_dequantize_b_mmx; pbi->dequant.block = dequantize_b_mmx;
pbi->dequant.idct_add = vp8_dequant_idct_add_mmx; pbi->dequant.idct_add = vp8_dequant_idct_add_mmx;
pbi->dequant.dc_idct_add = vp8_dequant_dc_idct_add_mmx; pbi->dequant.dc_idct_add = vp8_dequant_dc_idct_add_mmx;
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_mmx; pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_mmx;

View File

@ -861,7 +861,7 @@ void vp8_encode_frame(VP8_COMP *cpi)
vp8cx_init_mbrthread_data(cpi, x, cpi->mb_row_ei, 1, cpi->encoding_thread_count); vp8cx_init_mbrthread_data(cpi, x, cpi->mb_row_ei, 1, cpi->encoding_thread_count);
for (i = 0; i < cm->mb_rows; i++) for (i = 0; i < cm->mb_rows; i++)
cpi->mt_current_mb_col[i] = 0; cpi->mt_current_mb_col[i] = -1;
for (i = 0; i < cpi->encoding_thread_count; i++) for (i = 0; i < cpi->encoding_thread_count; i++)
{ {

View File

@ -25,19 +25,6 @@
#define intra4x4pbias_rate 256 #define intra4x4pbias_rate 256
void vp8_update_mode_context(int *abmode, int *lbmode, int i, int best_mode)
{
if (i < 12)
{
abmode[i+4] = best_mode;
}
if ((i & 3) != 3)
{
lbmode[i+1] = best_mode;
}
}
#if CONFIG_RUNTIME_CPU_DETECT #if CONFIG_RUNTIME_CPU_DETECT
#define IF_RTCD(x) (x) #define IF_RTCD(x) (x)
#else #else

View File

@ -17,7 +17,6 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *, MACROBLOCK *x);
void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *, MACROBLOCK *x); void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *, MACROBLOCK *x);
void vp8_encode_intra4x4mby(const VP8_ENCODER_RTCD *, MACROBLOCK *mb); void vp8_encode_intra4x4mby(const VP8_ENCODER_RTCD *, MACROBLOCK *mb);
void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *, MACROBLOCK *x, BLOCK *be, BLOCKD *b, int best_mode); void vp8_encode_intra4x4block(const VP8_ENCODER_RTCD *, MACROBLOCK *x, BLOCK *be, BLOCKD *b, int best_mode);
void vp8_update_mode_context(int *abmode, int *lbmode, int i, int best_mode);
void vp8_encode_intra4x4block_rd(const VP8_ENCODER_RTCD *, MACROBLOCK *x, BLOCK *be, BLOCKD *b, int best_mode); void vp8_encode_intra4x4block_rd(const VP8_ENCODER_RTCD *, MACROBLOCK *x, BLOCK *be, BLOCKD *b, int best_mode);
#endif #endif

View File

@ -104,7 +104,7 @@ static void vp8_subtract_mb(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
ENCODEMB_INVOKE(&rtcd->encodemb, submbuv)(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride); ENCODEMB_INVOKE(&rtcd->encodemb, submbuv)(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride);
} }
void vp8_build_dcblock(MACROBLOCK *x) static void build_dcblock(MACROBLOCK *x)
{ {
short *src_diff_ptr = &x->src_diff[384]; short *src_diff_ptr = &x->src_diff[384];
int i; int i;
@ -138,7 +138,7 @@ void vp8_transform_intra_mby(MACROBLOCK *x)
} }
// build dc block from 16 y dc values // build dc block from 16 y dc values
vp8_build_dcblock(x); build_dcblock(x);
// do 2nd order transform on the dc block // do 2nd order transform on the dc block
x->short_walsh4x4(&x->block[24].src_diff[0], x->short_walsh4x4(&x->block[24].src_diff[0],
@ -147,7 +147,7 @@ void vp8_transform_intra_mby(MACROBLOCK *x)
} }
void vp8_transform_mb(MACROBLOCK *x) static void transform_mb(MACROBLOCK *x)
{ {
int i; int i;
@ -159,7 +159,7 @@ void vp8_transform_mb(MACROBLOCK *x)
// build dc block from 16 y dc values // build dc block from 16 y dc values
if (x->e_mbd.mode_info_context->mbmi.mode != SPLITMV) if (x->e_mbd.mode_info_context->mbmi.mode != SPLITMV)
vp8_build_dcblock(x); build_dcblock(x);
for (i = 16; i < 24; i += 2) for (i = 16; i < 24; i += 2)
{ {
@ -174,7 +174,8 @@ void vp8_transform_mb(MACROBLOCK *x)
} }
void vp8_transform_mby(MACROBLOCK *x)
static void transform_mby(MACROBLOCK *x)
{ {
int i; int i;
@ -187,7 +188,7 @@ void vp8_transform_mby(MACROBLOCK *x)
// build dc block from 16 y dc values // build dc block from 16 y dc values
if (x->e_mbd.mode_info_context->mbmi.mode != SPLITMV) if (x->e_mbd.mode_info_context->mbmi.mode != SPLITMV)
{ {
vp8_build_dcblock(x); build_dcblock(x);
x->short_walsh4x4(&x->block[24].src_diff[0], x->short_walsh4x4(&x->block[24].src_diff[0],
&x->block[24].coeff[0], 8); &x->block[24].coeff[0], 8);
} }
@ -259,9 +260,9 @@ static const int plane_rd_mult[4]=
Y1_RD_MULT Y1_RD_MULT
}; };
void vp8_optimize_b(MACROBLOCK *mb, int ib, int type, static void optimize_b(MACROBLOCK *mb, int ib, int type,
ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l,
const VP8_ENCODER_RTCD *rtcd) const VP8_ENCODER_RTCD *rtcd)
{ {
BLOCK *b; BLOCK *b;
BLOCKD *d; BLOCKD *d;
@ -505,7 +506,7 @@ void vp8_optimize_b(MACROBLOCK *mb, int ib, int type,
*a = *l = (d->eob != !type); *a = *l = (d->eob != !type);
} }
void vp8_optimize_mb(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd) static void optimize_mb(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
{ {
int b; int b;
int type; int type;
@ -526,20 +527,20 @@ void vp8_optimize_mb(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
for (b = 0; b < 16; b++) for (b = 0; b < 16; b++)
{ {
vp8_optimize_b(x, b, type, optimize_b(x, b, type,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
for (b = 16; b < 24; b++) for (b = 16; b < 24; b++)
{ {
vp8_optimize_b(x, b, PLANE_TYPE_UV, optimize_b(x, b, PLANE_TYPE_UV,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
if (has_2nd_order) if (has_2nd_order)
{ {
b=24; b=24;
vp8_optimize_b(x, b, PLANE_TYPE_Y2, optimize_b(x, b, PLANE_TYPE_Y2,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
} }
@ -573,7 +574,7 @@ void vp8_optimize_mby(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
for (b = 0; b < 16; b++) for (b = 0; b < 16; b++)
{ {
vp8_optimize_b(x, b, type, optimize_b(x, b, type,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
@ -581,7 +582,7 @@ void vp8_optimize_mby(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
if (has_2nd_order) if (has_2nd_order)
{ {
b=24; b=24;
vp8_optimize_b(x, b, PLANE_TYPE_Y2, optimize_b(x, b, PLANE_TYPE_Y2,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
} }
@ -607,7 +608,7 @@ void vp8_optimize_mbuv(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
for (b = 16; b < 24; b++) for (b = 16; b < 24; b++)
{ {
vp8_optimize_b(x, b, PLANE_TYPE_UV, optimize_b(x, b, PLANE_TYPE_UV,
ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd); ta + vp8_block2above[b], tl + vp8_block2left[b], rtcd);
} }
} }
@ -619,13 +620,13 @@ void vp8_encode_inter16x16(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
vp8_subtract_mb(rtcd, x); vp8_subtract_mb(rtcd, x);
vp8_transform_mb(x); transform_mb(x);
vp8_quantize_mb(x); vp8_quantize_mb(x);
#if !(CONFIG_REALTIME_ONLY) #if !(CONFIG_REALTIME_ONLY)
if (x->optimize) if (x->optimize)
vp8_optimize_mb(x, rtcd); optimize_mb(x, rtcd);
#endif #endif
vp8_inverse_transform_mb(IF_RTCD(&rtcd->common->idct), &x->e_mbd); vp8_inverse_transform_mb(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
@ -642,7 +643,7 @@ void vp8_encode_inter16x16y(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
ENCODEMB_INVOKE(&rtcd->encodemb, submby)(x->src_diff, x->src.y_buffer, x->e_mbd.predictor, x->src.y_stride); ENCODEMB_INVOKE(&rtcd->encodemb, submby)(x->src_diff, x->src.y_buffer, x->e_mbd.predictor, x->src.y_stride);
vp8_transform_mby(x); transform_mby(x);
vp8_quantize_mby(x); vp8_quantize_mby(x);
@ -653,22 +654,6 @@ void vp8_encode_inter16x16y(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
} }
void vp8_encode_inter16x16uv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
{
vp8_build_inter_predictors_mbuv(&x->e_mbd);
ENCODEMB_INVOKE(&rtcd->encodemb, submbuv)(x->src_diff, x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride);
vp8_transform_mbuv(x);
vp8_quantize_mbuv(x);
vp8_inverse_transform_mbuv(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
vp8_recon_intra_mbuv(IF_RTCD(&rtcd->common->recon), &x->e_mbd);
}
void vp8_encode_inter16x16uvrd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) void vp8_encode_inter16x16uvrd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
{ {
vp8_build_inter_predictors_mbuv(&x->e_mbd); vp8_build_inter_predictors_mbuv(&x->e_mbd);

View File

@ -101,9 +101,6 @@ void vp8_build_dcblock(MACROBLOCK *b);
void vp8_transform_mb(MACROBLOCK *mb); void vp8_transform_mb(MACROBLOCK *mb);
void vp8_transform_mbuv(MACROBLOCK *x); void vp8_transform_mbuv(MACROBLOCK *x);
void vp8_transform_intra_mby(MACROBLOCK *x); void vp8_transform_intra_mby(MACROBLOCK *x);
void Encode16x16Y(MACROBLOCK *x);
void Encode16x16UV(MACROBLOCK *x);
void vp8_encode_inter16x16uv(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x);
void vp8_encode_inter16x16uvrd(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x); void vp8_encode_inter16x16uvrd(const struct VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x);
void vp8_optimize_mby(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd); void vp8_optimize_mby(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd);
void vp8_optimize_mbuv(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd); void vp8_optimize_mbuv(MACROBLOCK *x, const struct VP8_ENCODER_RTCD *rtcd);

View File

@ -24,8 +24,6 @@ extern void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x);
extern void vp8_build_block_offsets(MACROBLOCK *x); extern void vp8_build_block_offsets(MACROBLOCK *x);
extern void vp8_setup_block_ptrs(MACROBLOCK *x); extern void vp8_setup_block_ptrs(MACROBLOCK *x);
#if CONFIG_MULTITHREAD
extern void loopfilter_frame(VP8_COMP *cpi, VP8_COMMON *cm); extern void loopfilter_frame(VP8_COMP *cpi, VP8_COMMON *cm);
static THREAD_FUNCTION loopfilter_thread(void *p_data) static THREAD_FUNCTION loopfilter_thread(void *p_data)
@ -51,7 +49,6 @@ static THREAD_FUNCTION loopfilter_thread(void *p_data)
return 0; return 0;
} }
#endif
static static
THREAD_FUNCTION thread_encoding_proc(void *p_data) THREAD_FUNCTION thread_encoding_proc(void *p_data)
@ -458,53 +455,58 @@ void vp8cx_init_mbrthread_data(VP8_COMP *cpi,
void vp8cx_create_encoder_threads(VP8_COMP *cpi) void vp8cx_create_encoder_threads(VP8_COMP *cpi)
{ {
cpi->b_multi_threaded = 0; const VP8_COMMON * cm = &cpi->common;
cpi->b_multi_threaded = 0;
cpi->encoding_thread_count = 0;
cpi->processor_core_count = 32; //vp8_get_proc_core_count(); cpi->processor_core_count = 32; //vp8_get_proc_core_count();
if (cpi->processor_core_count > 1 && cpi->oxcf.multi_threaded > 1) if (cpi->processor_core_count > 1 && cpi->oxcf.multi_threaded > 1)
{ {
int ithread; int ithread;
int th_count = cpi->oxcf.multi_threaded - 1;
if (cpi->oxcf.multi_threaded > cpi->processor_core_count) if (cpi->oxcf.multi_threaded > cpi->processor_core_count)
cpi->encoding_thread_count = cpi->processor_core_count - 1; th_count = cpi->processor_core_count - 1;
else
cpi->encoding_thread_count = cpi->oxcf.multi_threaded - 1;
CHECK_MEM_ERROR(cpi->h_encoding_thread, vpx_malloc(sizeof(pthread_t) * cpi->encoding_thread_count)); /* we have th_count + 1 (main) threads processing one row each */
CHECK_MEM_ERROR(cpi->h_event_start_encoding, vpx_malloc(sizeof(sem_t) * cpi->encoding_thread_count)); /* no point to have more threads than the sync range allows */
CHECK_MEM_ERROR(cpi->mb_row_ei, vpx_memalign(32, sizeof(MB_ROW_COMP) * cpi->encoding_thread_count)); if(th_count > ((cm->mb_cols / cpi->mt_sync_range) - 1))
vpx_memset(cpi->mb_row_ei, 0, sizeof(MB_ROW_COMP) * cpi->encoding_thread_count); {
CHECK_MEM_ERROR(cpi->en_thread_data, vpx_malloc(sizeof(ENCODETHREAD_DATA) * cpi->encoding_thread_count)); th_count = (cm->mb_cols / cpi->mt_sync_range) - 1;
CHECK_MEM_ERROR(cpi->mt_current_mb_col, vpx_malloc(sizeof(*cpi->mt_current_mb_col) * cpi->common.mb_rows)); }
if(th_count == 0)
return;
CHECK_MEM_ERROR(cpi->h_encoding_thread, vpx_malloc(sizeof(pthread_t) * th_count));
CHECK_MEM_ERROR(cpi->h_event_start_encoding, vpx_malloc(sizeof(sem_t) * th_count));
CHECK_MEM_ERROR(cpi->mb_row_ei, vpx_memalign(32, sizeof(MB_ROW_COMP) * th_count));
vpx_memset(cpi->mb_row_ei, 0, sizeof(MB_ROW_COMP) * th_count);
CHECK_MEM_ERROR(cpi->en_thread_data,
vpx_malloc(sizeof(ENCODETHREAD_DATA) * th_count));
CHECK_MEM_ERROR(cpi->mt_current_mb_col,
vpx_malloc(sizeof(*cpi->mt_current_mb_col) * cm->mb_rows));
//cpi->h_event_main = CreateEvent(NULL, FALSE, FALSE, NULL);
sem_init(&cpi->h_event_end_encoding, 0, 0); sem_init(&cpi->h_event_end_encoding, 0, 0);
cpi->b_multi_threaded = 1; cpi->b_multi_threaded = 1;
cpi->encoding_thread_count = th_count;
//printf("[VP8:] multi_threaded encoding is enabled with %d threads\n\n", (cpi->encoding_thread_count +1)); /*
printf("[VP8:] multi_threaded encoding is enabled with %d threads\n\n",
(cpi->encoding_thread_count +1));
*/
for (ithread = 0; ithread < cpi->encoding_thread_count; ithread++) for (ithread = 0; ithread < th_count; ithread++)
{ {
ENCODETHREAD_DATA * ethd = &cpi->en_thread_data[ithread]; ENCODETHREAD_DATA * ethd = &cpi->en_thread_data[ithread];
//cpi->h_event_mbrencoding[ithread] = CreateEvent(NULL, FALSE, FALSE, NULL);
sem_init(&cpi->h_event_start_encoding[ithread], 0, 0); sem_init(&cpi->h_event_start_encoding[ithread], 0, 0);
ethd->ithread = ithread; ethd->ithread = ithread;
ethd->ptr1 = (void *)cpi; ethd->ptr1 = (void *)cpi;
ethd->ptr2 = (void *)&cpi->mb_row_ei[ithread]; ethd->ptr2 = (void *)&cpi->mb_row_ei[ithread];
//printf(" call begin thread %d \n", ithread);
//cpi->h_encoding_thread[ithread] = (HANDLE)_beginthreadex(
// NULL, // security
// 0, // stksize
// thread_encoding_proc,
// (&cpi->en_thread_data[ithread]), // Thread data
// 0,
// NULL);
pthread_create(&cpi->h_encoding_thread[ithread], 0, thread_encoding_proc, ethd); pthread_create(&cpi->h_encoding_thread[ithread], 0, thread_encoding_proc, ethd);
} }

View File

@ -67,7 +67,7 @@ static int vscale_lookup[7] = {0, 1, 1, 2, 2, 3, 3};
static int hscale_lookup[7] = {0, 0, 1, 1, 2, 2, 3}; static int hscale_lookup[7] = {0, 0, 1, 1, 2, 2, 3};
const int cq_level[QINDEX_RANGE] = static const int cq_level[QINDEX_RANGE] =
{ {
0,0,1,1,2,3,3,4,4,5,6,6,7,8,8,9, 0,0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,
9,10,11,11,12,13,13,14,15,15,16,17,17,18,19,20, 9,10,11,11,12,13,13,14,15,15,16,17,17,18,19,20,
@ -79,10 +79,9 @@ const int cq_level[QINDEX_RANGE] =
86,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100 86,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
}; };
void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame); static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame);
int vp8_input_stats(VP8_COMP *cpi, FIRSTPASS_STATS *fps);
int vp8_encode_intra(VP8_COMP *cpi, MACROBLOCK *x, int use_dc_pred) static int encode_intra(VP8_COMP *cpi, MACROBLOCK *x, int use_dc_pred)
{ {
int i; int i;
@ -146,7 +145,7 @@ static double calculate_modified_err(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
/*start_pos = cpi->stats_in; /*start_pos = cpi->stats_in;
sum_iiratio = 0.0; sum_iiratio = 0.0;
i = 0; i = 0;
while ( (i < 1) && vp8_input_stats(cpi,&next_frame) != EOF ) while ( (i < 1) && input_stats(cpi,&next_frame) != EOF )
{ {
next_iiratio = next_frame.intra_error / DOUBLE_DIVIDE_CHECK(next_frame.coded_error); next_iiratio = next_frame.intra_error / DOUBLE_DIVIDE_CHECK(next_frame.coded_error);
@ -212,7 +211,7 @@ static const double weight_table[256] = {
1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000
}; };
double vp8_simple_weight(YV12_BUFFER_CONFIG *source) static double simple_weight(YV12_BUFFER_CONFIG *source)
{ {
int i, j; int i, j;
@ -240,7 +239,7 @@ double vp8_simple_weight(YV12_BUFFER_CONFIG *source)
// This function returns the current per frame maximum bitrate target // This function returns the current per frame maximum bitrate target
int frame_max_bits(VP8_COMP *cpi) static int frame_max_bits(VP8_COMP *cpi)
{ {
// Max allocation for a single frame based on the max section guidelines passed in and how many bits are left // Max allocation for a single frame based on the max section guidelines passed in and how many bits are left
int max_bits; int max_bits;
@ -281,9 +280,9 @@ int frame_max_bits(VP8_COMP *cpi)
} }
void vp8_output_stats(const VP8_COMP *cpi, static void output_stats(const VP8_COMP *cpi,
struct vpx_codec_pkt_list *pktlist, struct vpx_codec_pkt_list *pktlist,
FIRSTPASS_STATS *stats) FIRSTPASS_STATS *stats)
{ {
struct vpx_codec_cx_pkt pkt; struct vpx_codec_cx_pkt pkt;
pkt.kind = VPX_CODEC_STATS_PKT; pkt.kind = VPX_CODEC_STATS_PKT;
@ -323,7 +322,7 @@ void vp8_output_stats(const VP8_COMP *cpi,
#endif #endif
} }
int vp8_input_stats(VP8_COMP *cpi, FIRSTPASS_STATS *fps) static int input_stats(VP8_COMP *cpi, FIRSTPASS_STATS *fps)
{ {
if (cpi->stats_in >= cpi->stats_in_end) if (cpi->stats_in >= cpi->stats_in_end)
return EOF; return EOF;
@ -333,7 +332,7 @@ int vp8_input_stats(VP8_COMP *cpi, FIRSTPASS_STATS *fps)
return 1; return 1;
} }
void vp8_zero_stats(FIRSTPASS_STATS *section) static void zero_stats(FIRSTPASS_STATS *section)
{ {
section->frame = 0.0; section->frame = 0.0;
section->intra_error = 0.0; section->intra_error = 0.0;
@ -353,7 +352,7 @@ void vp8_zero_stats(FIRSTPASS_STATS *section)
section->count = 0.0; section->count = 0.0;
section->duration = 1.0; section->duration = 1.0;
} }
void vp8_accumulate_stats(FIRSTPASS_STATS *section, FIRSTPASS_STATS *frame) static void accumulate_stats(FIRSTPASS_STATS *section, FIRSTPASS_STATS *frame)
{ {
section->frame += frame->frame; section->frame += frame->frame;
section->intra_error += frame->intra_error; section->intra_error += frame->intra_error;
@ -373,7 +372,7 @@ void vp8_accumulate_stats(FIRSTPASS_STATS *section, FIRSTPASS_STATS *frame)
section->count += frame->count; section->count += frame->count;
section->duration += frame->duration; section->duration += frame->duration;
} }
void vp8_avg_stats(FIRSTPASS_STATS *section) static void avg_stats(FIRSTPASS_STATS *section)
{ {
if (section->count < 1.0) if (section->count < 1.0)
return; return;
@ -397,15 +396,15 @@ void vp8_avg_stats(FIRSTPASS_STATS *section)
void vp8_init_first_pass(VP8_COMP *cpi) void vp8_init_first_pass(VP8_COMP *cpi)
{ {
vp8_zero_stats(cpi->total_stats); zero_stats(cpi->total_stats);
} }
void vp8_end_first_pass(VP8_COMP *cpi) void vp8_end_first_pass(VP8_COMP *cpi)
{ {
vp8_output_stats(cpi, cpi->output_pkt_list, cpi->total_stats); output_stats(cpi, cpi->output_pkt_list, cpi->total_stats);
} }
void vp8_zz_motion_search( VP8_COMP *cpi, MACROBLOCK * x, YV12_BUFFER_CONFIG * recon_buffer, int * best_motion_err, int recon_yoffset ) static void zz_motion_search( VP8_COMP *cpi, MACROBLOCK * x, YV12_BUFFER_CONFIG * recon_buffer, int * best_motion_err, int recon_yoffset )
{ {
MACROBLOCKD * const xd = & x->e_mbd; MACROBLOCKD * const xd = & x->e_mbd;
BLOCK *b = &x->block[0]; BLOCK *b = &x->block[0];
@ -424,7 +423,7 @@ void vp8_zz_motion_search( VP8_COMP *cpi, MACROBLOCK * x, YV12_BUFFER_CONFIG * r
VARIANCE_INVOKE(IF_RTCD(&cpi->rtcd.variance), mse16x16) ( src_ptr, src_stride, ref_ptr, ref_stride, (unsigned int *)(best_motion_err)); VARIANCE_INVOKE(IF_RTCD(&cpi->rtcd.variance), mse16x16) ( src_ptr, src_stride, ref_ptr, ref_stride, (unsigned int *)(best_motion_err));
} }
void vp8_first_pass_motion_search(VP8_COMP *cpi, MACROBLOCK *x, MV *ref_mv, MV *best_mv, YV12_BUFFER_CONFIG *recon_buffer, int *best_motion_err, int recon_yoffset ) static void first_pass_motion_search(VP8_COMP *cpi, MACROBLOCK *x, MV *ref_mv, MV *best_mv, YV12_BUFFER_CONFIG *recon_buffer, int *best_motion_err, int recon_yoffset )
{ {
MACROBLOCKD *const xd = & x->e_mbd; MACROBLOCKD *const xd = & x->e_mbd;
BLOCK *b = &x->block[0]; BLOCK *b = &x->block[0];
@ -575,7 +574,7 @@ void vp8_first_pass(VP8_COMP *cpi)
xd->left_available = (mb_col != 0); xd->left_available = (mb_col != 0);
// do intra 16x16 prediction // do intra 16x16 prediction
this_error = vp8_encode_intra(cpi, x, use_dc_pred); this_error = encode_intra(cpi, x, use_dc_pred);
// "intrapenalty" below deals with situations where the intra and inter error scores are very low (eg a plain black frame) // "intrapenalty" below deals with situations where the intra and inter error scores are very low (eg a plain black frame)
// We do not have special cases in first pass for 0,0 and nearest etc so all inter modes carry an overhead cost estimate fot the mv. // We do not have special cases in first pass for 0,0 and nearest etc so all inter modes carry an overhead cost estimate fot the mv.
@ -600,13 +599,13 @@ void vp8_first_pass(VP8_COMP *cpi)
int motion_error = INT_MAX; int motion_error = INT_MAX;
// Simple 0,0 motion with no mv overhead // Simple 0,0 motion with no mv overhead
vp8_zz_motion_search( cpi, x, lst_yv12, &motion_error, recon_yoffset ); zz_motion_search( cpi, x, lst_yv12, &motion_error, recon_yoffset );
d->bmi.mv.as_mv.row = 0; d->bmi.mv.as_mv.row = 0;
d->bmi.mv.as_mv.col = 0; d->bmi.mv.as_mv.col = 0;
// Test last reference frame using the previous best mv as the // Test last reference frame using the previous best mv as the
// starting point (best reference) for the search // starting point (best reference) for the search
vp8_first_pass_motion_search(cpi, x, &best_ref_mv.as_mv, first_pass_motion_search(cpi, x, &best_ref_mv.as_mv,
&d->bmi.mv.as_mv, lst_yv12, &d->bmi.mv.as_mv, lst_yv12,
&motion_error, recon_yoffset); &motion_error, recon_yoffset);
@ -614,7 +613,7 @@ void vp8_first_pass(VP8_COMP *cpi)
if (best_ref_mv.as_int) if (best_ref_mv.as_int)
{ {
tmp_err = INT_MAX; tmp_err = INT_MAX;
vp8_first_pass_motion_search(cpi, x, &zero_ref_mv, &tmp_mv, first_pass_motion_search(cpi, x, &zero_ref_mv, &tmp_mv,
lst_yv12, &tmp_err, recon_yoffset); lst_yv12, &tmp_err, recon_yoffset);
if ( tmp_err < motion_error ) if ( tmp_err < motion_error )
@ -628,7 +627,7 @@ void vp8_first_pass(VP8_COMP *cpi)
// Experimental search in a second reference frame ((0,0) based only) // Experimental search in a second reference frame ((0,0) based only)
if (cm->current_video_frame > 1) if (cm->current_video_frame > 1)
{ {
vp8_first_pass_motion_search(cpi, x, &zero_ref_mv, &tmp_mv, gld_yv12, &gf_motion_error, recon_yoffset); first_pass_motion_search(cpi, x, &zero_ref_mv, &tmp_mv, gld_yv12, &gf_motion_error, recon_yoffset);
if ((gf_motion_error < motion_error) && (gf_motion_error < this_error)) if ((gf_motion_error < motion_error) && (gf_motion_error < this_error))
{ {
@ -752,7 +751,7 @@ void vp8_first_pass(VP8_COMP *cpi)
fps.frame = cm->current_video_frame ; fps.frame = cm->current_video_frame ;
fps.intra_error = intra_error >> 8; fps.intra_error = intra_error >> 8;
fps.coded_error = coded_error >> 8; fps.coded_error = coded_error >> 8;
weight = vp8_simple_weight(cpi->Source); weight = simple_weight(cpi->Source);
if (weight < 0.1) if (weight < 0.1)
@ -796,8 +795,8 @@ void vp8_first_pass(VP8_COMP *cpi)
memcpy(cpi->this_frame_stats, memcpy(cpi->this_frame_stats,
&fps, &fps,
sizeof(FIRSTPASS_STATS)); sizeof(FIRSTPASS_STATS));
vp8_output_stats(cpi, cpi->output_pkt_list, cpi->this_frame_stats); output_stats(cpi, cpi->output_pkt_list, cpi->this_frame_stats);
vp8_accumulate_stats(cpi->total_stats, &fps); accumulate_stats(cpi->total_stats, &fps);
} }
// Copy the previous Last Frame into the GF buffer if specific conditions for doing so are met // Copy the previous Last Frame into the GF buffer if specific conditions for doing so are met
@ -1168,7 +1167,7 @@ void vp8_init_second_pass(VP8_COMP *cpi)
double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100); double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100);
vp8_zero_stats(cpi->total_stats); zero_stats(cpi->total_stats);
if (!cpi->stats_in_end) if (!cpi->stats_in_end)
return; return;
@ -1202,7 +1201,7 @@ void vp8_init_second_pass(VP8_COMP *cpi)
cpi->kf_intra_err_min = KF_MB_INTRA_MIN * cpi->common.MBs; cpi->kf_intra_err_min = KF_MB_INTRA_MIN * cpi->common.MBs;
cpi->gf_intra_err_min = GF_MB_INTRA_MIN * cpi->common.MBs; cpi->gf_intra_err_min = GF_MB_INTRA_MIN * cpi->common.MBs;
vp8_avg_stats(cpi->total_stats); avg_stats(cpi->total_stats);
// Scan the first pass file and calculate an average Intra / Inter error score ratio for the sequence // Scan the first pass file and calculate an average Intra / Inter error score ratio for the sequence
{ {
@ -1211,7 +1210,7 @@ void vp8_init_second_pass(VP8_COMP *cpi)
start_pos = cpi->stats_in; // Note starting "file" position start_pos = cpi->stats_in; // Note starting "file" position
while (vp8_input_stats(cpi, &this_frame) != EOF) while (input_stats(cpi, &this_frame) != EOF)
{ {
IIRatio = this_frame.intra_error / DOUBLE_DIVIDE_CHECK(this_frame.coded_error); IIRatio = this_frame.intra_error / DOUBLE_DIVIDE_CHECK(this_frame.coded_error);
IIRatio = (IIRatio < 1.0) ? 1.0 : (IIRatio > 20.0) ? 20.0 : IIRatio; IIRatio = (IIRatio < 1.0) ? 1.0 : (IIRatio > 20.0) ? 20.0 : IIRatio;
@ -1232,7 +1231,7 @@ void vp8_init_second_pass(VP8_COMP *cpi)
cpi->modified_error_total = 0.0; cpi->modified_error_total = 0.0;
cpi->modified_error_used = 0.0; cpi->modified_error_used = 0.0;
while (vp8_input_stats(cpi, &this_frame) != EOF) while (input_stats(cpi, &this_frame) != EOF)
{ {
cpi->modified_error_total += calculate_modified_err(cpi, &this_frame); cpi->modified_error_total += calculate_modified_err(cpi, &this_frame);
} }
@ -1255,7 +1254,7 @@ void vp8_end_second_pass(VP8_COMP *cpi)
// This function gives and estimate of how badly we believe // This function gives and estimate of how badly we believe
// the prediction quality is decaying from frame to frame. // the prediction quality is decaying from frame to frame.
double get_prediction_decay_rate(VP8_COMP *cpi, FIRSTPASS_STATS *next_frame) static double get_prediction_decay_rate(VP8_COMP *cpi, FIRSTPASS_STATS *next_frame)
{ {
double prediction_decay_rate; double prediction_decay_rate;
double motion_decay; double motion_decay;
@ -1293,7 +1292,7 @@ double get_prediction_decay_rate(VP8_COMP *cpi, FIRSTPASS_STATS *next_frame)
// Function to test for a condition where a complex transition is followed // Function to test for a condition where a complex transition is followed
// by a static section. For example in slide shows where there is a fade // by a static section. For example in slide shows where there is a fade
// between slides. This is to help with more optimal kf and gf positioning. // between slides. This is to help with more optimal kf and gf positioning.
BOOL detect_transition_to_still( static int detect_transition_to_still(
VP8_COMP *cpi, VP8_COMP *cpi,
int frame_interval, int frame_interval,
int still_interval, int still_interval,
@ -1318,7 +1317,7 @@ BOOL detect_transition_to_still(
// persists... // persists...
for ( j = 0; j < still_interval; j++ ) for ( j = 0; j < still_interval; j++ )
{ {
if (EOF == vp8_input_stats(cpi, &tmp_next_frame)) if (EOF == input_stats(cpi, &tmp_next_frame))
break; break;
decay_rate = get_prediction_decay_rate(cpi, &tmp_next_frame); decay_rate = get_prediction_decay_rate(cpi, &tmp_next_frame);
@ -1417,7 +1416,7 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
mod_err_per_mb_accumulator += mod_err_per_mb_accumulator +=
mod_frame_err / DOUBLE_DIVIDE_CHECK((double)cpi->common.MBs); mod_frame_err / DOUBLE_DIVIDE_CHECK((double)cpi->common.MBs);
if (EOF == vp8_input_stats(cpi, &next_frame)) if (EOF == input_stats(cpi, &next_frame))
break; break;
// Accumulate motion stats. // Accumulate motion stats.
@ -1691,7 +1690,7 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
{ {
while (cpi->baseline_gf_interval < cpi->frames_to_key) while (cpi->baseline_gf_interval < cpi->frames_to_key)
{ {
if (EOF == vp8_input_stats(cpi, this_frame)) if (EOF == input_stats(cpi, this_frame))
break; break;
cpi->baseline_gf_interval++; cpi->baseline_gf_interval++;
@ -1870,16 +1869,16 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
FIRSTPASS_STATS sectionstats; FIRSTPASS_STATS sectionstats;
double Ratio; double Ratio;
vp8_zero_stats(&sectionstats); zero_stats(&sectionstats);
reset_fpf_position(cpi, start_pos); reset_fpf_position(cpi, start_pos);
for (i = 0 ; i < cpi->baseline_gf_interval ; i++) for (i = 0 ; i < cpi->baseline_gf_interval ; i++)
{ {
vp8_input_stats(cpi, &next_frame); input_stats(cpi, &next_frame);
vp8_accumulate_stats(&sectionstats, &next_frame); accumulate_stats(&sectionstats, &next_frame);
} }
vp8_avg_stats(&sectionstats); avg_stats(&sectionstats);
cpi->section_intra_rating = cpi->section_intra_rating =
sectionstats.intra_error / sectionstats.intra_error /
@ -1977,7 +1976,7 @@ void vp8_second_pass(VP8_COMP *cpi)
vp8_clear_system_state(); vp8_clear_system_state();
if (EOF == vp8_input_stats(cpi, &this_frame)) if (EOF == input_stats(cpi, &this_frame))
return; return;
this_frame_error = this_frame.ssim_weighted_pred_err; this_frame_error = this_frame.ssim_weighted_pred_err;
@ -1998,7 +1997,7 @@ void vp8_second_pass(VP8_COMP *cpi)
{ {
// Define next KF group and assign bits to it // Define next KF group and assign bits to it
vpx_memcpy(&this_frame_copy, &this_frame, sizeof(this_frame)); vpx_memcpy(&this_frame_copy, &this_frame, sizeof(this_frame));
vp8_find_next_key_frame(cpi, &this_frame_copy); find_next_key_frame(cpi, &this_frame_copy);
// Special case: Error error_resilient_mode mode does not make much sense for two pass but with its current meaning but this code is designed to stop // Special case: Error error_resilient_mode mode does not make much sense for two pass but with its current meaning but this code is designed to stop
// outlandish behaviour if someone does set it when using two pass. It effectively disables GF groups. // outlandish behaviour if someone does set it when using two pass. It effectively disables GF groups.
@ -2239,7 +2238,7 @@ static BOOL test_candidate_kf(VP8_COMP *cpi, FIRSTPASS_STATS *last_frame, FIRST
old_boost_score = boost_score; old_boost_score = boost_score;
// Get the next frame details // Get the next frame details
if (EOF == vp8_input_stats(cpi, &local_next_frame)) if (EOF == input_stats(cpi, &local_next_frame))
break; break;
} }
@ -2257,7 +2256,7 @@ static BOOL test_candidate_kf(VP8_COMP *cpi, FIRSTPASS_STATS *last_frame, FIRST
return is_viable_kf; return is_viable_kf;
} }
void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame) static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
{ {
int i,j; int i,j;
FIRSTPASS_STATS last_frame; FIRSTPASS_STATS last_frame;
@ -2317,7 +2316,7 @@ void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
// load a the next frame's stats // load a the next frame's stats
vpx_memcpy(&last_frame, this_frame, sizeof(*this_frame)); vpx_memcpy(&last_frame, this_frame, sizeof(*this_frame));
vp8_input_stats(cpi, this_frame); input_stats(cpi, this_frame);
// Provided that we are not at the end of the file... // Provided that we are not at the end of the file...
if (cpi->oxcf.auto_key if (cpi->oxcf.auto_key
@ -2395,7 +2394,7 @@ void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
kf_group_coded_err += tmp_frame.coded_error; kf_group_coded_err += tmp_frame.coded_error;
// Load a the next frame's stats // Load a the next frame's stats
vp8_input_stats(cpi, &tmp_frame); input_stats(cpi, &tmp_frame);
} }
// Reset to the start of the group // Reset to the start of the group
@ -2500,7 +2499,7 @@ void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
double motion_decay; double motion_decay;
double motion_pct; double motion_pct;
if (EOF == vp8_input_stats(cpi, &next_frame)) if (EOF == input_stats(cpi, &next_frame))
break; break;
if (next_frame.intra_error > cpi->kf_intra_err_min) if (next_frame.intra_error > cpi->kf_intra_err_min)
@ -2535,16 +2534,16 @@ void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
FIRSTPASS_STATS sectionstats; FIRSTPASS_STATS sectionstats;
double Ratio; double Ratio;
vp8_zero_stats(&sectionstats); zero_stats(&sectionstats);
reset_fpf_position(cpi, start_position); reset_fpf_position(cpi, start_position);
for (i = 0 ; i < cpi->frames_to_key ; i++) for (i = 0 ; i < cpi->frames_to_key ; i++)
{ {
vp8_input_stats(cpi, &next_frame); input_stats(cpi, &next_frame);
vp8_accumulate_stats(&sectionstats, &next_frame); accumulate_stats(&sectionstats, &next_frame);
} }
vp8_avg_stats(&sectionstats); avg_stats(&sectionstats);
cpi->section_intra_rating = sectionstats.intra_error / DOUBLE_DIVIDE_CHECK(sectionstats.coded_error); cpi->section_intra_rating = sectionstats.intra_error / DOUBLE_DIVIDE_CHECK(sectionstats.coded_error);

View File

@ -17,8 +17,6 @@
void vp8_arch_x86_encoder_init(VP8_COMP *cpi); void vp8_arch_x86_encoder_init(VP8_COMP *cpi);
void vp8_arch_arm_encoder_init(VP8_COMP *cpi); void vp8_arch_arm_encoder_init(VP8_COMP *cpi);
void (*vp8_fast_quantize_b)(BLOCK *b, BLOCKD *d);
extern void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d); extern void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d);
void (*vp8_yv12_copy_partial_frame_ptr)(YV12_BUFFER_CONFIG *src_ybc, YV12_BUFFER_CONFIG *dst_ybc, int Fraction); void (*vp8_yv12_copy_partial_frame_ptr)(YV12_BUFFER_CONFIG *src_ybc, YV12_BUFFER_CONFIG *dst_ybc, int Fraction);

View File

@ -43,7 +43,7 @@ int vp8_mv_bit_cost(MV *mv, MV *ref, int *mvcost[2], int Weight)
return ((mvcost[0][(mv->row - ref->row) >> 1] + mvcost[1][(mv->col - ref->col) >> 1]) * Weight) >> 7; return ((mvcost[0][(mv->row - ref->row) >> 1] + mvcost[1][(mv->col - ref->col) >> 1]) * Weight) >> 7;
} }
int vp8_mv_err_cost(MV *mv, MV *ref, int *mvcost[2], int error_per_bit) static int mv_err_cost(MV *mv, MV *ref, int *mvcost[2], int error_per_bit)
{ {
//int i; //int i;
//return ((mvcost[0][(mv->row - ref->row)>>1] + mvcost[1][(mv->col - ref->col)>>1] + 128) * error_per_bit) >> 8; //return ((mvcost[0][(mv->row - ref->row)>>1] + mvcost[1][(mv->col - ref->col)>>1] + 128) * error_per_bit) >> 8;
@ -221,7 +221,7 @@ int vp8_find_best_sub_pixel_step_iteratively(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
// calculate central point error // calculate central point error
besterr = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse); besterr = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse);
besterr += vp8_mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit); besterr += mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit);
// TODO: Each subsequent iteration checks at least one point in common with the last iteration could be 2 ( if diag selected) // TODO: Each subsequent iteration checks at least one point in common with the last iteration could be 2 ( if diag selected)
while (--halfiters) while (--halfiters)
@ -337,13 +337,13 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
// calculate central point error // calculate central point error
bestmse = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse); bestmse = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse);
bestmse += vp8_mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit); bestmse += mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit);
// go left then right and check error // go left then right and check error
this_mv.row = startmv.row; this_mv.row = startmv.row;
this_mv.col = ((startmv.col - 8) | 4); this_mv.col = ((startmv.col - 8) | 4);
left = vfp->svf_halfpix_h(y - 1, d->pre_stride, z, b->src_stride, &sse); left = vfp->svf_halfpix_h(y - 1, d->pre_stride, z, b->src_stride, &sse);
left += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); left += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (left < bestmse) if (left < bestmse)
{ {
@ -353,7 +353,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
this_mv.col += 8; this_mv.col += 8;
right = vfp->svf_halfpix_h(y, d->pre_stride, z, b->src_stride, &sse); right = vfp->svf_halfpix_h(y, d->pre_stride, z, b->src_stride, &sse);
right += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); right += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (right < bestmse) if (right < bestmse)
{ {
@ -365,7 +365,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
this_mv.col = startmv.col; this_mv.col = startmv.col;
this_mv.row = ((startmv.row - 8) | 4); this_mv.row = ((startmv.row - 8) | 4);
up = vfp->svf_halfpix_v(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse); up = vfp->svf_halfpix_v(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse);
up += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); up += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (up < bestmse) if (up < bestmse)
{ {
@ -375,7 +375,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
this_mv.row += 8; this_mv.row += 8;
down = vfp->svf_halfpix_v(y, d->pre_stride, z, b->src_stride, &sse); down = vfp->svf_halfpix_v(y, d->pre_stride, z, b->src_stride, &sse);
down += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); down += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (down < bestmse) if (down < bestmse)
{ {
@ -415,7 +415,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
break; break;
} }
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -451,7 +451,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
left = vfp->svf(y - 1, d->pre_stride, 6, this_mv.row & 7, z, b->src_stride, &sse); left = vfp->svf(y - 1, d->pre_stride, 6, this_mv.row & 7, z, b->src_stride, &sse);
} }
left += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); left += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (left < bestmse) if (left < bestmse)
{ {
@ -461,7 +461,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
this_mv.col += 4; this_mv.col += 4;
right = vfp->svf(y, d->pre_stride, this_mv.col & 7, this_mv.row & 7, z, b->src_stride, &sse); right = vfp->svf(y, d->pre_stride, this_mv.col & 7, this_mv.row & 7, z, b->src_stride, &sse);
right += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); right += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (right < bestmse) if (right < bestmse)
{ {
@ -483,7 +483,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
up = vfp->svf(y - d->pre_stride, d->pre_stride, this_mv.col & 7, 6, z, b->src_stride, &sse); up = vfp->svf(y - d->pre_stride, d->pre_stride, this_mv.col & 7, 6, z, b->src_stride, &sse);
} }
up += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); up += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (up < bestmse) if (up < bestmse)
{ {
@ -493,7 +493,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
this_mv.row += 4; this_mv.row += 4;
down = vfp->svf(y, d->pre_stride, this_mv.col & 7, this_mv.row & 7, z, b->src_stride, &sse); down = vfp->svf(y, d->pre_stride, this_mv.col & 7, this_mv.row & 7, z, b->src_stride, &sse);
down += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); down += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (down < bestmse) if (down < bestmse)
{ {
@ -582,7 +582,7 @@ int vp8_find_best_sub_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv,
break; break;
} }
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -621,13 +621,13 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
// calculate central point error // calculate central point error
bestmse = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse); bestmse = vfp->vf(y, d->pre_stride, z, b->src_stride, &sse);
bestmse += vp8_mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit); bestmse += mv_err_cost(bestmv, ref_mv, mvcost, error_per_bit);
// go left then right and check error // go left then right and check error
this_mv.row = startmv.row; this_mv.row = startmv.row;
this_mv.col = ((startmv.col - 8) | 4); this_mv.col = ((startmv.col - 8) | 4);
left = vfp->svf_halfpix_h(y - 1, d->pre_stride, z, b->src_stride, &sse); left = vfp->svf_halfpix_h(y - 1, d->pre_stride, z, b->src_stride, &sse);
left += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); left += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (left < bestmse) if (left < bestmse)
{ {
@ -637,7 +637,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col += 8; this_mv.col += 8;
right = vfp->svf_halfpix_h(y, d->pre_stride, z, b->src_stride, &sse); right = vfp->svf_halfpix_h(y, d->pre_stride, z, b->src_stride, &sse);
right += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); right += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (right < bestmse) if (right < bestmse)
{ {
@ -649,7 +649,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col = startmv.col; this_mv.col = startmv.col;
this_mv.row = ((startmv.row - 8) | 4); this_mv.row = ((startmv.row - 8) | 4);
up = vfp->svf_halfpix_v(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse); up = vfp->svf_halfpix_v(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse);
up += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); up += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (up < bestmse) if (up < bestmse)
{ {
@ -659,7 +659,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.row += 8; this_mv.row += 8;
down = vfp->svf_halfpix_v(y, d->pre_stride, z, b->src_stride, &sse); down = vfp->svf_halfpix_v(y, d->pre_stride, z, b->src_stride, &sse);
down += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); down += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (down < bestmse) if (down < bestmse)
{ {
@ -697,7 +697,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
break; break;
} }
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -709,7 +709,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col = (this_mv.col - 8) | 4; this_mv.col = (this_mv.col - 8) | 4;
this_mv.row = (this_mv.row - 8) | 4; this_mv.row = (this_mv.row - 8) | 4;
diag = vfp->svf_halfpix_hv(y - 1 - d->pre_stride, d->pre_stride, z, b->src_stride, &sse); diag = vfp->svf_halfpix_hv(y - 1 - d->pre_stride, d->pre_stride, z, b->src_stride, &sse);
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -719,7 +719,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col += 8; this_mv.col += 8;
diag = vfp->svf_halfpix_hv(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse); diag = vfp->svf_halfpix_hv(y - d->pre_stride, d->pre_stride, z, b->src_stride, &sse);
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -730,7 +730,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col = (this_mv.col - 8) | 4; this_mv.col = (this_mv.col - 8) | 4;
this_mv.row = startmv.row + 4; this_mv.row = startmv.row + 4;
diag = vfp->svf_halfpix_hv(y - 1, d->pre_stride, z, b->src_stride, &sse); diag = vfp->svf_halfpix_hv(y - 1, d->pre_stride, z, b->src_stride, &sse);
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -740,7 +740,7 @@ int vp8_find_best_half_pixel_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestm
this_mv.col += 8; this_mv.col += 8;
diag = vfp->svf_halfpix_hv(y, d->pre_stride, z, b->src_stride, &sse); diag = vfp->svf_halfpix_hv(y, d->pre_stride, z, b->src_stride, &sse);
diag += vp8_mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit); diag += mv_err_cost(&this_mv, ref_mv, mvcost, error_per_bit);
if (diag < bestmse) if (diag < bestmse)
{ {
@ -894,7 +894,7 @@ cal_neighbors:
best_mv->row = br; best_mv->row = br;
best_mv->col = bc; best_mv->col = bc;
return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + vp8_mv_err_cost(best_mv, center_mv, mvcost, error_per_bit) ; return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + mv_err_cost(best_mv, center_mv, mvcost, error_per_bit) ;
} }
#undef MVC #undef MVC
#undef PRE #undef PRE
@ -955,7 +955,7 @@ int vp8_diamond_search_sad
(ref_row > x->mv_row_min) && (ref_row < x->mv_row_max)) (ref_row > x->mv_row_min) && (ref_row < x->mv_row_max))
{ {
// Check the starting position // Check the starting position
bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff) + vp8_mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit); bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff) + mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit);
} }
// search_param determines the length of the initial step and hence the number of iterations // search_param determines the length of the initial step and hence the number of iterations
@ -986,7 +986,7 @@ int vp8_diamond_search_sad
{ {
this_mv.row = this_row_offset << 3; this_mv.row = this_row_offset << 3;
this_mv.col = this_col_offset << 3; this_mv.col = this_col_offset << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1017,7 +1017,7 @@ int vp8_diamond_search_sad
return INT_MAX; return INT_MAX;
return fn_ptr->vf(what, what_stride, best_address, in_what_stride, (unsigned int *)(&thissad)) return fn_ptr->vf(what, what_stride, best_address, in_what_stride, (unsigned int *)(&thissad))
+ vp8_mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit); + mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit);
} }
int vp8_diamond_search_sadx4 int vp8_diamond_search_sadx4
@ -1071,7 +1071,7 @@ int vp8_diamond_search_sadx4
(ref_row > x->mv_row_min) && (ref_row < x->mv_row_max)) (ref_row > x->mv_row_min) && (ref_row < x->mv_row_max))
{ {
// Check the starting position // Check the starting position
bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff) + vp8_mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit); bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff) + mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit);
} }
// search_param determines the length of the initial step and hence the number of iterations // search_param determines the length of the initial step and hence the number of iterations
@ -1113,7 +1113,7 @@ int vp8_diamond_search_sadx4
{ {
this_mv.row = (best_mv->row + ss[i].mv.row) << 3; this_mv.row = (best_mv->row + ss[i].mv.row) << 3;
this_mv.col = (best_mv->col + ss[i].mv.col) << 3; this_mv.col = (best_mv->col + ss[i].mv.col) << 3;
sad_array[t] += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); sad_array[t] += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (sad_array[t] < bestsad) if (sad_array[t] < bestsad)
{ {
@ -1142,7 +1142,7 @@ int vp8_diamond_search_sadx4
{ {
this_mv.row = this_row_offset << 3; this_mv.row = this_row_offset << 3;
this_mv.col = this_col_offset << 3; this_mv.col = this_col_offset << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1173,7 +1173,7 @@ int vp8_diamond_search_sadx4
return INT_MAX; return INT_MAX;
return fn_ptr->vf(what, what_stride, best_address, in_what_stride, (unsigned int *)(&thissad)) return fn_ptr->vf(what, what_stride, best_address, in_what_stride, (unsigned int *)(&thissad))
+ vp8_mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit); + mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit);
} }
@ -1215,8 +1215,8 @@ int vp8_full_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int erro
{ {
// Baseline value at the centre // Baseline value at the centre
//bestsad = fn_ptr->sf( what,what_stride,bestaddress,in_what_stride) + (int)sqrt(vp8_mv_err_cost(ref_mv,ref_mv, mvcost,error_per_bit*14)); //bestsad = fn_ptr->sf( what,what_stride,bestaddress,in_what_stride) + (int)sqrt(mv_err_cost(ref_mv,ref_mv, mvcost,error_per_bit*14));
bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + vp8_mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit); bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit);
} }
// Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border // Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border
@ -1242,9 +1242,9 @@ int vp8_full_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int erro
thissad = fn_ptr->sdf(what, what_stride, check_here , in_what_stride, bestsad); thissad = fn_ptr->sdf(what, what_stride, check_here , in_what_stride, bestsad);
this_mv.col = c << 3; this_mv.col = c << 3;
//thissad += (int)sqrt(vp8_mv_err_cost(&this_mv,ref_mv, mvcost,error_per_bit*14)); //thissad += (int)sqrt(mv_err_cost(&this_mv,ref_mv, mvcost,error_per_bit*14));
//thissad += error_per_bit * mv_bits_sadcost[mv_bits(&this_mv, ref_mv, mvcost)]; //thissad += error_per_bit * mv_bits_sadcost[mv_bits(&this_mv, ref_mv, mvcost)];
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); //mv_bits(error_per_bit, &this_mv, ref_mv, mvsadcost); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); //mv_bits(error_per_bit, &this_mv, ref_mv, mvsadcost);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1263,7 +1263,7 @@ int vp8_full_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int erro
if (bestsad < INT_MAX) if (bestsad < INT_MAX)
return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad)) return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad))
+ vp8_mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit); + mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit);
else else
return INT_MAX; return INT_MAX;
} }
@ -1306,7 +1306,7 @@ int vp8_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
(ref_row > x->mv_row_min) && (ref_row < x->mv_row_max)) (ref_row > x->mv_row_min) && (ref_row < x->mv_row_max))
{ {
// Baseline value at the centre // Baseline value at the centre
bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + vp8_mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit); bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit);
} }
// Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border // Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border
@ -1341,7 +1341,7 @@ int vp8_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (thissad < bestsad) if (thissad < bestsad)
{ {
this_mv.col = c << 3; this_mv.col = c << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1364,7 +1364,7 @@ int vp8_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (thissad < bestsad) if (thissad < bestsad)
{ {
this_mv.col = c << 3; this_mv.col = c << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1386,7 +1386,7 @@ int vp8_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (bestsad < INT_MAX) if (bestsad < INT_MAX)
return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad)) return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad))
+ vp8_mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit); + mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit);
else else
return INT_MAX; return INT_MAX;
} }
@ -1430,7 +1430,7 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
(ref_row > x->mv_row_min) && (ref_row < x->mv_row_max)) (ref_row > x->mv_row_min) && (ref_row < x->mv_row_max))
{ {
// Baseline value at the centre // Baseline value at the centre
bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + vp8_mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit); bestsad = fn_ptr->sdf(what, what_stride, bestaddress, in_what_stride, 0x7fffffff) + mv_err_cost(ref_mv, center_mv, mvsadcost, error_per_bit);
} }
// Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border // Apply further limits to prevent us looking using vectors that stretch beyiond the UMV border
@ -1465,7 +1465,7 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (thissad < bestsad) if (thissad < bestsad)
{ {
this_mv.col = c << 3; this_mv.col = c << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1494,7 +1494,7 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (thissad < bestsad) if (thissad < bestsad)
{ {
this_mv.col = c << 3; this_mv.col = c << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1517,7 +1517,7 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (thissad < bestsad) if (thissad < bestsad)
{ {
this_mv.col = c << 3; this_mv.col = c << 3;
thissad += vp8_mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit); thissad += mv_err_cost(&this_mv, center_mv, mvsadcost, error_per_bit);
if (thissad < bestsad) if (thissad < bestsad)
{ {
@ -1538,7 +1538,7 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
if (bestsad < INT_MAX) if (bestsad < INT_MAX)
return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad)) return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride, (unsigned int *)(&thissad))
+ vp8_mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit); + mv_err_cost(&this_mv, center_mv, mvcost, error_per_bit);
else else
return INT_MAX; return INT_MAX;
} }

View File

@ -70,7 +70,6 @@ extern void vp8_yv12_copy_src_frame_func_neon(YV12_BUFFER_CONFIG *src_ybc, YV12_
int vp8_estimate_entropy_savings(VP8_COMP *cpi); int vp8_estimate_entropy_savings(VP8_COMP *cpi);
int vp8_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const vp8_variance_rtcd_vtable_t *rtcd); int vp8_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const vp8_variance_rtcd_vtable_t *rtcd);
int vp8_calc_low_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const vp8_variance_rtcd_vtable_t *rtcd);
extern void vp8_temporal_filter_prepare_c(VP8_COMP *cpi); extern void vp8_temporal_filter_prepare_c(VP8_COMP *cpi);
@ -330,7 +329,7 @@ static void setup_features(VP8_COMP *cpi)
} }
void vp8_dealloc_compressor_data(VP8_COMP *cpi) static void dealloc_compressor_data(VP8_COMP *cpi)
{ {
vpx_free(cpi->tplist); vpx_free(cpi->tplist);
cpi->tplist = NULL; cpi->tplist = NULL;
@ -1519,7 +1518,7 @@ rescale(int val, int num, int denom)
} }
void vp8_init_config(VP8_PTR ptr, VP8_CONFIG *oxcf) static void init_config(VP8_PTR ptr, VP8_CONFIG *oxcf)
{ {
VP8_COMP *cpi = (VP8_COMP *)(ptr); VP8_COMP *cpi = (VP8_COMP *)(ptr);
VP8_COMMON *cm = &cpi->common; VP8_COMMON *cm = &cpi->common;
@ -1910,7 +1909,7 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf)
vp8_create_common(&cpi->common); vp8_create_common(&cpi->common);
vp8_cmachine_specific_config(cpi); vp8_cmachine_specific_config(cpi);
vp8_init_config((VP8_PTR)cpi, oxcf); init_config((VP8_PTR)cpi, oxcf);
memcpy(cpi->base_skip_false_prob, vp8cx_base_skip_false_prob, sizeof(vp8cx_base_skip_false_prob)); memcpy(cpi->base_skip_false_prob, vp8cx_base_skip_false_prob, sizeof(vp8cx_base_skip_false_prob));
cpi->common.current_video_frame = 0; cpi->common.current_video_frame = 0;
@ -2410,7 +2409,7 @@ void vp8_remove_compressor(VP8_PTR *ptr)
vp8cx_remove_encoder_threads(cpi); vp8cx_remove_encoder_threads(cpi);
#endif #endif
vp8_dealloc_compressor_data(cpi); dealloc_compressor_data(cpi);
vpx_free(cpi->mb.ss); vpx_free(cpi->mb.ss);
vpx_free(cpi->tok); vpx_free(cpi->tok);
vpx_free(cpi->cyclic_refresh_map); vpx_free(cpi->cyclic_refresh_map);
@ -4684,18 +4683,8 @@ static void encode_frame_to_data_rate
} }
int vp8_is_gf_update_needed(VP8_PTR ptr)
{
VP8_COMP *cpi = (VP8_COMP *) ptr;
int ret_val;
ret_val = cpi->gf_update_recommended; static void check_gf_quality(VP8_COMP *cpi)
cpi->gf_update_recommended = 0;
return ret_val;
}
void vp8_check_gf_quality(VP8_COMP *cpi)
{ {
VP8_COMMON *cm = &cpi->common; VP8_COMMON *cm = &cpi->common;
int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols); int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols);
@ -4944,7 +4933,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
if (start_frame < 0) if (start_frame < 0)
start_frame += cpi->oxcf.lag_in_frames; start_frame += cpi->oxcf.lag_in_frames;
besterr = vp8_calc_low_ss_err(&cpi->src_buffer[cpi->last_alt_ref_sei].source_buffer, besterr = calc_low_ss_err(&cpi->src_buffer[cpi->last_alt_ref_sei].source_buffer,
&cpi->src_buffer[start_frame].source_buffer, IF_RTCD(&cpi->rtcd.variance)); &cpi->src_buffer[start_frame].source_buffer, IF_RTCD(&cpi->rtcd.variance));
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
@ -4953,7 +4942,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
cpi->oxcf.arnr_strength = i; cpi->oxcf.arnr_strength = i;
vp8_temporal_filter_prepare_c(cpi); vp8_temporal_filter_prepare_c(cpi);
thiserr = vp8_calc_low_ss_err(&cpi->alt_ref_buffer.source_buffer, thiserr = calc_low_ss_err(&cpi->alt_ref_buffer.source_buffer,
&cpi->src_buffer[start_frame].source_buffer, IF_RTCD(&cpi->rtcd.variance)); &cpi->src_buffer[start_frame].source_buffer, IF_RTCD(&cpi->rtcd.variance));
if (10 * thiserr < besterr * 8) if (10 * thiserr < besterr * 8)
@ -5096,7 +5085,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
if (cpi->compressor_speed == 2) if (cpi->compressor_speed == 2)
{ {
vp8_check_gf_quality(cpi); check_gf_quality(cpi);
vpx_usec_timer_start(&tsctimer); vpx_usec_timer_start(&tsctimer);
vpx_usec_timer_start(&ticktimer); vpx_usec_timer_start(&ticktimer);
} }
@ -5483,7 +5472,9 @@ int vp8_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const
return Total; return Total;
} }
int vp8_calc_low_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const vp8_variance_rtcd_vtable_t *rtcd)
static int calc_low_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, const vp8_variance_rtcd_vtable_t *rtcd)
{ {
int i, j; int i, j;
int Total = 0; int Total = 0;
@ -5511,11 +5502,7 @@ int vp8_calc_low_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, co
return Total; return Total;
} }
int vp8_get_speed(VP8_PTR c)
{
VP8_COMP *cpi = (VP8_COMP *) c;
return cpi->Speed;
}
int vp8_get_quantizer(VP8_PTR c) int vp8_get_quantizer(VP8_PTR c)
{ {
VP8_COMP *cpi = (VP8_COMP *) c; VP8_COMP *cpi = (VP8_COMP *) c;

View File

@ -29,89 +29,3 @@ double vp8_mse2psnr(double Samples, double Peak, double Mse)
return psnr; return psnr;
} }
double vp8_calc_psnr(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, double *YPsnr, double *UPsnr, double *VPsnr, double *sq_error)
{
int i, j;
int Diff;
double frame_psnr;
double Total;
double grand_total;
unsigned char *src = source->y_buffer;
unsigned char *dst = dest->y_buffer;
Total = 0.0;
grand_total = 0.0;
// Loop throught the Y plane raw and reconstruction data summing (square differences)
for (i = 0; i < source->y_height; i++)
{
for (j = 0; j < source->y_width; j++)
{
Diff = (int)(src[j]) - (int)(dst[j]);
Total += Diff * Diff;
}
src += source->y_stride;
dst += dest->y_stride;
}
// Work out Y PSNR
*YPsnr = vp8_mse2psnr(source->y_height * source->y_width, 255.0, Total);
grand_total += Total;
Total = 0;
// Loop through the U plane
src = source->u_buffer;
dst = dest->u_buffer;
for (i = 0; i < source->uv_height; i++)
{
for (j = 0; j < source->uv_width; j++)
{
Diff = (int)(src[j]) - (int)(dst[j]);
Total += Diff * Diff;
}
src += source->uv_stride;
dst += dest->uv_stride;
}
// Work out U PSNR
*UPsnr = vp8_mse2psnr(source->uv_height * source->uv_width, 255.0, Total);
grand_total += Total;
Total = 0;
// V PSNR
src = source->v_buffer;
dst = dest->v_buffer;
for (i = 0; i < source->uv_height; i++)
{
for (j = 0; j < source->uv_width; j++)
{
Diff = (int)(src[j]) - (int)(dst[j]);
Total += Diff * Diff;
}
src += source->uv_stride;
dst += dest->uv_stride;
}
// Work out UV PSNR
*VPsnr = vp8_mse2psnr(source->uv_height * source->uv_width, 255.0, Total);
grand_total += Total;
Total = 0;
// Work out total PSNR
frame_psnr = vp8_mse2psnr(source->y_height * source->y_width * 3 / 2 , 255.0, grand_total);
*sq_error = 1.0 * grand_total;
return frame_psnr;
}

View File

@ -13,6 +13,5 @@
#define __INC_PSNR_H #define __INC_PSNR_H
extern double vp8_mse2psnr(double Samples, double Peak, double Mse); extern double vp8_mse2psnr(double Samples, double Peak, double Mse);
extern double vp8_calc_psnr(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, double *YPsnr, double *UPsnr, double *VPsnr, double *sq_error);
#endif #endif

View File

@ -135,7 +135,7 @@ const int vp8_bits_per_mb[2][QINDEX_RANGE] =
}; };
#endif #endif
const int vp8_kf_boost_qadjustment[QINDEX_RANGE] = static const int kf_boost_qadjustment[QINDEX_RANGE] =
{ {
128, 129, 130, 131, 132, 133, 134, 135, 128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 142, 143, 136, 137, 138, 139, 140, 141, 142, 143,
@ -199,7 +199,7 @@ const int vp8_gf_boost_qadjustment[QINDEX_RANGE] =
}; };
*/ */
const int vp8_kf_gf_boost_qlimits[QINDEX_RANGE] = static const int kf_gf_boost_qlimits[QINDEX_RANGE] =
{ {
150, 155, 160, 165, 170, 175, 180, 185, 150, 155, 160, 165, 170, 175, 180, 185,
190, 195, 200, 205, 210, 215, 220, 225, 190, 195, 200, 205, 210, 215, 220, 225,
@ -220,14 +220,14 @@ const int vp8_kf_gf_boost_qlimits[QINDEX_RANGE] =
}; };
// % adjustment to target kf size based on seperation from previous frame // % adjustment to target kf size based on seperation from previous frame
const int vp8_kf_boost_seperationt_adjustment[16] = static const int kf_boost_seperation_adjustment[16] =
{ {
30, 40, 50, 55, 60, 65, 70, 75, 30, 40, 50, 55, 60, 65, 70, 75,
80, 85, 90, 95, 100, 100, 100, 100, 80, 85, 90, 95, 100, 100, 100, 100,
}; };
const int vp8_gf_adjust_table[101] = static const int gf_adjust_table[101] =
{ {
100, 100,
115, 130, 145, 160, 175, 190, 200, 210, 220, 230, 115, 130, 145, 160, 175, 190, 200, 210, 220, 230,
@ -242,13 +242,13 @@ const int vp8_gf_adjust_table[101] =
400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
}; };
const int vp8_gf_intra_useage_adjustment[20] = static const int gf_intra_usage_adjustment[20] =
{ {
125, 120, 115, 110, 105, 100, 95, 85, 80, 75, 125, 120, 115, 110, 105, 100, 95, 85, 80, 75,
70, 65, 60, 55, 50, 50, 50, 50, 50, 50, 70, 65, 60, 55, 50, 50, 50, 50, 50, 50,
}; };
const int vp8_gf_interval_table[101] = static const int gf_interval_table[101] =
{ {
7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@ -398,7 +398,7 @@ void vp8_calc_auto_iframe_target_size(VP8_COMP *cpi)
kf_boost = (int)(2 * cpi->output_frame_rate - 16); kf_boost = (int)(2 * cpi->output_frame_rate - 16);
// adjustment up based on q // adjustment up based on q
kf_boost = kf_boost * vp8_kf_boost_qadjustment[cpi->ni_av_qi] / 100; kf_boost = kf_boost * kf_boost_qadjustment[cpi->ni_av_qi] / 100;
// frame separation adjustment ( down) // frame separation adjustment ( down)
if (cpi->frames_since_key < cpi->output_frame_rate / 2) if (cpi->frames_since_key < cpi->output_frame_rate / 2)
@ -533,10 +533,10 @@ static void calc_gf_params(VP8_COMP *cpi)
Boost = GFQ_ADJUSTMENT; Boost = GFQ_ADJUSTMENT;
// Adjust based upon most recently measure intra useage // Adjust based upon most recently measure intra useage
Boost = Boost * vp8_gf_intra_useage_adjustment[(cpi->this_frame_percent_intra < 15) ? cpi->this_frame_percent_intra : 14] / 100; Boost = Boost * gf_intra_usage_adjustment[(cpi->this_frame_percent_intra < 15) ? cpi->this_frame_percent_intra : 14] / 100;
// Adjust gf boost based upon GF usage since last GF // Adjust gf boost based upon GF usage since last GF
Boost = Boost * vp8_gf_adjust_table[gf_frame_useage] / 100; Boost = Boost * gf_adjust_table[gf_frame_useage] / 100;
#endif #endif
} }
@ -548,8 +548,8 @@ static void calc_gf_params(VP8_COMP *cpi)
} }
// Apply an upper limit based on Q for 1 pass encodes // Apply an upper limit based on Q for 1 pass encodes
if (Boost > vp8_kf_gf_boost_qlimits[Q] && (cpi->pass == 0)) if (Boost > kf_gf_boost_qlimits[Q] && (cpi->pass == 0))
Boost = vp8_kf_gf_boost_qlimits[Q]; Boost = kf_gf_boost_qlimits[Q];
// Apply lower limits to boost. // Apply lower limits to boost.
else if (Boost < 110) else if (Boost < 110)
@ -584,8 +584,8 @@ static void calc_gf_params(VP8_COMP *cpi)
if (cpi->last_boost >= 1500) if (cpi->last_boost >= 1500)
cpi->frames_till_gf_update_due ++; cpi->frames_till_gf_update_due ++;
if (vp8_gf_interval_table[gf_frame_useage] > cpi->frames_till_gf_update_due) if (gf_interval_table[gf_frame_useage] > cpi->frames_till_gf_update_due)
cpi->frames_till_gf_update_due = vp8_gf_interval_table[gf_frame_useage]; cpi->frames_till_gf_update_due = gf_interval_table[gf_frame_useage];
if (cpi->frames_till_gf_update_due > cpi->max_gf_interval) if (cpi->frames_till_gf_update_due > cpi->max_gf_interval)
cpi->frames_till_gf_update_due = cpi->max_gf_interval; cpi->frames_till_gf_update_due = cpi->max_gf_interval;
@ -639,17 +639,17 @@ void vp8_calc_iframe_target_size(VP8_COMP *cpi)
// between key frames. // between key frames.
// Adjust boost based upon ambient Q // Adjust boost based upon ambient Q
Boost = vp8_kf_boost_qadjustment[Q]; Boost = kf_boost_qadjustment[Q];
// Make the Key frame boost less if the seperation from the previous key frame is small // Make the Key frame boost less if the seperation from the previous key frame is small
if (cpi->frames_since_key < 16) if (cpi->frames_since_key < 16)
Boost = Boost * vp8_kf_boost_seperationt_adjustment[cpi->frames_since_key] / 100; Boost = Boost * kf_boost_seperation_adjustment[cpi->frames_since_key] / 100;
else else
Boost = Boost * vp8_kf_boost_seperationt_adjustment[15] / 100; Boost = Boost * kf_boost_seperation_adjustment[15] / 100;
// Apply limits on boost // Apply limits on boost
if (Boost > vp8_kf_gf_boost_qlimits[Q]) if (Boost > kf_gf_boost_qlimits[Q])
Boost = vp8_kf_gf_boost_qlimits[Q]; Boost = kf_gf_boost_qlimits[Q];
else if (Boost < 120) else if (Boost < 120)
Boost = 120; Boost = 120;
} }

View File

@ -53,7 +53,7 @@ extern void vp8_update_zbin_extra(VP8_COMP *cpi, MACROBLOCK *x);
const int vp8_auto_speed_thresh[17] = static const int auto_speed_thresh[17] =
{ {
1000, 1000,
200, 200,
@ -414,7 +414,7 @@ void vp8_auto_select_speed(VP8_COMP *cpi)
} }
} }
if (milliseconds_for_compress * 100 > cpi->avg_encode_time * vp8_auto_speed_thresh[cpi->Speed]) if (milliseconds_for_compress * 100 > cpi->avg_encode_time * auto_speed_thresh[cpi->Speed])
{ {
cpi->Speed -= 1; cpi->Speed -= 1;
cpi->avg_pick_mode_time = 0; cpi->avg_pick_mode_time = 0;
@ -1065,13 +1065,6 @@ static unsigned int vp8_encode_inter_mb_segment(MACROBLOCK *x, int const *labels
d += ENCODEMB_INVOKE(rtcd, berr)(mb_y2->coeff, x_y2->dqcoeff)<<2; d += ENCODEMB_INVOKE(rtcd, berr)(mb_y2->coeff, x_y2->dqcoeff)<<2;
#else #else
#endif #endif
unsigned char vp8_mbsplit_offset2[4][16] = {
{ 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 2, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
};
static const unsigned int segmentation_to_sseshift[4] = {3, 3, 2, 0}; static const unsigned int segmentation_to_sseshift[4] = {3, 3, 2, 0};
@ -1099,8 +1092,8 @@ typedef struct
} BEST_SEG_INFO; } BEST_SEG_INFO;
void vp8_rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x, BEST_SEG_INFO *bsi, static void rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x,
unsigned int segmentation) BEST_SEG_INFO *bsi, unsigned int segmentation)
{ {
int i; int i;
int const *labels; int const *labels;
@ -1218,7 +1211,7 @@ void vp8_rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x, BEST_SEG_INFO *bsi,
int sadpb = x->sadperbit4; int sadpb = x->sadperbit4;
// find first label // find first label
n = vp8_mbsplit_offset2[segmentation][i]; n = vp8_mbsplit_offset[segmentation][i];
c = &x->block[n]; c = &x->block[n];
e = &x->e_mbd.block[n]; e = &x->e_mbd.block[n];
@ -1397,16 +1390,16 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
{ {
/* for now, we will keep the original segmentation order /* for now, we will keep the original segmentation order
when in best quality mode */ when in best quality mode */
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_16X8); rd_check_segment(cpi, x, &bsi, BLOCK_16X8);
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_8X16); rd_check_segment(cpi, x, &bsi, BLOCK_8X16);
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_8X8); rd_check_segment(cpi, x, &bsi, BLOCK_8X8);
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_4X4); rd_check_segment(cpi, x, &bsi, BLOCK_4X4);
} }
else else
{ {
int sr; int sr;
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_8X8); rd_check_segment(cpi, x, &bsi, BLOCK_8X8);
if (bsi.segment_rd < best_rd) if (bsi.segment_rd < best_rd)
{ {
@ -1445,7 +1438,7 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
sr = MAXF((abs(bsi.sv_mvp[1].row - bsi.sv_mvp[3].row))>>3, (abs(bsi.sv_mvp[1].col - bsi.sv_mvp[3].col))>>3); sr = MAXF((abs(bsi.sv_mvp[1].row - bsi.sv_mvp[3].row))>>3, (abs(bsi.sv_mvp[1].col - bsi.sv_mvp[3].col))>>3);
vp8_cal_step_param(sr, &bsi.sv_istep[1]); vp8_cal_step_param(sr, &bsi.sv_istep[1]);
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_8X16); rd_check_segment(cpi, x, &bsi, BLOCK_8X16);
} }
/* block 16X8 */ /* block 16X8 */
@ -1456,7 +1449,7 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
sr = MAXF((abs(bsi.sv_mvp[2].row - bsi.sv_mvp[3].row))>>3, (abs(bsi.sv_mvp[2].col - bsi.sv_mvp[3].col))>>3); sr = MAXF((abs(bsi.sv_mvp[2].row - bsi.sv_mvp[3].row))>>3, (abs(bsi.sv_mvp[2].col - bsi.sv_mvp[3].col))>>3);
vp8_cal_step_param(sr, &bsi.sv_istep[1]); vp8_cal_step_param(sr, &bsi.sv_istep[1]);
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_16X8); rd_check_segment(cpi, x, &bsi, BLOCK_16X8);
} }
/* If 8x8 is better than 16x8/8x16, then do 4x4 search */ /* If 8x8 is better than 16x8/8x16, then do 4x4 search */
@ -1464,7 +1457,7 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
if (cpi->sf.no_skip_block4x4_search || bsi.segment_num == BLOCK_8X8) /* || (sv_segment_rd8x8-bsi.segment_rd) < sv_segment_rd8x8>>5) */ if (cpi->sf.no_skip_block4x4_search || bsi.segment_num == BLOCK_8X8) /* || (sv_segment_rd8x8-bsi.segment_rd) < sv_segment_rd8x8>>5) */
{ {
bsi.mvp = &bsi.sv_mvp[0]; bsi.mvp = &bsi.sv_mvp[0];
vp8_rd_check_segment(cpi, x, &bsi, BLOCK_4X4); rd_check_segment(cpi, x, &bsi, BLOCK_4X4);
} }
/* restore UMV window */ /* restore UMV window */
@ -1497,7 +1490,7 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
{ {
int j; int j;
j = vp8_mbsplit_offset2[bsi.segment_num][i]; j = vp8_mbsplit_offset[bsi.segment_num][i];
x->partition_info->bmi[i].mode = x->e_mbd.block[j].bmi.mode; x->partition_info->bmi[i].mode = x->e_mbd.block[j].bmi.mode;
x->partition_info->bmi[i].mv.as_mv = x->e_mbd.block[j].bmi.mv.as_mv; x->partition_info->bmi[i].mv.as_mv = x->e_mbd.block[j].bmi.mv.as_mv;

View File

@ -26,9 +26,9 @@ _int64 context_counters[BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef
void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) ; void vp8_stuff_mb(VP8_COMP *cpi, MACROBLOCKD *x, TOKENEXTRA **t) ;
void vp8_fix_contexts(MACROBLOCKD *x); void vp8_fix_contexts(MACROBLOCKD *x);
TOKENVALUE vp8_dct_value_tokens[DCT_MAX_VALUE*2]; static TOKENVALUE dct_value_tokens[DCT_MAX_VALUE*2];
const TOKENVALUE *vp8_dct_value_tokens_ptr; const TOKENVALUE *vp8_dct_value_tokens_ptr;
int vp8_dct_value_cost[DCT_MAX_VALUE*2]; static int dct_value_cost[DCT_MAX_VALUE*2];
const int *vp8_dct_value_cost_ptr; const int *vp8_dct_value_cost_ptr;
#if 0 #if 0
int skip_true_count = 0; int skip_true_count = 0;
@ -37,7 +37,7 @@ int skip_false_count = 0;
static void fill_value_tokens() static void fill_value_tokens()
{ {
TOKENVALUE *const t = vp8_dct_value_tokens + DCT_MAX_VALUE; TOKENVALUE *const t = dct_value_tokens + DCT_MAX_VALUE;
vp8_extra_bit_struct *const e = vp8_extra_bits; vp8_extra_bit_struct *const e = vp8_extra_bits;
int i = -DCT_MAX_VALUE; int i = -DCT_MAX_VALUE;
@ -81,7 +81,7 @@ static void fill_value_tokens()
cost += vp8_treed_cost(p->tree, p->prob, extra >> 1, Length); cost += vp8_treed_cost(p->tree, p->prob, extra >> 1, Length);
cost += vp8_cost_bit(vp8_prob_half, extra & 1); /* sign */ cost += vp8_cost_bit(vp8_prob_half, extra & 1); /* sign */
vp8_dct_value_cost[i + DCT_MAX_VALUE] = cost; dct_value_cost[i + DCT_MAX_VALUE] = cost;
} }
} }
@ -89,8 +89,8 @@ static void fill_value_tokens()
} }
while (++i < DCT_MAX_VALUE); while (++i < DCT_MAX_VALUE);
vp8_dct_value_tokens_ptr = vp8_dct_value_tokens + DCT_MAX_VALUE; vp8_dct_value_tokens_ptr = dct_value_tokens + DCT_MAX_VALUE;
vp8_dct_value_cost_ptr = vp8_dct_value_cost + DCT_MAX_VALUE; vp8_dct_value_cost_ptr = dct_value_cost + DCT_MAX_VALUE;
} }
static void tokenize2nd_order_b static void tokenize2nd_order_b

View File

@ -10,33 +10,8 @@
#include "variance.h" #include "variance.h"
#include "vp8/common/filter.h"
const int vp8_six_tap[8][6] =
{
{ 0, 0, 128, 0, 0, 0 }, // note that 1/8 pel positions are just as per alpha -0.5 bicubic
{ 0, -6, 123, 12, -1, 0 },
{ 2, -11, 108, 36, -8, 1 }, // New 1/4 pel 6 tap filter
{ 0, -9, 93, 50, -6, 0 },
{ 3, -16, 77, 77, -16, 3 }, // New 1/2 pel 6 tap filter
{ 0, -6, 50, 93, -9, 0 },
{ 1, -8, 36, 108, -11, 2 }, // New 1/4 pel 6 tap filter
{ 0, -1, 12, 123, -6, 0 }
};
const int VP8_FILTER_WEIGHT = 128;
const int VP8_FILTER_SHIFT = 7;
const int vp8_bilinear_taps[8][2] =
{
{ 128, 0 },
{ 112, 16 },
{ 96, 32 },
{ 80, 48 },
{ 64, 64 },
{ 48, 80 },
{ 32, 96 },
{ 16, 112 }
};
unsigned int vp8_get_mb_ss_c unsigned int vp8_get_mb_ss_c
( (
@ -56,7 +31,7 @@ unsigned int vp8_get_mb_ss_c
} }
void vp8_variance( static void variance(
const unsigned char *src_ptr, const unsigned char *src_ptr,
int source_stride, int source_stride,
const unsigned char *ref_ptr, const unsigned char *ref_ptr,
@ -98,7 +73,7 @@ vp8_get8x8var_c
) )
{ {
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, SSE, Sum); variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, SSE, Sum);
return (*SSE - (((*Sum) * (*Sum)) >> 6)); return (*SSE - (((*Sum) * (*Sum)) >> 6));
} }
@ -114,7 +89,7 @@ vp8_get16x16var_c
) )
{ {
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, SSE, Sum); variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, SSE, Sum);
return (*SSE - (((*Sum) * (*Sum)) >> 8)); return (*SSE - (((*Sum) * (*Sum)) >> 8));
} }
@ -132,7 +107,7 @@ unsigned int vp8_variance16x16_c(
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
*sse = var; *sse = var;
return (var - ((avg * avg) >> 8)); return (var - ((avg * avg) >> 8));
} }
@ -148,7 +123,7 @@ unsigned int vp8_variance8x16_c(
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 16, &var, &avg);
*sse = var; *sse = var;
return (var - ((avg * avg) >> 7)); return (var - ((avg * avg) >> 7));
} }
@ -164,7 +139,7 @@ unsigned int vp8_variance16x8_c(
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 8, &var, &avg);
*sse = var; *sse = var;
return (var - ((avg * avg) >> 7)); return (var - ((avg * avg) >> 7));
} }
@ -181,7 +156,7 @@ unsigned int vp8_variance8x8_c(
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 8, 8, &var, &avg);
*sse = var; *sse = var;
return (var - ((avg * avg) >> 6)); return (var - ((avg * avg) >> 6));
} }
@ -197,7 +172,7 @@ unsigned int vp8_variance4x4_c(
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 4, 4, &var, &avg);
*sse = var; *sse = var;
return (var - ((avg * avg) >> 4)); return (var - ((avg * avg) >> 4));
} }
@ -213,7 +188,7 @@ unsigned int vp8_mse16x16_c(
unsigned int var; unsigned int var;
int avg; int avg;
vp8_variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg); variance(src_ptr, source_stride, ref_ptr, recon_stride, 16, 16, &var, &avg);
*sse = var; *sse = var;
return var; return var;
} }
@ -247,7 +222,7 @@ unsigned int vp8_mse16x16_c(
* to the next. * to the next.
* *
****************************************************************************/ ****************************************************************************/
void vp8e_filter_block2d_bil_first_pass static void var_filter_block2d_bil_first_pass
( (
const unsigned char *src_ptr, const unsigned char *src_ptr,
unsigned short *output_ptr, unsigned short *output_ptr,
@ -255,7 +230,7 @@ void vp8e_filter_block2d_bil_first_pass
int pixel_step, int pixel_step,
unsigned int output_height, unsigned int output_height,
unsigned int output_width, unsigned int output_width,
const int *vp8_filter const short *vp8_filter
) )
{ {
unsigned int i, j; unsigned int i, j;
@ -305,7 +280,7 @@ void vp8e_filter_block2d_bil_first_pass
* to the next. * to the next.
* *
****************************************************************************/ ****************************************************************************/
void vp8e_filter_block2d_bil_second_pass static void var_filter_block2d_bil_second_pass
( (
const unsigned short *src_ptr, const unsigned short *src_ptr,
unsigned char *output_ptr, unsigned char *output_ptr,
@ -313,7 +288,7 @@ void vp8e_filter_block2d_bil_second_pass
unsigned int pixel_step, unsigned int pixel_step,
unsigned int output_height, unsigned int output_height,
unsigned int output_width, unsigned int output_width,
const int *vp8_filter const short *vp8_filter
) )
{ {
unsigned int i, j; unsigned int i, j;
@ -338,52 +313,6 @@ void vp8e_filter_block2d_bil_second_pass
} }
/****************************************************************************
*
* ROUTINE : filter_block2d_bil
*
* INPUTS : UINT8 *src_ptr : Pointer to source block.
* UINT32 src_pixels_per_line : Stride of input block.
* INT32 *HFilter : Array of 2 horizontal filter taps.
* INT32 *VFilter : Array of 2 vertical filter taps.
*
* OUTPUTS : UINT16 *output_ptr : Pointer to filtered block.
*
* RETURNS : void
*
* FUNCTION : 2-D filters an 8x8 input block by applying a 2-tap
* bi-linear filter horizontally followed by a 2-tap
* bi-linear filter vertically on the result.
*
* SPECIAL NOTES : The intermediate horizontally filtered block must produce
* 1 more point than the input block in each column. This
* is to ensure that the 2-tap filter has one extra data-point
* at the top of each column so filter taps do not extend
* beyond data. Thus the output of the first stage filter
* is an 8x9 (hx_v) block.
*
****************************************************************************/
void vp8e_filter_block2d_bil
(
const unsigned char *src_ptr,
unsigned char *output_ptr,
unsigned int src_pixels_per_line,
int *HFilter,
int *VFilter
)
{
unsigned short FData[20*16]; // Temp data bufffer used in filtering
// First filter 1-D horizontally...
vp8e_filter_block2d_bil_first_pass(src_ptr, FData, src_pixels_per_line, 1, 9, 8, HFilter);
// then 1-D vertically...
vp8e_filter_block2d_bil_second_pass(FData, output_ptr, 8, 8, 8, 8, VFilter);
}
unsigned int vp8_sub_pixel_variance4x4_c unsigned int vp8_sub_pixel_variance4x4_c
( (
const unsigned char *src_ptr, const unsigned char *src_ptr,
@ -396,17 +325,17 @@ unsigned int vp8_sub_pixel_variance4x4_c
) )
{ {
unsigned char temp2[20*16]; unsigned char temp2[20*16];
const int *HFilter, *VFilter; const short *HFilter, *VFilter;
unsigned short FData3[5*4]; // Temp data bufffer used in filtering unsigned short FData3[5*4]; // Temp data bufffer used in filtering
HFilter = vp8_bilinear_taps[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_taps[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
// First filter 1d Horizontal // First filter 1d Horizontal
vp8e_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 5, 4, HFilter); var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 5, 4, HFilter);
// Now filter Verticaly // Now filter Verticaly
vp8e_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter); var_filter_block2d_bil_second_pass(FData3, temp2, 4, 4, 4, 4, VFilter);
return vp8_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse); return vp8_variance4x4_c(temp2, 4, dst_ptr, dst_pixels_per_line, sse);
} }
@ -425,13 +354,13 @@ unsigned int vp8_sub_pixel_variance8x8_c
{ {
unsigned short FData3[9*8]; // Temp data bufffer used in filtering unsigned short FData3[9*8]; // Temp data bufffer used in filtering
unsigned char temp2[20*16]; unsigned char temp2[20*16];
const int *HFilter, *VFilter; const short *HFilter, *VFilter;
HFilter = vp8_bilinear_taps[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_taps[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8e_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 8, HFilter); var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 8, HFilter);
vp8e_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 8, 8, VFilter); var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 8, 8, VFilter);
return vp8_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); return vp8_variance8x8_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
} }
@ -449,13 +378,13 @@ unsigned int vp8_sub_pixel_variance16x16_c
{ {
unsigned short FData3[17*16]; // Temp data bufffer used in filtering unsigned short FData3[17*16]; // Temp data bufffer used in filtering
unsigned char temp2[20*16]; unsigned char temp2[20*16];
const int *HFilter, *VFilter; const short *HFilter, *VFilter;
HFilter = vp8_bilinear_taps[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_taps[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8e_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 16, HFilter); var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 16, HFilter);
vp8e_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 16, 16, VFilter); var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 16, 16, VFilter);
return vp8_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); return vp8_variance16x16_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
} }
@ -525,13 +454,13 @@ unsigned int vp8_sub_pixel_variance16x8_c
{ {
unsigned short FData3[16*9]; // Temp data bufffer used in filtering unsigned short FData3[16*9]; // Temp data bufffer used in filtering
unsigned char temp2[20*16]; unsigned char temp2[20*16];
const int *HFilter, *VFilter; const short *HFilter, *VFilter;
HFilter = vp8_bilinear_taps[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_taps[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8e_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 16, HFilter); var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 9, 16, HFilter);
vp8e_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 8, 16, VFilter); var_filter_block2d_bil_second_pass(FData3, temp2, 16, 16, 8, 16, VFilter);
return vp8_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse); return vp8_variance16x8_c(temp2, 16, dst_ptr, dst_pixels_per_line, sse);
} }
@ -549,15 +478,15 @@ unsigned int vp8_sub_pixel_variance8x16_c
{ {
unsigned short FData3[9*16]; // Temp data bufffer used in filtering unsigned short FData3[9*16]; // Temp data bufffer used in filtering
unsigned char temp2[20*16]; unsigned char temp2[20*16];
const int *HFilter, *VFilter; const short *HFilter, *VFilter;
HFilter = vp8_bilinear_taps[xoffset]; HFilter = vp8_bilinear_filters[xoffset];
VFilter = vp8_bilinear_taps[yoffset]; VFilter = vp8_bilinear_filters[yoffset];
vp8e_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 8, HFilter); var_filter_block2d_bil_first_pass(src_ptr, FData3, src_pixels_per_line, 1, 17, 8, HFilter);
vp8e_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter); var_filter_block2d_bil_second_pass(FData3, temp2, 8, 8, 16, 8, VFilter);
return vp8_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse); return vp8_variance8x16_c(temp2, 8, dst_ptr, dst_pixels_per_line, sse);
} }

View File

@ -53,13 +53,6 @@ extern unsigned int vp8_get4x4var_mmx
unsigned int *SSE, unsigned int *SSE,
int *Sum int *Sum
); );
extern unsigned int vp8_get4x4sse_cs_mmx
(
const unsigned char *src_ptr,
int source_stride,
const unsigned char *ref_ptr,
int recon_stride
);
extern void vp8_filter_block2d_bil4x4_var_mmx extern void vp8_filter_block2d_bil4x4_var_mmx
( (
const unsigned char *ref_ptr, const unsigned char *ref_ptr,
@ -92,39 +85,6 @@ extern unsigned int vp8_get16x16pred_error_mmx
); );
void vp8_test_get_mb_ss(void)
{
short zz[] =
{
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-2, -2, -2, -2, 2, 2, 2, 2, -2, -2, -2, -2, 2, 2, 2, 2,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-3, -3, -3, -3, 3, 3, 3, 3, -3, -3, -3, -3, 3, 3, 3, 3,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
-4, -4, -4, -4, 4, 4, 4, 4, -4, -4, -4, -4, 4, 4, 4, 4,
};
int s = 0, x = vp8_get_mb_ss_mmx(zz);
{
int y;
for (y = 0; y < 256; y++)
s += (zz[y] * zz[y]);
}
x += 0;
}
unsigned int vp8_get16x16var_mmx( unsigned int vp8_get16x16var_mmx(
const unsigned char *src_ptr, const unsigned char *src_ptr,
int source_stride, int source_stride,

View File

@ -16,7 +16,7 @@
#if HAVE_MMX #if HAVE_MMX
void vp8_short_fdct8x4_mmx(short *input, short *output, int pitch) static void short_fdct8x4_mmx(short *input, short *output, int pitch)
{ {
vp8_short_fdct4x4_mmx(input, output, pitch); vp8_short_fdct4x4_mmx(input, output, pitch);
vp8_short_fdct4x4_mmx(input + 4, output + 16, pitch); vp8_short_fdct4x4_mmx(input + 4, output + 16, pitch);
@ -26,7 +26,7 @@ int vp8_fast_quantize_b_impl_mmx(short *coeff_ptr, short *zbin_ptr,
short *qcoeff_ptr, short *dequant_ptr, short *qcoeff_ptr, short *dequant_ptr,
short *scan_mask, short *round_ptr, short *scan_mask, short *round_ptr,
short *quant_ptr, short *dqcoeff_ptr); short *quant_ptr, short *dqcoeff_ptr);
void vp8_fast_quantize_b_mmx(BLOCK *b, BLOCKD *d) static void fast_quantize_b_mmx(BLOCK *b, BLOCKD *d)
{ {
short *scan_mask = vp8_default_zig_zag_mask;//d->scan_order_mask_ptr; short *scan_mask = vp8_default_zig_zag_mask;//d->scan_order_mask_ptr;
short *coeff_ptr = b->coeff; short *coeff_ptr = b->coeff;
@ -51,7 +51,7 @@ void vp8_fast_quantize_b_mmx(BLOCK *b, BLOCKD *d)
} }
int vp8_mbblock_error_mmx_impl(short *coeff_ptr, short *dcoef_ptr, int dc); int vp8_mbblock_error_mmx_impl(short *coeff_ptr, short *dcoef_ptr, int dc);
int vp8_mbblock_error_mmx(MACROBLOCK *mb, int dc) static int mbblock_error_mmx(MACROBLOCK *mb, int dc)
{ {
short *coeff_ptr = mb->block[0].coeff; short *coeff_ptr = mb->block[0].coeff;
short *dcoef_ptr = mb->e_mbd.block[0].dqcoeff; short *dcoef_ptr = mb->e_mbd.block[0].dqcoeff;
@ -59,7 +59,7 @@ int vp8_mbblock_error_mmx(MACROBLOCK *mb, int dc)
} }
int vp8_mbuverror_mmx_impl(short *s_ptr, short *d_ptr); int vp8_mbuverror_mmx_impl(short *s_ptr, short *d_ptr);
int vp8_mbuverror_mmx(MACROBLOCK *mb) static int mbuverror_mmx(MACROBLOCK *mb)
{ {
short *s_ptr = &mb->coeff[256]; short *s_ptr = &mb->coeff[256];
short *d_ptr = &mb->e_mbd.dqcoeff[256]; short *d_ptr = &mb->e_mbd.dqcoeff[256];
@ -69,7 +69,7 @@ int vp8_mbuverror_mmx(MACROBLOCK *mb)
void vp8_subtract_b_mmx_impl(unsigned char *z, int src_stride, void vp8_subtract_b_mmx_impl(unsigned char *z, int src_stride,
short *diff, unsigned char *predictor, short *diff, unsigned char *predictor,
int pitch); int pitch);
void vp8_subtract_b_mmx(BLOCK *be, BLOCKD *bd, int pitch) static void subtract_b_mmx(BLOCK *be, BLOCKD *bd, int pitch)
{ {
unsigned char *z = *(be->base_src) + be->src; unsigned char *z = *(be->base_src) + be->src;
unsigned int src_stride = be->src_stride; unsigned int src_stride = be->src_stride;
@ -85,7 +85,7 @@ int vp8_fast_quantize_b_impl_sse2(short *coeff_ptr,
short *qcoeff_ptr, short *dequant_ptr, short *qcoeff_ptr, short *dequant_ptr,
const short *inv_scan_order, short *round_ptr, const short *inv_scan_order, short *round_ptr,
short *quant_ptr, short *dqcoeff_ptr); short *quant_ptr, short *dqcoeff_ptr);
void vp8_fast_quantize_b_sse2(BLOCK *b, BLOCKD *d) static void fast_quantize_b_sse2(BLOCK *b, BLOCKD *d)
{ {
short *scan_mask = vp8_default_zig_zag_mask;//d->scan_order_mask_ptr; short *scan_mask = vp8_default_zig_zag_mask;//d->scan_order_mask_ptr;
short *coeff_ptr = b->coeff; short *coeff_ptr = b->coeff;
@ -115,7 +115,7 @@ int vp8_regular_quantize_b_impl_sse2(short *coeff_ptr, short *zbin_ptr,
short *zbin_boost_ptr, short *zbin_boost_ptr,
short *quant_shift_ptr); short *quant_shift_ptr);
void vp8_regular_quantize_b_sse2(BLOCK *b,BLOCKD *d) static void regular_quantize_b_sse2(BLOCK *b,BLOCKD *d)
{ {
d->eob = vp8_regular_quantize_b_impl_sse2(b->coeff, d->eob = vp8_regular_quantize_b_impl_sse2(b->coeff,
b->zbin, b->zbin,
@ -131,7 +131,7 @@ void vp8_regular_quantize_b_sse2(BLOCK *b,BLOCKD *d)
} }
int vp8_mbblock_error_xmm_impl(short *coeff_ptr, short *dcoef_ptr, int dc); int vp8_mbblock_error_xmm_impl(short *coeff_ptr, short *dcoef_ptr, int dc);
int vp8_mbblock_error_xmm(MACROBLOCK *mb, int dc) static int mbblock_error_xmm(MACROBLOCK *mb, int dc)
{ {
short *coeff_ptr = mb->block[0].coeff; short *coeff_ptr = mb->block[0].coeff;
short *dcoef_ptr = mb->e_mbd.block[0].dqcoeff; short *dcoef_ptr = mb->e_mbd.block[0].dqcoeff;
@ -139,7 +139,7 @@ int vp8_mbblock_error_xmm(MACROBLOCK *mb, int dc)
} }
int vp8_mbuverror_xmm_impl(short *s_ptr, short *d_ptr); int vp8_mbuverror_xmm_impl(short *s_ptr, short *d_ptr);
int vp8_mbuverror_xmm(MACROBLOCK *mb) static int mbuverror_xmm(MACROBLOCK *mb)
{ {
short *s_ptr = &mb->coeff[256]; short *s_ptr = &mb->coeff[256];
short *d_ptr = &mb->e_mbd.dqcoeff[256]; short *d_ptr = &mb->e_mbd.dqcoeff[256];
@ -149,7 +149,7 @@ int vp8_mbuverror_xmm(MACROBLOCK *mb)
void vp8_subtract_b_sse2_impl(unsigned char *z, int src_stride, void vp8_subtract_b_sse2_impl(unsigned char *z, int src_stride,
short *diff, unsigned char *predictor, short *diff, unsigned char *predictor,
int pitch); int pitch);
void vp8_subtract_b_sse2(BLOCK *be, BLOCKD *bd, int pitch) static void subtract_b_sse2(BLOCK *be, BLOCKD *bd, int pitch)
{ {
unsigned char *z = *(be->base_src) + be->src; unsigned char *z = *(be->base_src) + be->src;
unsigned int src_stride = be->src_stride; unsigned int src_stride = be->src_stride;
@ -165,7 +165,7 @@ int vp8_fast_quantize_b_impl_ssse3(short *coeff_ptr,
short *qcoeff_ptr, short *dequant_ptr, short *qcoeff_ptr, short *dequant_ptr,
short *round_ptr, short *round_ptr,
short *quant_ptr, short *dqcoeff_ptr); short *quant_ptr, short *dqcoeff_ptr);
void vp8_fast_quantize_b_ssse3(BLOCK *b, BLOCKD *d) static void fast_quantize_b_ssse3(BLOCK *b, BLOCKD *d)
{ {
d->eob = vp8_fast_quantize_b_impl_ssse3( d->eob = vp8_fast_quantize_b_impl_ssse3(
b->coeff, b->coeff,
@ -251,20 +251,20 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
cpi->rtcd.variance.get4x4sse_cs = vp8_get4x4sse_cs_mmx; cpi->rtcd.variance.get4x4sse_cs = vp8_get4x4sse_cs_mmx;
cpi->rtcd.fdct.short4x4 = vp8_short_fdct4x4_mmx; cpi->rtcd.fdct.short4x4 = vp8_short_fdct4x4_mmx;
cpi->rtcd.fdct.short8x4 = vp8_short_fdct8x4_mmx; cpi->rtcd.fdct.short8x4 = short_fdct8x4_mmx;
cpi->rtcd.fdct.fast4x4 = vp8_short_fdct4x4_mmx; cpi->rtcd.fdct.fast4x4 = vp8_short_fdct4x4_mmx;
cpi->rtcd.fdct.fast8x4 = vp8_short_fdct8x4_mmx; cpi->rtcd.fdct.fast8x4 = short_fdct8x4_mmx;
cpi->rtcd.fdct.walsh_short4x4 = vp8_short_walsh4x4_c; cpi->rtcd.fdct.walsh_short4x4 = vp8_short_walsh4x4_c;
cpi->rtcd.encodemb.berr = vp8_block_error_mmx; cpi->rtcd.encodemb.berr = vp8_block_error_mmx;
cpi->rtcd.encodemb.mberr = vp8_mbblock_error_mmx; cpi->rtcd.encodemb.mberr = mbblock_error_mmx;
cpi->rtcd.encodemb.mbuverr = vp8_mbuverror_mmx; cpi->rtcd.encodemb.mbuverr = mbuverror_mmx;
cpi->rtcd.encodemb.subb = vp8_subtract_b_mmx; cpi->rtcd.encodemb.subb = subtract_b_mmx;
cpi->rtcd.encodemb.submby = vp8_subtract_mby_mmx; cpi->rtcd.encodemb.submby = vp8_subtract_mby_mmx;
cpi->rtcd.encodemb.submbuv = vp8_subtract_mbuv_mmx; cpi->rtcd.encodemb.submbuv = vp8_subtract_mbuv_mmx;
/*cpi->rtcd.quantize.fastquantb = vp8_fast_quantize_b_mmx;*/ /*cpi->rtcd.quantize.fastquantb = fast_quantize_b_mmx;*/
} }
#endif #endif
@ -311,16 +311,16 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
cpi->rtcd.fdct.walsh_short4x4 = vp8_short_walsh4x4_sse2 ; cpi->rtcd.fdct.walsh_short4x4 = vp8_short_walsh4x4_sse2 ;
cpi->rtcd.encodemb.berr = vp8_block_error_xmm; cpi->rtcd.encodemb.berr = vp8_block_error_xmm;
cpi->rtcd.encodemb.mberr = vp8_mbblock_error_xmm; cpi->rtcd.encodemb.mberr = mbblock_error_xmm;
cpi->rtcd.encodemb.mbuverr = vp8_mbuverror_xmm; cpi->rtcd.encodemb.mbuverr = mbuverror_xmm;
cpi->rtcd.encodemb.subb = vp8_subtract_b_sse2; cpi->rtcd.encodemb.subb = subtract_b_sse2;
cpi->rtcd.encodemb.submby = vp8_subtract_mby_sse2; cpi->rtcd.encodemb.submby = vp8_subtract_mby_sse2;
cpi->rtcd.encodemb.submbuv = vp8_subtract_mbuv_sse2; cpi->rtcd.encodemb.submbuv = vp8_subtract_mbuv_sse2;
#if ARCH_X86 #if ARCH_X86
cpi->rtcd.quantize.quantb = vp8_regular_quantize_b_sse2; cpi->rtcd.quantize.quantb = regular_quantize_b_sse2;
#endif #endif
cpi->rtcd.quantize.fastquantb = vp8_fast_quantize_b_sse2; cpi->rtcd.quantize.fastquantb = fast_quantize_b_sse2;
#if !(CONFIG_REALTIME_ONLY) #if !(CONFIG_REALTIME_ONLY)
cpi->rtcd.temporal.apply = vp8_temporal_filter_apply_sse2; cpi->rtcd.temporal.apply = vp8_temporal_filter_apply_sse2;
@ -358,7 +358,7 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
cpi->rtcd.variance.subpixvar16x8 = vp8_sub_pixel_variance16x8_ssse3; cpi->rtcd.variance.subpixvar16x8 = vp8_sub_pixel_variance16x8_ssse3;
cpi->rtcd.variance.subpixvar16x16 = vp8_sub_pixel_variance16x16_ssse3; cpi->rtcd.variance.subpixvar16x16 = vp8_sub_pixel_variance16x16_ssse3;
cpi->rtcd.quantize.fastquantb = vp8_fast_quantize_b_ssse3; cpi->rtcd.quantize.fastquantb = fast_quantize_b_ssse3;
#if CONFIG_PSNR #if CONFIG_PSNR
#if ARCH_X86_64 #if ARCH_X86_64

View File

@ -69,7 +69,7 @@ VP8_COMMON_SRCS-yes += common/reconintra.c
VP8_COMMON_SRCS-yes += common/reconintra4x4.c VP8_COMMON_SRCS-yes += common/reconintra4x4.c
VP8_COMMON_SRCS-yes += common/setupintrarecon.c VP8_COMMON_SRCS-yes += common/setupintrarecon.c
VP8_COMMON_SRCS-yes += common/swapyv12buffer.c VP8_COMMON_SRCS-yes += common/swapyv12buffer.c
VP8_COMMON_SRCS-yes += common/textblit.c VP8_COMMON_SRCS-$(CONFIG_POSTPROC_VISUALIZER) += common/textblit.c
VP8_COMMON_SRCS-yes += common/treecoder.c VP8_COMMON_SRCS-yes += common/treecoder.c
VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/idct_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/idct_x86.h

View File

@ -36,6 +36,8 @@ vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx,
res = VPX_CODEC_INCAPABLE; res = VPX_CODEC_INCAPABLE;
else if ((flags & VPX_CODEC_USE_POSTPROC) && !(iface->caps & VPX_CODEC_CAP_POSTPROC)) else if ((flags & VPX_CODEC_USE_POSTPROC) && !(iface->caps & VPX_CODEC_CAP_POSTPROC))
res = VPX_CODEC_INCAPABLE; res = VPX_CODEC_INCAPABLE;
else if (!(iface->caps & VPX_CODEC_CAP_DECODER))
res = VPX_CODEC_INCAPABLE;
else else
{ {
memset(ctx, 0, sizeof(*ctx)); memset(ctx, 0, sizeof(*ctx));

View File

@ -88,24 +88,3 @@ vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width, int height, int
return 0; return 0;
} }
/****************************************************************************
*
****************************************************************************/
int
vp8_yv12_black_frame_buffer(YV12_BUFFER_CONFIG *ybf)
{
if (ybf)
{
if (ybf->buffer_alloc)
{
duck_memset(ybf->y_buffer, 0x0, ybf->y_stride * ybf->y_height);
duck_memset(ybf->u_buffer, 0x80, ybf->uv_stride * ybf->uv_height);
duck_memset(ybf->v_buffer, 0x80, ybf->uv_stride * ybf->uv_height);
}
return 0;
}
return -1;
}

View File

@ -145,8 +145,8 @@ vp8_yv12_extend_frame_borders(YV12_BUFFER_CONFIG *ybf)
} }
void static void
vp8_yv12_extend_frame_borders_yonly(YV12_BUFFER_CONFIG *ybf) extend_frame_borders_yonly(YV12_BUFFER_CONFIG *ybf)
{ {
int i; int i;
unsigned char *src_ptr1, *src_ptr2; unsigned char *src_ptr1, *src_ptr2;
@ -276,5 +276,5 @@ vp8_yv12_copy_frame_yonly(YV12_BUFFER_CONFIG *src_ybc, YV12_BUFFER_CONFIG *dst_y
dest += dst_ybc->y_stride; dest += dst_ybc->y_stride;
} }
vp8_yv12_extend_frame_borders_yonly(dst_ybc); extend_frame_borders_yonly(dst_ybc);
} }

View File

@ -63,7 +63,6 @@ extern "C"
int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width, int height, int border); int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width, int height, int border);
int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf); int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf);
int vp8_yv12_black_frame_buffer(YV12_BUFFER_CONFIG *ybf);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -928,8 +928,14 @@ static const arg_def_t resize_up_thresh = ARG_DEF(NULL, "resize-up", 1,
"Upscale threshold (buf %)"); "Upscale threshold (buf %)");
static const arg_def_t resize_down_thresh = ARG_DEF(NULL, "resize-down", 1, static const arg_def_t resize_down_thresh = ARG_DEF(NULL, "resize-down", 1,
"Downscale threshold (buf %)"); "Downscale threshold (buf %)");
static const arg_def_t end_usage = ARG_DEF(NULL, "end-usage", 1, static const struct arg_enum_list end_usage_enum[] = {
"VBR=0 | CBR=1 | CQ=2"); {"vbr", VPX_VBR},
{"cbr", VPX_CBR},
{"cq", VPX_CQ},
{NULL, 0}
};
static const arg_def_t end_usage = ARG_DEF_ENUM(NULL, "end-usage", 1,
"Rate control mode", end_usage_enum);
static const arg_def_t target_bitrate = ARG_DEF(NULL, "target-bitrate", 1, static const arg_def_t target_bitrate = ARG_DEF(NULL, "target-bitrate", 1,
"Bitrate (kbps)"); "Bitrate (kbps)");
static const arg_def_t min_quantizer = ARG_DEF(NULL, "min-q", 1, static const arg_def_t min_quantizer = ARG_DEF(NULL, "min-q", 1,
@ -1260,7 +1266,7 @@ int main(int argc, const char **argv_)
else if (arg_match(&arg, &resize_down_thresh, argi)) else if (arg_match(&arg, &resize_down_thresh, argi))
cfg.rc_resize_down_thresh = arg_parse_uint(&arg); cfg.rc_resize_down_thresh = arg_parse_uint(&arg);
else if (arg_match(&arg, &end_usage, argi)) else if (arg_match(&arg, &end_usage, argi))
cfg.rc_end_usage = arg_parse_uint(&arg); cfg.rc_end_usage = arg_parse_enum_or_int(&arg);
else if (arg_match(&arg, &target_bitrate, argi)) else if (arg_match(&arg, &target_bitrate, argi))
cfg.rc_target_bitrate = arg_parse_uint(&arg); cfg.rc_target_bitrate = arg_parse_uint(&arg);
else if (arg_match(&arg, &min_quantizer, argi)) else if (arg_match(&arg, &min_quantizer, argi))