diff options
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_encoder.c | 66 |
1 files changed, 6 insertions, 60 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 8464882ea..88b67cf5e 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -1445,40 +1445,6 @@ static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src, vp9_extend_frame_borders(dst); } -#define WRITE_RECON_BUFFER 0 -#if WRITE_RECON_BUFFER -void write_cx_frame_to_file(YV12_BUFFER_CONFIG *frame, int this_frame) { - FILE *yframe; - int i; - char filename[255]; - - snprintf(filename, sizeof(filename), "cx\\y%04d.raw", this_frame); - yframe = fopen(filename, "wb"); - - for (i = 0; i < frame->y_height; i++) - fwrite(frame->y_buffer + i * frame->y_stride, - frame->y_width, 1, yframe); - - fclose(yframe); - snprintf(filename, sizeof(filename), "cx\\u%04d.raw", this_frame); - yframe = fopen(filename, "wb"); - - for (i = 0; i < frame->uv_height; i++) - fwrite(frame->u_buffer + i * frame->uv_stride, - frame->uv_width, 1, yframe); - - fclose(yframe); - snprintf(filename, sizeof(filename), "cx\\v%04d.raw", this_frame); - yframe = fopen(filename, "wb"); - - for (i = 0; i < frame->uv_height; i++) - fwrite(frame->v_buffer + i * frame->uv_stride, - frame->uv_width, 1, yframe); - - fclose(yframe); -} -#endif - // Function to test for conditions that indicate we should loop // back and recode a frame. static int recode_loop_test(const VP9_COMP *cpi, @@ -2013,18 +1979,16 @@ YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm, } } -static void configure_skippable_frame(VP9_COMP *cpi) { +static int is_skippable_frame(const VP9_COMP *cpi) { // If the current frame does not have non-zero motion vector detected in the // first pass, and so do its previous and forward frames, then this frame // can be skipped for partition check, and the partition size is assigned // according to the variance + const SVC *const svc = &cpi->svc; + const TWO_PASS *const twopass = is_spatial_svc(cpi) ? + &svc->layer_context[svc->spatial_layer_id].twopass : &cpi->twopass; - SVC *const svc = &cpi->svc; - TWO_PASS *const twopass = is_spatial_svc(cpi) ? - &svc->layer_context[svc->spatial_layer_id].twopass - : &cpi->twopass; - - cpi->skippable_frame = (!frame_is_intra_only(&cpi->common) && + return (!frame_is_intra_only(&cpi->common) && twopass->stats_in - 2 > twopass->stats_in_start && twopass->stats_in < twopass->stats_in_end && (twopass->stats_in - 1)->pcnt_inter - (twopass->stats_in - 1)->pcnt_motion @@ -2198,7 +2162,7 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, // second pass according to the first pass stats if (oxcf->pass == 2 && (!cpi->use_svc || is_spatial_svc(cpi))) { - configure_skippable_frame(cpi); + cpi->skippable_frame = is_skippable_frame(cpi); } // For 1 pass CBR, check if we are dropping this frame. @@ -2280,27 +2244,9 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi, cm->frame_to_show = get_frame_new_buffer(cm); -#if WRITE_RECON_BUFFER - if (cm->show_frame) - write_cx_frame_to_file(cm->frame_to_show, - cm->current_video_frame); - else - write_cx_frame_to_file(cm->frame_to_show, - cm->current_video_frame + 1000); -#endif - // Pick the loop filter level for the frame. loopfilter_frame(cpi, cm); -#if WRITE_RECON_BUFFER - if (cm->show_frame) - write_cx_frame_to_file(cm->frame_to_show, - cm->current_video_frame + 2000); - else - write_cx_frame_to_file(cm->frame_to_show, - cm->current_video_frame + 3000); -#endif - // build the bitstream cpi->dummy_packing = 0; vp9_pack_bitstream(cpi, dest, size); |