| Index: source/libvpx/vp9/encoder/vp9_bitstream.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_bitstream.c (revision 291857)
|
| +++ source/libvpx/vp9/encoder/vp9_bitstream.c (working copy)
|
| @@ -294,6 +294,7 @@
|
| vp9_write_token(w, vp9_switchable_interp_tree,
|
| cm->fc.switchable_interp_prob[ctx],
|
| &switchable_interp_encodings[mbmi->interp_filter]);
|
| + ++cpi->interp_filter_selected[0][mbmi->interp_filter];
|
| } else {
|
| assert(mbmi->interp_filter == cm->interp_filter);
|
| }
|
| @@ -670,8 +671,6 @@
|
| vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES];
|
| vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES];
|
|
|
| - vp9_clear_system_state();
|
| -
|
| for (tx_size = TX_4X4; tx_size <= TX_32X32; ++tx_size)
|
| build_tree_distribution(cpi, tx_size, frame_branch_ct[tx_size],
|
| frame_coef_probs[tx_size]);
|
| @@ -998,8 +997,10 @@
|
|
|
| // Set "found" to 0 for temporal svc and for spatial svc key frame
|
| if (cpi->use_svc &&
|
| - (cpi->svc.number_spatial_layers == 1 ||
|
| - cpi->svc.layer_context[cpi->svc.spatial_layer_id].is_key_frame)) {
|
| + ((cpi->svc.number_temporal_layers > 1 &&
|
| + cpi->oxcf.rc_mode == VPX_CBR) ||
|
| + (cpi->svc.number_spatial_layers > 1 &&
|
| + cpi->svc.layer_context[cpi->svc.spatial_layer_id].is_key_frame))) {
|
| found = 0;
|
| }
|
| vp9_wb_write_bit(wb, found);
|
| @@ -1045,8 +1046,8 @@
|
| static void write_bitdepth_colorspace_sampling(
|
| VP9_COMMON *const cm, struct vp9_write_bit_buffer *wb) {
|
| if (cm->profile >= PROFILE_2) {
|
| - assert(cm->bit_depth > BITS_8);
|
| - vp9_wb_write_bit(wb, cm->bit_depth - BITS_10);
|
| + assert(cm->bit_depth > VPX_BITS_8);
|
| + vp9_wb_write_bit(wb, cm->bit_depth == VPX_BITS_10 ? 0 : 1);
|
| }
|
| vp9_wb_write_literal(wb, cm->color_space, 3);
|
| if (cm->color_space != SRGB) {
|
| @@ -1083,7 +1084,16 @@
|
| write_bitdepth_colorspace_sampling(cm, wb);
|
| write_frame_size(cm, wb);
|
| } else {
|
| - if (!cm->show_frame)
|
| + // In spatial svc if it's not error_resilient_mode then we need to code all
|
| + // visible frames as invisible. But we need to keep the show_frame flag so
|
| + // that the publisher could know whether it is supposed to be visible.
|
| + // So we will code the show_frame flag as it is. Then code the intra_only
|
| + // bit here. This will make the bitstream incompatible. In the player we
|
| + // will change to show_frame flag to 0, then add an one byte frame with
|
| + // show_existing_frame flag which tells the decoder which frame we want to
|
| + // show.
|
| + if (!cm->show_frame ||
|
| + (is_two_pass_svc(cpi) && cm->error_resilient_mode == 0))
|
| vp9_wb_write_bit(wb, cm->intra_only);
|
|
|
| if (!cm->error_resilient_mode)
|
|
|