Merge remote branch 'internal/upstream' into HEAD
This commit is contained in:
commit
93536be4b9
@ -94,6 +94,8 @@ void vp8_cmachine_specific_config(VP8_COMP *cpi)
|
|||||||
|
|
||||||
cpi->rtcd.search.full_search = vp8_full_search_sad;
|
cpi->rtcd.search.full_search = vp8_full_search_sad;
|
||||||
cpi->rtcd.search.diamond_search = vp8_diamond_search_sad;
|
cpi->rtcd.search.diamond_search = vp8_diamond_search_sad;
|
||||||
|
|
||||||
|
cpi->rtcd.temporal.apply = vp8_temporal_filter_apply_c;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Pure C:
|
// Pure C:
|
||||||
|
@ -73,6 +73,7 @@ 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);
|
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);
|
||||||
|
|
||||||
static void set_default_lf_deltas(VP8_COMP *cpi);
|
static void set_default_lf_deltas(VP8_COMP *cpi);
|
||||||
|
|
||||||
@ -4969,7 +4970,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
|
|||||||
{
|
{
|
||||||
int thiserr;
|
int thiserr;
|
||||||
cpi->oxcf.arnr_strength = i;
|
cpi->oxcf.arnr_strength = i;
|
||||||
vp8cx_temp_filter_c(cpi);
|
vp8_temporal_filter_prepare_c(cpi);
|
||||||
|
|
||||||
thiserr = vp8_calc_low_ss_err(&cpi->alt_ref_buffer.source_buffer,
|
thiserr = vp8_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));
|
||||||
@ -4984,7 +4985,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
|
|||||||
if (besti != -1)
|
if (besti != -1)
|
||||||
{
|
{
|
||||||
cpi->oxcf.arnr_strength = besti;
|
cpi->oxcf.arnr_strength = besti;
|
||||||
vp8cx_temp_filter_c(cpi);
|
vp8_temporal_filter_prepare_c(cpi);
|
||||||
s = &cpi->alt_ref_buffer;
|
s = &cpi->alt_ref_buffer;
|
||||||
|
|
||||||
// FWG not sure if I need to copy this data for the Alt Ref frame
|
// FWG not sure if I need to copy this data for the Alt Ref frame
|
||||||
@ -4996,7 +4997,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
|
|||||||
s = &cpi->src_buffer[cpi->last_alt_ref_sei];
|
s = &cpi->src_buffer[cpi->last_alt_ref_sei];
|
||||||
|
|
||||||
#else
|
#else
|
||||||
vp8cx_temp_filter_c(cpi);
|
vp8_temporal_filter_prepare_c(cpi);
|
||||||
s = &cpi->alt_ref_buffer;
|
s = &cpi->alt_ref_buffer;
|
||||||
|
|
||||||
// FWG not sure if I need to copy this data for the Alt Ref frame
|
// FWG not sure if I need to copy this data for the Alt Ref frame
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "vpx_ports/mem.h"
|
#include "vpx_ports/mem.h"
|
||||||
#include "vpx/internal/vpx_codec_internal.h"
|
#include "vpx/internal/vpx_codec_internal.h"
|
||||||
#include "mcomp.h"
|
#include "mcomp.h"
|
||||||
|
#include "temporal_filter.h"
|
||||||
|
|
||||||
//#define SPEEDSTATS 1
|
//#define SPEEDSTATS 1
|
||||||
#define MIN_GF_INTERVAL 4
|
#define MIN_GF_INTERVAL 4
|
||||||
@ -232,6 +233,7 @@ typedef struct VP8_ENCODER_RTCD
|
|||||||
vp8_encodemb_rtcd_vtable_t encodemb;
|
vp8_encodemb_rtcd_vtable_t encodemb;
|
||||||
vp8_quantize_rtcd_vtable_t quantize;
|
vp8_quantize_rtcd_vtable_t quantize;
|
||||||
vp8_search_rtcd_vtable_t search;
|
vp8_search_rtcd_vtable_t search;
|
||||||
|
vp8_temporal_rtcd_vtable_t temporal;
|
||||||
} VP8_ENCODER_RTCD;
|
} VP8_ENCODER_RTCD;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -36,11 +36,18 @@
|
|||||||
|
|
||||||
#define ALT_REF_MC_ENABLED 1 // dis/enable MC in AltRef filtering
|
#define ALT_REF_MC_ENABLED 1 // dis/enable MC in AltRef filtering
|
||||||
#define ALT_REF_SUBPEL_ENABLED 1 // dis/enable subpel in MC AltRef filtering
|
#define ALT_REF_SUBPEL_ENABLED 1 // dis/enable subpel in MC AltRef filtering
|
||||||
|
#define USE_FILTER_LUT 0 // use lookup table to improve filter
|
||||||
|
|
||||||
#define USE_FILTER_LUT 1
|
|
||||||
#if VP8_TEMPORAL_ALT_REF
|
#if VP8_TEMPORAL_ALT_REF
|
||||||
|
|
||||||
#if USE_FILTER_LUT
|
#if USE_FILTER_LUT
|
||||||
|
// for (strength = 0; strength <= 6; strength++) {
|
||||||
|
// for (delta = 0; delta <= 18; delta++) {
|
||||||
|
// float coeff = (3.0 * delta * delta) / pow(2, strength);
|
||||||
|
// printf("%3d", (int)roundf(coeff > 16 ? 0 : 16-coeff));
|
||||||
|
// }
|
||||||
|
// printf("\n");
|
||||||
|
// }
|
||||||
static int modifier_lut[7][19] =
|
static int modifier_lut[7][19] =
|
||||||
{
|
{
|
||||||
// Strength=0
|
// Strength=0
|
||||||
@ -59,7 +66,7 @@ static int modifier_lut[7][19] =
|
|||||||
{16, 16, 16, 16, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, 5, 4, 2, 1}
|
{16, 16, 16, 16, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, 5, 4, 2, 1}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
static void build_predictors_mb
|
static void vp8_temporal_filter_predictors_mb_c
|
||||||
(
|
(
|
||||||
MACROBLOCKD *x,
|
MACROBLOCKD *x,
|
||||||
unsigned char *y_mb_ptr,
|
unsigned char *y_mb_ptr,
|
||||||
@ -111,7 +118,7 @@ static void build_predictors_mb
|
|||||||
RECON_INVOKE(&x->rtcd->recon, copy8x8)(vptr, stride, &pred[320], 8);
|
RECON_INVOKE(&x->rtcd->recon, copy8x8)(vptr, stride, &pred[320], 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void apply_temporal_filter
|
void vp8_temporal_filter_apply_c
|
||||||
(
|
(
|
||||||
unsigned char *frame1,
|
unsigned char *frame1,
|
||||||
unsigned int stride,
|
unsigned int stride,
|
||||||
@ -140,16 +147,14 @@ static void apply_temporal_filter
|
|||||||
int pixel_value = *frame2++;
|
int pixel_value = *frame2++;
|
||||||
|
|
||||||
#if USE_FILTER_LUT
|
#if USE_FILTER_LUT
|
||||||
// LUT implementation --
|
|
||||||
// improves precision of filter
|
|
||||||
modifier = abs(src_byte-pixel_value);
|
modifier = abs(src_byte-pixel_value);
|
||||||
modifier = modifier>18 ? 0 : lut[modifier];
|
modifier = modifier>18 ? 0 : lut[modifier];
|
||||||
#else
|
#else
|
||||||
modifier = src_byte;
|
modifier = src_byte - pixel_value;
|
||||||
modifier -= pixel_value;
|
|
||||||
modifier *= modifier;
|
modifier *= modifier;
|
||||||
modifier >>= strength;
|
|
||||||
modifier *= 3;
|
modifier *= 3;
|
||||||
|
modifier += 1 << (strength - 1);
|
||||||
|
modifier >>= strength;
|
||||||
|
|
||||||
if (modifier > 16)
|
if (modifier > 16)
|
||||||
modifier = 16;
|
modifier = 16;
|
||||||
@ -171,7 +176,7 @@ static void apply_temporal_filter
|
|||||||
#if ALT_REF_MC_ENABLED
|
#if ALT_REF_MC_ENABLED
|
||||||
static int dummy_cost[2*mv_max+1];
|
static int dummy_cost[2*mv_max+1];
|
||||||
|
|
||||||
static int find_matching_mb
|
static int vp8_temporal_filter_find_matching_mb_c
|
||||||
(
|
(
|
||||||
VP8_COMP *cpi,
|
VP8_COMP *cpi,
|
||||||
YV12_BUFFER_CONFIG *arf_frame,
|
YV12_BUFFER_CONFIG *arf_frame,
|
||||||
@ -308,7 +313,7 @@ static int find_matching_mb
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void vp8cx_temp_blur1_c
|
static void vp8_temporal_filter_iterate_c
|
||||||
(
|
(
|
||||||
VP8_COMP *cpi,
|
VP8_COMP *cpi,
|
||||||
int frame_count,
|
int frame_count,
|
||||||
@ -412,7 +417,8 @@ static void vp8cx_temp_blur1_c
|
|||||||
#define THRESH_HIGH 20000
|
#define THRESH_HIGH 20000
|
||||||
|
|
||||||
// Correlation has been lost try MC
|
// Correlation has been lost try MC
|
||||||
err = find_matching_mb ( cpi,
|
err = vp8_temporal_filter_find_matching_mb_c
|
||||||
|
(cpi,
|
||||||
cpi->frames[alt_ref_index],
|
cpi->frames[alt_ref_index],
|
||||||
cpi->frames[frame],
|
cpi->frames[frame],
|
||||||
mb_y_offset,
|
mb_y_offset,
|
||||||
@ -429,8 +435,8 @@ static void vp8cx_temp_blur1_c
|
|||||||
if (filter_weight[frame] != 0)
|
if (filter_weight[frame] != 0)
|
||||||
{
|
{
|
||||||
// Construct the predictors
|
// Construct the predictors
|
||||||
build_predictors_mb (
|
vp8_temporal_filter_predictors_mb_c
|
||||||
mbd,
|
(mbd,
|
||||||
cpi->frames[frame]->y_buffer + mb_y_offset,
|
cpi->frames[frame]->y_buffer + mb_y_offset,
|
||||||
cpi->frames[frame]->u_buffer + mb_uv_offset,
|
cpi->frames[frame]->u_buffer + mb_uv_offset,
|
||||||
cpi->frames[frame]->v_buffer + mb_uv_offset,
|
cpi->frames[frame]->v_buffer + mb_uv_offset,
|
||||||
@ -440,7 +446,8 @@ static void vp8cx_temp_blur1_c
|
|||||||
predictor);
|
predictor);
|
||||||
|
|
||||||
// Apply the filter (YUV)
|
// Apply the filter (YUV)
|
||||||
apply_temporal_filter ( f->y_buffer + mb_y_offset,
|
TEMPORAL_INVOKE(&cpi->rtcd.temporal, apply)
|
||||||
|
(f->y_buffer + mb_y_offset,
|
||||||
f->y_stride,
|
f->y_stride,
|
||||||
predictor,
|
predictor,
|
||||||
16,
|
16,
|
||||||
@ -449,7 +456,8 @@ static void vp8cx_temp_blur1_c
|
|||||||
accumulator,
|
accumulator,
|
||||||
count);
|
count);
|
||||||
|
|
||||||
apply_temporal_filter ( f->u_buffer + mb_uv_offset,
|
TEMPORAL_INVOKE(&cpi->rtcd.temporal, apply)
|
||||||
|
(f->u_buffer + mb_uv_offset,
|
||||||
f->uv_stride,
|
f->uv_stride,
|
||||||
predictor + 256,
|
predictor + 256,
|
||||||
8,
|
8,
|
||||||
@ -458,7 +466,8 @@ static void vp8cx_temp_blur1_c
|
|||||||
accumulator + 256,
|
accumulator + 256,
|
||||||
count + 256);
|
count + 256);
|
||||||
|
|
||||||
apply_temporal_filter ( f->v_buffer + mb_uv_offset,
|
TEMPORAL_INVOKE(&cpi->rtcd.temporal, apply)
|
||||||
|
(f->v_buffer + mb_uv_offset,
|
||||||
f->uv_stride,
|
f->uv_stride,
|
||||||
predictor + 320,
|
predictor + 320,
|
||||||
8,
|
8,
|
||||||
@ -534,7 +543,7 @@ static void vp8cx_temp_blur1_c
|
|||||||
mbd->pre.v_buffer = v_buffer;
|
mbd->pre.v_buffer = v_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp8cx_temp_filter_c
|
void vp8_temporal_filter_prepare_c
|
||||||
(
|
(
|
||||||
VP8_COMP *cpi
|
VP8_COMP *cpi
|
||||||
)
|
)
|
||||||
@ -642,7 +651,7 @@ void vp8cx_temp_filter_c
|
|||||||
= &cpi->src_buffer[which_buffer].source_buffer;
|
= &cpi->src_buffer[which_buffer].source_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
vp8cx_temp_blur1_c (
|
vp8_temporal_filter_iterate_c (
|
||||||
cpi,
|
cpi,
|
||||||
frames_to_blur,
|
frames_to_blur,
|
||||||
frames_to_blur_backward,
|
frames_to_blur_backward,
|
||||||
|
@ -12,8 +12,33 @@
|
|||||||
#ifndef __INC_VP8_TEMPORAL_FILTER_H
|
#ifndef __INC_VP8_TEMPORAL_FILTER_H
|
||||||
#define __INC_VP8_TEMPORAL_FILTER_H
|
#define __INC_VP8_TEMPORAL_FILTER_H
|
||||||
|
|
||||||
#include "onyx_int.h"
|
#define prototype_apply(sym)\
|
||||||
|
void (sym) \
|
||||||
|
( \
|
||||||
|
unsigned char *frame1, \
|
||||||
|
unsigned int stride, \
|
||||||
|
unsigned char *frame2, \
|
||||||
|
unsigned int block_size, \
|
||||||
|
int strength, \
|
||||||
|
int filter_weight, \
|
||||||
|
unsigned int *accumulator, \
|
||||||
|
unsigned int *count \
|
||||||
|
)
|
||||||
|
|
||||||
void vp8cx_temp_filter_c(VP8_COMP *cpi);
|
#ifndef vp8_temporal_filter_apply
|
||||||
|
#define vp8_temporal_filter_apply vp8_temporal_filter_apply_c
|
||||||
|
#endif
|
||||||
|
extern prototype_apply(vp8_temporal_filter_apply);
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
prototype_apply(*apply);
|
||||||
|
} vp8_temporal_rtcd_vtable_t;
|
||||||
|
|
||||||
|
#if CONFIG_RUNTIME_CPU_DETECT
|
||||||
|
#define TEMPORAL_INVOKE(ctx,fn) (ctx)->fn
|
||||||
|
#else
|
||||||
|
#define TEMPORAL_INVOKE(ctx,fn) vp8_temporal_filter_##fn
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // __INC_VP8_TEMPORAL_FILTER_H
|
#endif // __INC_VP8_TEMPORAL_FILTER_H
|
||||||
|
8
vpxenc.c
8
vpxenc.c
@ -190,11 +190,11 @@ int stats_open_mem(stats_io_t *stats, int pass)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void stats_close(stats_io_t *stats)
|
void stats_close(stats_io_t *stats, int last_pass)
|
||||||
{
|
{
|
||||||
if (stats->file)
|
if (stats->file)
|
||||||
{
|
{
|
||||||
if (stats->pass == 1)
|
if (stats->pass == last_pass)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
#elif USE_POSIX_MMAP
|
#elif USE_POSIX_MMAP
|
||||||
@ -209,7 +209,7 @@ void stats_close(stats_io_t *stats)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (stats->pass == 1)
|
if (stats->pass == last_pass)
|
||||||
free(stats->buf.buf);
|
free(stats->buf.buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1700,7 +1700,7 @@ int main(int argc, const char **argv_)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fclose(outfile);
|
fclose(outfile);
|
||||||
stats_close(&stats);
|
stats_close(&stats, arg_passes-1);
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
if (one_pass_only)
|
if (one_pass_only)
|
||||||
|
Loading…
Reference in New Issue
Block a user