Merge "Moving first pass related functions to vp9_firstpasss.c."
This commit is contained in:
commit
ebd4e47aa6
@ -1439,21 +1439,6 @@ static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src,
|
|||||||
vp8_yv12_extend_frame_borders_c(dst);
|
vp8_yv12_extend_frame_borders_c(dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_fp_qindex() {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < QINDEX_RANGE; i++) {
|
|
||||||
if (vp9_convert_qindex_to_q(i) >= 30.0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == QINDEX_RANGE)
|
|
||||||
i--;
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define WRITE_RECON_BUFFER 0
|
#define WRITE_RECON_BUFFER 0
|
||||||
#if WRITE_RECON_BUFFER
|
#if WRITE_RECON_BUFFER
|
||||||
void write_cx_frame_to_file(YV12_BUFFER_CONFIG *frame, int this_frame) {
|
void write_cx_frame_to_file(YV12_BUFFER_CONFIG *frame, int this_frame) {
|
||||||
@ -2308,17 +2293,6 @@ static void Pass0Encode(VP9_COMP *cpi, size_t *size, uint8_t *dest,
|
|||||||
encode_frame_to_data_rate(cpi, size, dest, frame_flags);
|
encode_frame_to_data_rate(cpi, size, dest, frame_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Pass1Encode(VP9_COMP *cpi, size_t *size, uint8_t *dest,
|
|
||||||
unsigned int *frame_flags) {
|
|
||||||
(void) size;
|
|
||||||
(void) dest;
|
|
||||||
(void) frame_flags;
|
|
||||||
|
|
||||||
vp9_rc_get_first_pass_params(cpi);
|
|
||||||
vp9_set_quantizer(&cpi->common, find_fp_qindex());
|
|
||||||
vp9_first_pass(cpi);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Pass2Encode(VP9_COMP *cpi, size_t *size,
|
static void Pass2Encode(VP9_COMP *cpi, size_t *size,
|
||||||
uint8_t *dest, unsigned int *frame_flags) {
|
uint8_t *dest, unsigned int *frame_flags) {
|
||||||
cpi->allow_encode_breakout = ENCODE_BREAKOUT_ENABLED;
|
cpi->allow_encode_breakout = ENCODE_BREAKOUT_ENABLED;
|
||||||
@ -2658,7 +2632,7 @@ int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
|
|||||||
|
|
||||||
if (cpi->pass == 1 &&
|
if (cpi->pass == 1 &&
|
||||||
(!cpi->use_svc || cpi->svc.number_temporal_layers == 1)) {
|
(!cpi->use_svc || cpi->svc.number_temporal_layers == 1)) {
|
||||||
Pass1Encode(cpi, size, dest, frame_flags);
|
vp9_first_pass(cpi);
|
||||||
} else if (cpi->pass == 2 &&
|
} else if (cpi->pass == 2 &&
|
||||||
(!cpi->use_svc || cpi->svc.number_temporal_layers == 1)) {
|
(!cpi->use_svc || cpi->svc.number_temporal_layers == 1)) {
|
||||||
Pass2Encode(cpi, size, dest, frame_flags);
|
Pass2Encode(cpi, size, dest, frame_flags);
|
||||||
|
@ -398,6 +398,32 @@ static BLOCK_SIZE get_bsize(const VP9_COMMON *cm, int mb_row, int mb_col) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int find_fp_qindex() {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < QINDEX_RANGE; ++i)
|
||||||
|
if (vp9_convert_qindex_to_q(i) >= 30.0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i == QINDEX_RANGE)
|
||||||
|
i--;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_first_pass_params(VP9_COMP *cpi) {
|
||||||
|
VP9_COMMON *const cm = &cpi->common;
|
||||||
|
if (!cpi->refresh_alt_ref_frame &&
|
||||||
|
(cm->current_video_frame == 0 ||
|
||||||
|
(cpi->frame_flags & FRAMEFLAGS_KEY))) {
|
||||||
|
cm->frame_type = KEY_FRAME;
|
||||||
|
} else {
|
||||||
|
cm->frame_type = INTER_FRAME;
|
||||||
|
}
|
||||||
|
// Do not use periodic key frames.
|
||||||
|
cpi->rc.frames_to_key = INT_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
void vp9_first_pass(VP9_COMP *cpi) {
|
void vp9_first_pass(VP9_COMP *cpi) {
|
||||||
int mb_row, mb_col;
|
int mb_row, mb_col;
|
||||||
MACROBLOCK *const x = &cpi->mb;
|
MACROBLOCK *const x = &cpi->mb;
|
||||||
@ -438,6 +464,9 @@ void vp9_first_pass(VP9_COMP *cpi) {
|
|||||||
|
|
||||||
vp9_clear_system_state();
|
vp9_clear_system_state();
|
||||||
|
|
||||||
|
set_first_pass_params(cpi);
|
||||||
|
vp9_set_quantizer(cm, find_fp_qindex());
|
||||||
|
|
||||||
if (cpi->use_svc && cpi->svc.number_temporal_layers == 1) {
|
if (cpi->use_svc && cpi->svc.number_temporal_layers == 1) {
|
||||||
MV_REFERENCE_FRAME ref_frame = LAST_FRAME;
|
MV_REFERENCE_FRAME ref_frame = LAST_FRAME;
|
||||||
const YV12_BUFFER_CONFIG *scaled_ref_buf = NULL;
|
const YV12_BUFFER_CONFIG *scaled_ref_buf = NULL;
|
||||||
@ -2051,19 +2080,6 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
|
|||||||
twopass->modified_error_left -= kf_group_err;
|
twopass->modified_error_left -= kf_group_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp9_rc_get_first_pass_params(VP9_COMP *cpi) {
|
|
||||||
VP9_COMMON *const cm = &cpi->common;
|
|
||||||
if (!cpi->refresh_alt_ref_frame &&
|
|
||||||
(cm->current_video_frame == 0 ||
|
|
||||||
(cpi->frame_flags & FRAMEFLAGS_KEY))) {
|
|
||||||
cm->frame_type = KEY_FRAME;
|
|
||||||
} else {
|
|
||||||
cm->frame_type = INTER_FRAME;
|
|
||||||
}
|
|
||||||
// Do not use periodic key frames.
|
|
||||||
cpi->rc.frames_to_key = INT_MAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For VBR...adjustment to the frame target based on error from previous frames
|
// For VBR...adjustment to the frame target based on error from previous frames
|
||||||
void vbr_rate_correction(int * this_frame_target,
|
void vbr_rate_correction(int * this_frame_target,
|
||||||
const int64_t vbr_bits_off_target) {
|
const int64_t vbr_bits_off_target) {
|
||||||
|
Loading…
Reference in New Issue
Block a user