OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 if (cm->log2_tile_cols < max_log2_tile_cols) | 883 if (cm->log2_tile_cols < max_log2_tile_cols) |
884 vp9_wb_write_bit(wb, 0); | 884 vp9_wb_write_bit(wb, 0); |
885 | 885 |
886 // rows | 886 // rows |
887 vp9_wb_write_bit(wb, cm->log2_tile_rows != 0); | 887 vp9_wb_write_bit(wb, cm->log2_tile_rows != 0); |
888 if (cm->log2_tile_rows != 0) | 888 if (cm->log2_tile_rows != 0) |
889 vp9_wb_write_bit(wb, cm->log2_tile_rows != 1); | 889 vp9_wb_write_bit(wb, cm->log2_tile_rows != 1); |
890 } | 890 } |
891 | 891 |
892 static int get_refresh_mask(VP9_COMP *cpi) { | 892 static int get_refresh_mask(VP9_COMP *cpi) { |
893 // Should the GF or ARF be updated using the transmitted frame or buffer | 893 if (!cpi->multi_arf_allowed && cpi->refresh_golden_frame && |
894 #if CONFIG_MULTIPLE_ARF | 894 cpi->rc.is_src_frame_alt_ref && !cpi->use_svc) { |
895 if (!cpi->multi_arf_enabled && cpi->refresh_golden_frame && | |
896 !cpi->refresh_alt_ref_frame) { | |
897 #else | |
898 if (cpi->refresh_golden_frame && !cpi->refresh_alt_ref_frame && | |
899 !cpi->use_svc) { | |
900 #endif | |
901 // Preserve the previously existing golden frame and update the frame in | 895 // Preserve the previously existing golden frame and update the frame in |
902 // the alt ref slot instead. This is highly specific to the use of | 896 // the alt ref slot instead. This is highly specific to the use of |
903 // alt-ref as a forward reference, and this needs to be generalized as | 897 // alt-ref as a forward reference, and this needs to be generalized as |
904 // other uses are implemented (like RTC/temporal scaling) | 898 // other uses are implemented (like RTC/temporal scaling) |
905 // | 899 // |
906 // gld_fb_idx and alt_fb_idx need to be swapped for future frames, but | 900 // gld_fb_idx and alt_fb_idx need to be swapped for future frames, but |
907 // that happens in vp9_encoder.c:update_reference_frames() so that it can | 901 // that happens in vp9_encoder.c:update_reference_frames() so that it can |
908 // be done outside of the recode loop. | 902 // be done outside of the recode loop. |
909 return (cpi->refresh_last_frame << cpi->lst_fb_idx) | | 903 return (cpi->refresh_last_frame << cpi->lst_fb_idx) | |
910 (cpi->refresh_golden_frame << cpi->alt_fb_idx); | 904 (cpi->refresh_golden_frame << cpi->alt_fb_idx); |
911 } else { | 905 } else { |
912 int arf_idx = cpi->alt_fb_idx; | 906 int arf_idx = cpi->alt_fb_idx; |
913 #if CONFIG_MULTIPLE_ARF | 907 if ((cpi->pass == 2) && cpi->multi_arf_allowed) { |
914 // Determine which ARF buffer to use to encode this ARF frame. | 908 const GF_GROUP *const gf_group = &cpi->twopass.gf_group; |
915 if (cpi->multi_arf_enabled) { | 909 arf_idx = gf_group->arf_update_idx[gf_group->index]; |
916 int sn = cpi->sequence_number; | |
917 arf_idx = (cpi->frame_coding_order[sn] < 0) ? | |
918 cpi->arf_buffer_idx[sn + 1] : | |
919 cpi->arf_buffer_idx[sn]; | |
920 } | 910 } |
921 #endif | |
922 return (cpi->refresh_last_frame << cpi->lst_fb_idx) | | 911 return (cpi->refresh_last_frame << cpi->lst_fb_idx) | |
923 (cpi->refresh_golden_frame << cpi->gld_fb_idx) | | 912 (cpi->refresh_golden_frame << cpi->gld_fb_idx) | |
924 (cpi->refresh_alt_ref_frame << arf_idx); | 913 (cpi->refresh_alt_ref_frame << arf_idx); |
925 } | 914 } |
926 } | 915 } |
927 | 916 |
928 static size_t encode_tiles(VP9_COMP *cpi, uint8_t *data_ptr) { | 917 static size_t encode_tiles(VP9_COMP *cpi, uint8_t *data_ptr) { |
929 VP9_COMMON *const cm = &cpi->common; | 918 VP9_COMMON *const cm = &cpi->common; |
930 vp9_writer residual_bc; | 919 vp9_writer residual_bc; |
931 | 920 |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1215 first_part_size = write_compressed_header(cpi, data); | 1204 first_part_size = write_compressed_header(cpi, data); |
1216 data += first_part_size; | 1205 data += first_part_size; |
1217 // TODO(jbb): Figure out what to do if first_part_size > 16 bits. | 1206 // TODO(jbb): Figure out what to do if first_part_size > 16 bits. |
1218 vp9_wb_write_literal(&saved_wb, (int)first_part_size, 16); | 1207 vp9_wb_write_literal(&saved_wb, (int)first_part_size, 16); |
1219 | 1208 |
1220 data += encode_tiles(cpi, data); | 1209 data += encode_tiles(cpi, data); |
1221 | 1210 |
1222 *size = data - dest; | 1211 *size = data - dest; |
1223 } | 1212 } |
1224 | 1213 |
OLD | NEW |