| 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 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 vp9_read_frame_size(rb, &cm->display_width, &cm->display_height); | 620 vp9_read_frame_size(rb, &cm->display_width, &cm->display_height); |
| 621 } | 621 } |
| 622 | 622 |
| 623 static void resize_context_buffers(VP9_COMMON *cm, int width, int height) { | 623 static void resize_context_buffers(VP9_COMMON *cm, int width, int height) { |
| 624 #if CONFIG_SIZE_LIMIT | 624 #if CONFIG_SIZE_LIMIT |
| 625 if (width > DECODE_WIDTH_LIMIT || height > DECODE_HEIGHT_LIMIT) | 625 if (width > DECODE_WIDTH_LIMIT || height > DECODE_HEIGHT_LIMIT) |
| 626 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, | 626 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
| 627 "Width and height beyond allowed size."); | 627 "Width and height beyond allowed size."); |
| 628 #endif | 628 #endif |
| 629 if (cm->width != width || cm->height != height) { | 629 if (cm->width != width || cm->height != height) { |
| 630 // Change in frame size (assumption: color format does not change). | 630 const int new_rows = ALIGN_POWER_OF_TWO(height, |
| 631 if (cm->width == 0 || cm->height == 0 || | 631 MI_SIZE_LOG2) >> MI_SIZE_LOG2; |
| 632 width * height > cm->width * cm->height) { | 632 const int new_cols = ALIGN_POWER_OF_TWO(width, |
| 633 MI_SIZE_LOG2) >> MI_SIZE_LOG2; |
| 634 if (calc_mi_size(new_rows) * calc_mi_size(new_cols) > cm->mi_alloc_size) { |
| 633 if (vp9_alloc_context_buffers(cm, width, height)) | 635 if (vp9_alloc_context_buffers(cm, width, height)) |
| 634 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 636 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
| 635 "Failed to allocate frame buffers"); | 637 "Failed to allocate context buffers"); |
| 636 } else { | 638 } else { |
| 637 vp9_set_mb_mi(cm, width, height); | 639 vp9_set_mb_mi(cm, width, height); |
| 638 } | 640 } |
| 639 vp9_init_context_buffers(cm); | 641 vp9_init_context_buffers(cm); |
| 640 cm->width = width; | 642 cm->width = width; |
| 641 cm->height = height; | 643 cm->height = height; |
| 642 } | 644 } |
| 643 } | 645 } |
| 644 | 646 |
| 645 static void setup_frame_size(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) { | 647 static void setup_frame_size(VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) { |
| 646 int width, height; | 648 int width, height; |
| 647 vp9_read_frame_size(rb, &width, &height); | 649 vp9_read_frame_size(rb, &width, &height); |
| 648 resize_context_buffers(cm, width, height); | 650 resize_context_buffers(cm, width, height); |
| 649 setup_display_size(cm, rb); | 651 setup_display_size(cm, rb); |
| 650 | 652 |
| 651 if (vp9_realloc_frame_buffer( | 653 if (vp9_realloc_frame_buffer( |
| 652 get_frame_new_buffer(cm), cm->width, cm->height, | 654 get_frame_new_buffer(cm), cm->width, cm->height, |
| 653 cm->subsampling_x, cm->subsampling_y, VP9_DEC_BORDER_IN_PIXELS, | 655 cm->subsampling_x, cm->subsampling_y, VP9_DEC_BORDER_IN_PIXELS, |
| 654 &cm->frame_bufs[cm->new_fb_idx].raw_frame_buffer, cm->get_fb_cb, | 656 &cm->frame_bufs[cm->new_fb_idx].raw_frame_buffer, cm->get_fb_cb, |
| 655 cm->cb_priv)) { | 657 cm->cb_priv)) { |
| 656 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 658 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
| 657 "Failed to allocate frame buffer"); | 659 "Failed to allocate frame buffer"); |
| 658 } | 660 } |
| 659 } | 661 } |
| 660 | 662 |
| 661 static void setup_frame_size_with_refs(VP9_COMMON *cm, | 663 static void setup_frame_size_with_refs(VP9_COMMON *cm, |
| 662 struct vp9_read_bit_buffer *rb) { | 664 struct vp9_read_bit_buffer *rb) { |
| 663 int width, height; | 665 int width, height; |
| 664 int found = 0, i; | 666 int found = 0, i; |
| 667 int has_valid_ref_frame = 0; |
| 665 for (i = 0; i < REFS_PER_FRAME; ++i) { | 668 for (i = 0; i < REFS_PER_FRAME; ++i) { |
| 666 if (vp9_rb_read_bit(rb)) { | 669 if (vp9_rb_read_bit(rb)) { |
| 667 YV12_BUFFER_CONFIG *const buf = cm->frame_refs[i].buf; | 670 YV12_BUFFER_CONFIG *const buf = cm->frame_refs[i].buf; |
| 668 width = buf->y_crop_width; | 671 width = buf->y_crop_width; |
| 669 height = buf->y_crop_height; | 672 height = buf->y_crop_height; |
| 670 found = 1; | 673 found = 1; |
| 671 break; | 674 break; |
| 672 } | 675 } |
| 673 } | 676 } |
| 674 | 677 |
| 675 if (!found) | 678 if (!found) |
| 676 vp9_read_frame_size(rb, &width, &height); | 679 vp9_read_frame_size(rb, &width, &height); |
| 677 | 680 |
| 678 // Check that each of the frames that this frame references has valid | 681 if (width <=0 || height <= 0) |
| 679 // dimensions. | 682 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
| 683 "Invalid frame size"); |
| 684 |
| 685 // Check to make sure at least one of frames that this frame references |
| 686 // has valid dimensions. |
| 680 for (i = 0; i < REFS_PER_FRAME; ++i) { | 687 for (i = 0; i < REFS_PER_FRAME; ++i) { |
| 681 RefBuffer *const ref_frame = &cm->frame_refs[i]; | 688 RefBuffer *const ref_frame = &cm->frame_refs[i]; |
| 682 if (!valid_ref_frame_size(ref_frame->buf->y_width, ref_frame->buf->y_height, | 689 has_valid_ref_frame |= valid_ref_frame_size(ref_frame->buf->y_crop_width, |
| 683 width, height)) | 690 ref_frame->buf->y_crop_height, |
| 684 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, | 691 width, height); |
| 685 "Referenced frame has invalid size"); | |
| 686 } | 692 } |
| 693 if (!has_valid_ref_frame) |
| 694 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
| 695 "Referenced frame has invalid size"); |
| 687 | 696 |
| 688 resize_context_buffers(cm, width, height); | 697 resize_context_buffers(cm, width, height); |
| 689 setup_display_size(cm, rb); | 698 setup_display_size(cm, rb); |
| 690 | 699 |
| 691 if (vp9_realloc_frame_buffer( | 700 if (vp9_realloc_frame_buffer( |
| 692 get_frame_new_buffer(cm), cm->width, cm->height, | 701 get_frame_new_buffer(cm), cm->width, cm->height, |
| 693 cm->subsampling_x, cm->subsampling_y, VP9_DEC_BORDER_IN_PIXELS, | 702 cm->subsampling_x, cm->subsampling_y, VP9_DEC_BORDER_IN_PIXELS, |
| 694 &cm->frame_bufs[cm->new_fb_idx].raw_frame_buffer, cm->get_fb_cb, | 703 &cm->frame_bufs[cm->new_fb_idx].raw_frame_buffer, cm->get_fb_cb, |
| 695 cm->cb_priv)) { | 704 cm->cb_priv)) { |
| 696 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 705 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 } | 1086 } |
| 1078 | 1087 |
| 1079 BITSTREAM_PROFILE vp9_read_profile(struct vp9_read_bit_buffer *rb) { | 1088 BITSTREAM_PROFILE vp9_read_profile(struct vp9_read_bit_buffer *rb) { |
| 1080 int profile = vp9_rb_read_bit(rb); | 1089 int profile = vp9_rb_read_bit(rb); |
| 1081 profile |= vp9_rb_read_bit(rb) << 1; | 1090 profile |= vp9_rb_read_bit(rb) << 1; |
| 1082 if (profile > 2) | 1091 if (profile > 2) |
| 1083 profile += vp9_rb_read_bit(rb); | 1092 profile += vp9_rb_read_bit(rb); |
| 1084 return (BITSTREAM_PROFILE) profile; | 1093 return (BITSTREAM_PROFILE) profile; |
| 1085 } | 1094 } |
| 1086 | 1095 |
| 1096 static void read_bitdepth_colorspace_sampling( |
| 1097 VP9_COMMON *cm, struct vp9_read_bit_buffer *rb) { |
| 1098 if (cm->profile >= PROFILE_2) |
| 1099 cm->bit_depth = vp9_rb_read_bit(rb) ? BITS_12 : BITS_10; |
| 1100 cm->color_space = (COLOR_SPACE)vp9_rb_read_literal(rb, 3); |
| 1101 if (cm->color_space != SRGB) { |
| 1102 vp9_rb_read_bit(rb); // [16,235] (including xvycc) vs [0,255] range |
| 1103 if (cm->profile == PROFILE_1 || cm->profile == PROFILE_3) { |
| 1104 cm->subsampling_x = vp9_rb_read_bit(rb); |
| 1105 cm->subsampling_y = vp9_rb_read_bit(rb); |
| 1106 if (cm->subsampling_x == 1 && cm->subsampling_y == 1) |
| 1107 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1108 "4:2:0 color not supported in profile 1 or 3"); |
| 1109 if (vp9_rb_read_bit(rb)) |
| 1110 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1111 "Reserved bit set"); |
| 1112 } else { |
| 1113 cm->subsampling_y = cm->subsampling_x = 1; |
| 1114 } |
| 1115 } else { |
| 1116 if (cm->profile == PROFILE_1 || cm->profile == PROFILE_3) { |
| 1117 // Note if colorspace is SRGB then 4:4:4 chroma sampling is assumed. |
| 1118 // 4:2:2 or 4:4:0 chroma sampling is not allowed. |
| 1119 cm->subsampling_y = cm->subsampling_x = 0; |
| 1120 if (vp9_rb_read_bit(rb)) |
| 1121 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1122 "Reserved bit set"); |
| 1123 } else { |
| 1124 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1125 "4:4:4 color not supported in profile 0 or 2"); |
| 1126 } |
| 1127 } |
| 1128 } |
| 1129 |
| 1087 static size_t read_uncompressed_header(VP9Decoder *pbi, | 1130 static size_t read_uncompressed_header(VP9Decoder *pbi, |
| 1088 struct vp9_read_bit_buffer *rb) { | 1131 struct vp9_read_bit_buffer *rb) { |
| 1089 VP9_COMMON *const cm = &pbi->common; | 1132 VP9_COMMON *const cm = &pbi->common; |
| 1090 size_t sz; | 1133 size_t sz; |
| 1091 int i; | 1134 int i; |
| 1092 | 1135 |
| 1093 cm->last_frame_type = cm->frame_type; | 1136 cm->last_frame_type = cm->frame_type; |
| 1094 | 1137 |
| 1095 if (vp9_rb_read_literal(rb, 2) != VP9_FRAME_MARKER) | 1138 if (vp9_rb_read_literal(rb, 2) != VP9_FRAME_MARKER) |
| 1096 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | 1139 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1119 } | 1162 } |
| 1120 | 1163 |
| 1121 cm->frame_type = (FRAME_TYPE) vp9_rb_read_bit(rb); | 1164 cm->frame_type = (FRAME_TYPE) vp9_rb_read_bit(rb); |
| 1122 cm->show_frame = vp9_rb_read_bit(rb); | 1165 cm->show_frame = vp9_rb_read_bit(rb); |
| 1123 cm->error_resilient_mode = vp9_rb_read_bit(rb); | 1166 cm->error_resilient_mode = vp9_rb_read_bit(rb); |
| 1124 | 1167 |
| 1125 if (cm->frame_type == KEY_FRAME) { | 1168 if (cm->frame_type == KEY_FRAME) { |
| 1126 if (!vp9_read_sync_code(rb)) | 1169 if (!vp9_read_sync_code(rb)) |
| 1127 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | 1170 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1128 "Invalid frame sync code"); | 1171 "Invalid frame sync code"); |
| 1129 if (cm->profile > PROFILE_1) | |
| 1130 cm->bit_depth = vp9_rb_read_bit(rb) ? BITS_12 : BITS_10; | |
| 1131 cm->color_space = (COLOR_SPACE)vp9_rb_read_literal(rb, 3); | |
| 1132 if (cm->color_space != SRGB) { | |
| 1133 vp9_rb_read_bit(rb); // [16,235] (including xvycc) vs [0,255] range | |
| 1134 if (cm->profile == PROFILE_1 || cm->profile == PROFILE_3) { | |
| 1135 cm->subsampling_x = vp9_rb_read_bit(rb); | |
| 1136 cm->subsampling_y = vp9_rb_read_bit(rb); | |
| 1137 if (vp9_rb_read_bit(rb)) | |
| 1138 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | |
| 1139 "Reserved bit set"); | |
| 1140 } else { | |
| 1141 cm->subsampling_y = cm->subsampling_x = 1; | |
| 1142 } | |
| 1143 } else { | |
| 1144 if (cm->profile == PROFILE_1 || cm->profile == PROFILE_3) { | |
| 1145 cm->subsampling_y = cm->subsampling_x = 0; | |
| 1146 if (vp9_rb_read_bit(rb)) | |
| 1147 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | |
| 1148 "Reserved bit set"); | |
| 1149 } else { | |
| 1150 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | |
| 1151 "4:4:4 color not supported in profile 0"); | |
| 1152 } | |
| 1153 } | |
| 1154 | 1172 |
| 1173 read_bitdepth_colorspace_sampling(cm, rb); |
| 1155 pbi->refresh_frame_flags = (1 << REF_FRAMES) - 1; | 1174 pbi->refresh_frame_flags = (1 << REF_FRAMES) - 1; |
| 1156 | 1175 |
| 1157 for (i = 0; i < REFS_PER_FRAME; ++i) { | 1176 for (i = 0; i < REFS_PER_FRAME; ++i) { |
| 1158 cm->frame_refs[i].idx = -1; | 1177 cm->frame_refs[i].idx = -1; |
| 1159 cm->frame_refs[i].buf = NULL; | 1178 cm->frame_refs[i].buf = NULL; |
| 1160 } | 1179 } |
| 1161 | 1180 |
| 1162 setup_frame_size(cm, rb); | 1181 setup_frame_size(cm, rb); |
| 1163 } else { | 1182 } else { |
| 1164 cm->intra_only = cm->show_frame ? 0 : vp9_rb_read_bit(rb); | 1183 cm->intra_only = cm->show_frame ? 0 : vp9_rb_read_bit(rb); |
| 1165 | 1184 |
| 1166 cm->reset_frame_context = cm->error_resilient_mode ? | 1185 cm->reset_frame_context = cm->error_resilient_mode ? |
| 1167 0 : vp9_rb_read_literal(rb, 2); | 1186 0 : vp9_rb_read_literal(rb, 2); |
| 1168 | 1187 |
| 1169 if (cm->intra_only) { | 1188 if (cm->intra_only) { |
| 1170 if (!vp9_read_sync_code(rb)) | 1189 if (!vp9_read_sync_code(rb)) |
| 1171 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, | 1190 vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
| 1172 "Invalid frame sync code"); | 1191 "Invalid frame sync code"); |
| 1192 if (cm->profile > PROFILE_0) { |
| 1193 read_bitdepth_colorspace_sampling(cm, rb); |
| 1194 } else { |
| 1195 // NOTE: The intra-only frame header does not include the specification |
| 1196 // of either the color format or color sub-sampling in profile 0. VP9 |
| 1197 // specifies that the default color space should be YUV 4:2:0 in this |
| 1198 // case (normative). |
| 1199 cm->color_space = BT_601; |
| 1200 cm->subsampling_y = cm->subsampling_x = 1; |
| 1201 } |
| 1173 | 1202 |
| 1174 pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); | 1203 pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); |
| 1175 | |
| 1176 // NOTE: The intra-only frame header does not include the specification of | |
| 1177 // either the color format or color sub-sampling. VP9 specifies that the | |
| 1178 // default color space should be YUV 4:2:0 in this case (normative). | |
| 1179 cm->color_space = BT_601; | |
| 1180 cm->subsampling_y = cm->subsampling_x = 1; | |
| 1181 | |
| 1182 setup_frame_size(cm, rb); | 1204 setup_frame_size(cm, rb); |
| 1183 } else { | 1205 } else { |
| 1184 pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); | 1206 pbi->refresh_frame_flags = vp9_rb_read_literal(rb, REF_FRAMES); |
| 1185 for (i = 0; i < REFS_PER_FRAME; ++i) { | 1207 for (i = 0; i < REFS_PER_FRAME; ++i) { |
| 1186 const int ref = vp9_rb_read_literal(rb, REF_FRAMES_LOG2); | 1208 const int ref = vp9_rb_read_literal(rb, REF_FRAMES_LOG2); |
| 1187 const int idx = cm->ref_frame_map[ref]; | 1209 const int idx = cm->ref_frame_map[ref]; |
| 1188 RefBuffer *const ref_frame = &cm->frame_refs[i]; | 1210 RefBuffer *const ref_frame = &cm->frame_refs[i]; |
| 1189 ref_frame->idx = idx; | 1211 ref_frame->idx = idx; |
| 1190 ref_frame->buf = &cm->frame_bufs[idx].buf; | 1212 ref_frame->buf = &cm->frame_bufs[idx].buf; |
| 1191 cm->ref_frame_sign_bias[LAST_FRAME + i] = vp9_rb_read_bit(rb); | 1213 cm->ref_frame_sign_bias[LAST_FRAME + i] = vp9_rb_read_bit(rb); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1202 ref_buf->buf->y_crop_width, | 1224 ref_buf->buf->y_crop_width, |
| 1203 ref_buf->buf->y_crop_height, | 1225 ref_buf->buf->y_crop_height, |
| 1204 cm->width, cm->height); | 1226 cm->width, cm->height); |
| 1205 if (vp9_is_scaled(&ref_buf->sf)) | 1227 if (vp9_is_scaled(&ref_buf->sf)) |
| 1206 vp9_extend_frame_borders(ref_buf->buf); | 1228 vp9_extend_frame_borders(ref_buf->buf); |
| 1207 } | 1229 } |
| 1208 } | 1230 } |
| 1209 } | 1231 } |
| 1210 | 1232 |
| 1211 if (!cm->error_resilient_mode) { | 1233 if (!cm->error_resilient_mode) { |
| 1212 cm->coding_use_prev_mi = 1; | |
| 1213 cm->refresh_frame_context = vp9_rb_read_bit(rb); | 1234 cm->refresh_frame_context = vp9_rb_read_bit(rb); |
| 1214 cm->frame_parallel_decoding_mode = vp9_rb_read_bit(rb); | 1235 cm->frame_parallel_decoding_mode = vp9_rb_read_bit(rb); |
| 1215 } else { | 1236 } else { |
| 1216 cm->coding_use_prev_mi = 0; | |
| 1217 cm->refresh_frame_context = 0; | 1237 cm->refresh_frame_context = 0; |
| 1218 cm->frame_parallel_decoding_mode = 1; | 1238 cm->frame_parallel_decoding_mode = 1; |
| 1219 } | 1239 } |
| 1220 | 1240 |
| 1221 // This flag will be overridden by the call to vp9_setup_past_independence | 1241 // This flag will be overridden by the call to vp9_setup_past_independence |
| 1222 // below, forcing the use of context 0 for those frame types. | 1242 // below, forcing the use of context 0 for those frame types. |
| 1223 cm->frame_context_idx = vp9_rb_read_literal(rb, FRAME_CONTEXTS_LOG2); | 1243 cm->frame_context_idx = vp9_rb_read_literal(rb, FRAME_CONTEXTS_LOG2); |
| 1224 | 1244 |
| 1225 if (frame_is_intra_only(cm) || cm->error_resilient_mode) | 1245 if (frame_is_intra_only(cm) || cm->error_resilient_mode) |
| 1226 vp9_setup_past_independence(cm); | 1246 vp9_setup_past_independence(cm); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 return; | 1402 return; |
| 1383 } | 1403 } |
| 1384 | 1404 |
| 1385 data += vp9_rb_bytes_read(&rb); | 1405 data += vp9_rb_bytes_read(&rb); |
| 1386 if (!read_is_valid(data, first_partition_size, data_end)) | 1406 if (!read_is_valid(data, first_partition_size, data_end)) |
| 1387 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, | 1407 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
| 1388 "Truncated packet or corrupt header length"); | 1408 "Truncated packet or corrupt header length"); |
| 1389 | 1409 |
| 1390 init_macroblockd(cm, &pbi->mb); | 1410 init_macroblockd(cm, &pbi->mb); |
| 1391 | 1411 |
| 1392 if (cm->coding_use_prev_mi) | 1412 if (!cm->error_resilient_mode) |
| 1393 set_prev_mi(cm); | 1413 set_prev_mi(cm); |
| 1394 else | 1414 else |
| 1395 cm->prev_mi = NULL; | 1415 cm->prev_mi = NULL; |
| 1396 | 1416 |
| 1397 setup_plane_dequants(cm, xd, cm->base_qindex); | 1417 setup_plane_dequants(cm, xd, cm->base_qindex); |
| 1398 vp9_setup_block_planes(xd, cm->subsampling_x, cm->subsampling_y); | 1418 vp9_setup_block_planes(xd, cm->subsampling_x, cm->subsampling_y); |
| 1399 | 1419 |
| 1400 cm->fc = cm->frame_contexts[cm->frame_context_idx]; | 1420 cm->fc = cm->frame_contexts[cm->frame_context_idx]; |
| 1401 vp9_zero(cm->counts); | 1421 vp9_zero(cm->counts); |
| 1402 vp9_zero(xd->dqcoeff); | 1422 vp9_zero(xd->dqcoeff); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1430 debug_check_frame_counts(cm); | 1450 debug_check_frame_counts(cm); |
| 1431 } | 1451 } |
| 1432 } else { | 1452 } else { |
| 1433 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, | 1453 vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
| 1434 "Decode failed. Frame data is corrupted."); | 1454 "Decode failed. Frame data is corrupted."); |
| 1435 } | 1455 } |
| 1436 | 1456 |
| 1437 if (cm->refresh_frame_context) | 1457 if (cm->refresh_frame_context) |
| 1438 cm->frame_contexts[cm->frame_context_idx] = cm->fc; | 1458 cm->frame_contexts[cm->frame_context_idx] = cm->fc; |
| 1439 } | 1459 } |
| OLD | NEW |