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 17 matching lines...) Expand all Loading... |
28 #include "vp9/common/vp9_systemdependent.h" | 28 #include "vp9/common/vp9_systemdependent.h" |
29 #include "vp9/common/vp9_tile_common.h" | 29 #include "vp9/common/vp9_tile_common.h" |
30 | 30 |
31 #include "vp9/encoder/vp9_aq_complexity.h" | 31 #include "vp9/encoder/vp9_aq_complexity.h" |
32 #include "vp9/encoder/vp9_aq_cyclicrefresh.h" | 32 #include "vp9/encoder/vp9_aq_cyclicrefresh.h" |
33 #include "vp9/encoder/vp9_aq_variance.h" | 33 #include "vp9/encoder/vp9_aq_variance.h" |
34 #include "vp9/encoder/vp9_bitstream.h" | 34 #include "vp9/encoder/vp9_bitstream.h" |
35 #include "vp9/encoder/vp9_context_tree.h" | 35 #include "vp9/encoder/vp9_context_tree.h" |
36 #include "vp9/encoder/vp9_encodeframe.h" | 36 #include "vp9/encoder/vp9_encodeframe.h" |
37 #include "vp9/encoder/vp9_encodemv.h" | 37 #include "vp9/encoder/vp9_encodemv.h" |
| 38 #include "vp9/encoder/vp9_ethread.h" |
38 #include "vp9/encoder/vp9_firstpass.h" | 39 #include "vp9/encoder/vp9_firstpass.h" |
39 #include "vp9/encoder/vp9_mbgraph.h" | 40 #include "vp9/encoder/vp9_mbgraph.h" |
40 #include "vp9/encoder/vp9_encoder.h" | 41 #include "vp9/encoder/vp9_encoder.h" |
41 #include "vp9/encoder/vp9_picklpf.h" | 42 #include "vp9/encoder/vp9_picklpf.h" |
42 #include "vp9/encoder/vp9_ratectrl.h" | 43 #include "vp9/encoder/vp9_ratectrl.h" |
43 #include "vp9/encoder/vp9_rd.h" | 44 #include "vp9/encoder/vp9_rd.h" |
44 #include "vp9/encoder/vp9_segmentation.h" | 45 #include "vp9/encoder/vp9_segmentation.h" |
45 #include "vp9/encoder/vp9_speed_features.h" | 46 #include "vp9/encoder/vp9_speed_features.h" |
46 #if CONFIG_INTERNAL_STATS | 47 #if CONFIG_INTERNAL_STATS |
47 #include "vp9/encoder/vp9_ssim.h" | 48 #include "vp9/encoder/vp9_ssim.h" |
48 #endif | 49 #endif |
49 #include "vp9/encoder/vp9_temporal_filter.h" | 50 #include "vp9/encoder/vp9_temporal_filter.h" |
50 #include "vp9/encoder/vp9_resize.h" | 51 #include "vp9/encoder/vp9_resize.h" |
51 #include "vp9/encoder/vp9_svc_layercontext.h" | 52 #include "vp9/encoder/vp9_svc_layercontext.h" |
52 | 53 |
53 void vp9_coef_tree_initialize(); | |
54 | 54 |
55 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ | 55 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ |
56 | 56 |
57 #define ALTREF_HIGH_PRECISION_MV 1 // Whether to use high precision mv | 57 #define ALTREF_HIGH_PRECISION_MV 1 // Whether to use high precision mv |
58 // for altref computation. | 58 // for altref computation. |
59 #define HIGH_PRECISION_MV_QTHRESH 200 // Q threshold for high precision | 59 #define HIGH_PRECISION_MV_QTHRESH 200 // Q threshold for high precision |
60 // mv. Choose a very high value for | 60 // mv. Choose a very high value for |
61 // now so that HIGH_PRECISION is always | 61 // now so that HIGH_PRECISION is always |
62 // chosen. | 62 // chosen. |
63 | 63 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 // Current mip will be the prev_mip for the next frame. | 173 // Current mip will be the prev_mip for the next frame. |
174 MODE_INFO *temp = cm->prev_mip; | 174 MODE_INFO *temp = cm->prev_mip; |
175 cm->prev_mip = cm->mip; | 175 cm->prev_mip = cm->mip; |
176 cm->mip = temp; | 176 cm->mip = temp; |
177 | 177 |
178 // Update the upper left visible macroblock ptrs. | 178 // Update the upper left visible macroblock ptrs. |
179 cm->mi = cm->mip + cm->mi_stride + 1; | 179 cm->mi = cm->mip + cm->mi_stride + 1; |
180 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; | 180 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; |
181 } | 181 } |
182 | 182 |
183 void vp9_initialize_enc() { | 183 void vp9_initialize_enc(void) { |
184 static int init_done = 0; | 184 static volatile int init_done = 0; |
185 | 185 |
186 if (!init_done) { | 186 if (!init_done) { |
187 vp9_rtcd(); | 187 vp9_rtcd(); |
188 vp9_init_intra_predictors(); | 188 vp9_init_intra_predictors(); |
189 vp9_coef_tree_initialize(); | |
190 vp9_tokenize_initialize(); | |
191 vp9_init_me_luts(); | 189 vp9_init_me_luts(); |
192 vp9_rc_init_minq_luts(); | 190 vp9_rc_init_minq_luts(); |
193 vp9_entropy_mv_init(); | 191 vp9_entropy_mv_init(); |
194 vp9_entropy_mode_init(); | |
195 vp9_temporal_filter_init(); | 192 vp9_temporal_filter_init(); |
196 init_done = 1; | 193 init_done = 1; |
197 } | 194 } |
198 } | 195 } |
199 | 196 |
200 static void dealloc_compressor_data(VP9_COMP *cpi) { | 197 static void dealloc_compressor_data(VP9_COMP *cpi) { |
201 VP9_COMMON *const cm = &cpi->common; | 198 VP9_COMMON *const cm = &cpi->common; |
202 int i; | 199 int i; |
203 | 200 |
204 vpx_free(cpi->tile_data); | 201 vpx_free(cpi->tile_data); |
205 cpi->tile_data = NULL; | 202 cpi->tile_data = NULL; |
206 | 203 |
207 // Delete sementation map | 204 // Delete sementation map |
208 vpx_free(cpi->segmentation_map); | 205 vpx_free(cpi->segmentation_map); |
209 cpi->segmentation_map = NULL; | 206 cpi->segmentation_map = NULL; |
210 vpx_free(cm->last_frame_seg_map); | 207 vpx_free(cm->last_frame_seg_map); |
211 cm->last_frame_seg_map = NULL; | 208 cm->last_frame_seg_map = NULL; |
212 vpx_free(cpi->coding_context.last_frame_seg_map_copy); | 209 vpx_free(cpi->coding_context.last_frame_seg_map_copy); |
213 cpi->coding_context.last_frame_seg_map_copy = NULL; | 210 cpi->coding_context.last_frame_seg_map_copy = NULL; |
214 | 211 |
215 vpx_free(cpi->complexity_map); | |
216 cpi->complexity_map = NULL; | |
217 | |
218 vpx_free(cpi->nmvcosts[0]); | 212 vpx_free(cpi->nmvcosts[0]); |
219 vpx_free(cpi->nmvcosts[1]); | 213 vpx_free(cpi->nmvcosts[1]); |
220 cpi->nmvcosts[0] = NULL; | 214 cpi->nmvcosts[0] = NULL; |
221 cpi->nmvcosts[1] = NULL; | 215 cpi->nmvcosts[1] = NULL; |
222 | 216 |
223 vpx_free(cpi->nmvcosts_hp[0]); | 217 vpx_free(cpi->nmvcosts_hp[0]); |
224 vpx_free(cpi->nmvcosts_hp[1]); | 218 vpx_free(cpi->nmvcosts_hp[1]); |
225 cpi->nmvcosts_hp[0] = NULL; | 219 cpi->nmvcosts_hp[0] = NULL; |
226 cpi->nmvcosts_hp[1] = NULL; | 220 cpi->nmvcosts_hp[1] = NULL; |
227 | 221 |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 if (!cpi->lookahead) | 480 if (!cpi->lookahead) |
487 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 481 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
488 "Failed to allocate lag buffers"); | 482 "Failed to allocate lag buffers"); |
489 | 483 |
490 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, | 484 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, |
491 oxcf->width, oxcf->height, | 485 oxcf->width, oxcf->height, |
492 cm->subsampling_x, cm->subsampling_y, | 486 cm->subsampling_x, cm->subsampling_y, |
493 #if CONFIG_VP9_HIGHBITDEPTH | 487 #if CONFIG_VP9_HIGHBITDEPTH |
494 cm->use_highbitdepth, | 488 cm->use_highbitdepth, |
495 #endif | 489 #endif |
496 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL)) | 490 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 491 NULL, NULL, NULL)) |
497 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 492 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
498 "Failed to allocate altref buffer"); | 493 "Failed to allocate altref buffer"); |
499 } | 494 } |
500 | 495 |
501 static void alloc_ref_frame_buffers(VP9_COMP *cpi) { | 496 static void alloc_ref_frame_buffers(VP9_COMP *cpi) { |
502 VP9_COMMON *const cm = &cpi->common; | 497 VP9_COMMON *const cm = &cpi->common; |
503 if (vp9_alloc_ref_frame_buffers(cm, cm->width, cm->height)) | 498 if (vp9_alloc_ref_frame_buffers(cm, cm->width, cm->height)) |
504 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 499 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
505 "Failed to allocate frame buffers"); | 500 "Failed to allocate frame buffers"); |
506 } | 501 } |
507 | 502 |
508 static void alloc_util_frame_buffers(VP9_COMP *cpi) { | 503 static void alloc_util_frame_buffers(VP9_COMP *cpi) { |
509 VP9_COMMON *const cm = &cpi->common; | 504 VP9_COMMON *const cm = &cpi->common; |
510 if (vp9_realloc_frame_buffer(&cpi->last_frame_uf, | 505 if (vp9_realloc_frame_buffer(&cpi->last_frame_uf, |
511 cm->width, cm->height, | 506 cm->width, cm->height, |
512 cm->subsampling_x, cm->subsampling_y, | 507 cm->subsampling_x, cm->subsampling_y, |
513 #if CONFIG_VP9_HIGHBITDEPTH | 508 #if CONFIG_VP9_HIGHBITDEPTH |
514 cm->use_highbitdepth, | 509 cm->use_highbitdepth, |
515 #endif | 510 #endif |
516 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL)) | 511 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 512 NULL, NULL, NULL)) |
517 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 513 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
518 "Failed to allocate last frame buffer"); | 514 "Failed to allocate last frame buffer"); |
519 | 515 |
520 if (vp9_realloc_frame_buffer(&cpi->scaled_source, | 516 if (vp9_realloc_frame_buffer(&cpi->scaled_source, |
521 cm->width, cm->height, | 517 cm->width, cm->height, |
522 cm->subsampling_x, cm->subsampling_y, | 518 cm->subsampling_x, cm->subsampling_y, |
523 #if CONFIG_VP9_HIGHBITDEPTH | 519 #if CONFIG_VP9_HIGHBITDEPTH |
524 cm->use_highbitdepth, | 520 cm->use_highbitdepth, |
525 #endif | 521 #endif |
526 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL)) | 522 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 523 NULL, NULL, NULL)) |
527 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 524 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
528 "Failed to allocate scaled source buffer"); | 525 "Failed to allocate scaled source buffer"); |
529 | 526 |
530 if (vp9_realloc_frame_buffer(&cpi->scaled_last_source, | 527 if (vp9_realloc_frame_buffer(&cpi->scaled_last_source, |
531 cm->width, cm->height, | 528 cm->width, cm->height, |
532 cm->subsampling_x, cm->subsampling_y, | 529 cm->subsampling_x, cm->subsampling_y, |
533 #if CONFIG_VP9_HIGHBITDEPTH | 530 #if CONFIG_VP9_HIGHBITDEPTH |
534 cm->use_highbitdepth, | 531 cm->use_highbitdepth, |
535 #endif | 532 #endif |
536 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL)) | 533 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 534 NULL, NULL, NULL)) |
537 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 535 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
538 "Failed to allocate scaled last source buffer"); | 536 "Failed to allocate scaled last source buffer"); |
539 } | 537 } |
540 | 538 |
541 void vp9_alloc_compressor_data(VP9_COMP *cpi) { | 539 void vp9_alloc_compressor_data(VP9_COMP *cpi) { |
542 VP9_COMMON *cm = &cpi->common; | 540 VP9_COMMON *cm = &cpi->common; |
543 | 541 |
544 vp9_alloc_context_buffers(cm, cm->width, cm->height); | 542 vp9_alloc_context_buffers(cm, cm->width, cm->height); |
545 | 543 |
546 vpx_free(cpi->tile_tok[0][0]); | 544 vpx_free(cpi->tile_tok[0][0]); |
(...skipping 15 matching lines...) Expand all Loading... |
562 vp9_init_context_buffers(cm); | 560 vp9_init_context_buffers(cm); |
563 init_macroblockd(cm, xd); | 561 init_macroblockd(cm, xd); |
564 | 562 |
565 if (is_two_pass_svc(cpi)) { | 563 if (is_two_pass_svc(cpi)) { |
566 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, | 564 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, |
567 cm->width, cm->height, | 565 cm->width, cm->height, |
568 cm->subsampling_x, cm->subsampling_y, | 566 cm->subsampling_x, cm->subsampling_y, |
569 #if CONFIG_VP9_HIGHBITDEPTH | 567 #if CONFIG_VP9_HIGHBITDEPTH |
570 cm->use_highbitdepth, | 568 cm->use_highbitdepth, |
571 #endif | 569 #endif |
572 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL)) | 570 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 571 NULL, NULL, NULL)) |
573 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, | 572 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, |
574 "Failed to reallocate alt_ref_buffer"); | 573 "Failed to reallocate alt_ref_buffer"); |
575 } | 574 } |
576 } | 575 } |
577 | 576 |
578 void vp9_new_framerate(VP9_COMP *cpi, double framerate) { | 577 void vp9_new_framerate(VP9_COMP *cpi, double framerate) { |
579 cpi->framerate = framerate < 0.1 ? 30 : framerate; | 578 cpi->framerate = framerate < 0.1 ? 30 : framerate; |
580 vp9_rc_update_framerate(cpi); | 579 vp9_rc_update_framerate(cpi); |
581 } | 580 } |
582 | 581 |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1341 #endif | 1340 #endif |
1342 | 1341 |
1343 set_tile_limits(cpi); | 1342 set_tile_limits(cpi); |
1344 | 1343 |
1345 cpi->ext_refresh_frame_flags_pending = 0; | 1344 cpi->ext_refresh_frame_flags_pending = 0; |
1346 cpi->ext_refresh_frame_context_pending = 0; | 1345 cpi->ext_refresh_frame_context_pending = 0; |
1347 | 1346 |
1348 #if CONFIG_VP9_HIGHBITDEPTH | 1347 #if CONFIG_VP9_HIGHBITDEPTH |
1349 highbd_set_var_fns(cpi); | 1348 highbd_set_var_fns(cpi); |
1350 #endif | 1349 #endif |
1351 | |
1352 #if CONFIG_VP9_TEMPORAL_DENOISING | |
1353 if (cpi->oxcf.noise_sensitivity > 0) { | |
1354 vp9_denoiser_alloc(&(cpi->denoiser), cm->width, cm->height, | |
1355 cm->subsampling_x, cm->subsampling_y, | |
1356 #if CONFIG_VP9_HIGHBITDEPTH | |
1357 cm->use_highbitdepth, | |
1358 #endif | |
1359 VP9_ENC_BORDER_IN_PIXELS); | |
1360 } | |
1361 #endif | |
1362 } | 1350 } |
1363 | 1351 |
1364 #ifndef M_LOG2_E | 1352 #ifndef M_LOG2_E |
1365 #define M_LOG2_E 0.693147180559945309417 | 1353 #define M_LOG2_E 0.693147180559945309417 |
1366 #endif | 1354 #endif |
1367 #define log2f(x) (log (x) / (float) M_LOG2_E) | 1355 #define log2f(x) (log (x) / (float) M_LOG2_E) |
1368 | 1356 |
1369 static void cal_nmvjointsadcost(int *mvjointsadcost) { | 1357 static void cal_nmvjointsadcost(int *mvjointsadcost) { |
1370 mvjointsadcost[0] = 600; | 1358 mvjointsadcost[0] = 600; |
1371 mvjointsadcost[1] = 300; | 1359 mvjointsadcost[1] = 300; |
(...skipping 27 matching lines...) Expand all Loading... |
1399 mvsadcost[0][i] = (int)z; | 1387 mvsadcost[0][i] = (int)z; |
1400 mvsadcost[1][i] = (int)z; | 1388 mvsadcost[1][i] = (int)z; |
1401 mvsadcost[0][-i] = (int)z; | 1389 mvsadcost[0][-i] = (int)z; |
1402 mvsadcost[1][-i] = (int)z; | 1390 mvsadcost[1][-i] = (int)z; |
1403 } while (++i <= MV_MAX); | 1391 } while (++i <= MV_MAX); |
1404 } | 1392 } |
1405 | 1393 |
1406 | 1394 |
1407 VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { | 1395 VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { |
1408 unsigned int i; | 1396 unsigned int i; |
1409 VP9_COMP *const cpi = vpx_memalign(32, sizeof(VP9_COMP)); | 1397 VP9_COMP *volatile const cpi = vpx_memalign(32, sizeof(VP9_COMP)); |
1410 VP9_COMMON *const cm = cpi != NULL ? &cpi->common : NULL; | 1398 VP9_COMMON *volatile const cm = cpi != NULL ? &cpi->common : NULL; |
1411 | 1399 |
1412 if (!cm) | 1400 if (!cm) |
1413 return NULL; | 1401 return NULL; |
1414 | 1402 |
1415 vp9_zero(*cpi); | 1403 vp9_zero(*cpi); |
1416 | 1404 |
1417 if (setjmp(cm->error.jmp)) { | 1405 if (setjmp(cm->error.jmp)) { |
1418 cm->error.setjmp = 0; | 1406 cm->error.setjmp = 0; |
1419 vp9_remove_compressor(cpi); | 1407 vp9_remove_compressor(cpi); |
1420 return 0; | 1408 return 0; |
(...skipping 16 matching lines...) Expand all Loading... |
1437 vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc); | 1425 vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc); |
1438 | 1426 |
1439 cm->current_video_frame = 0; | 1427 cm->current_video_frame = 0; |
1440 cpi->partition_search_skippable_frame = 0; | 1428 cpi->partition_search_skippable_frame = 0; |
1441 cpi->tile_data = NULL; | 1429 cpi->tile_data = NULL; |
1442 | 1430 |
1443 // Create the encoder segmentation map and set all entries to 0 | 1431 // Create the encoder segmentation map and set all entries to 0 |
1444 CHECK_MEM_ERROR(cm, cpi->segmentation_map, | 1432 CHECK_MEM_ERROR(cm, cpi->segmentation_map, |
1445 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | 1433 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); |
1446 | 1434 |
1447 // Create a complexity map used for rd adjustment | |
1448 CHECK_MEM_ERROR(cm, cpi->complexity_map, | |
1449 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | |
1450 | |
1451 // Create a map used for cyclic background refresh. | 1435 // Create a map used for cyclic background refresh. |
1452 CHECK_MEM_ERROR(cm, cpi->cyclic_refresh, | 1436 CHECK_MEM_ERROR(cm, cpi->cyclic_refresh, |
1453 vp9_cyclic_refresh_alloc(cm->mi_rows, cm->mi_cols)); | 1437 vp9_cyclic_refresh_alloc(cm->mi_rows, cm->mi_cols)); |
1454 | 1438 |
1455 // And a place holder structure is the coding context | 1439 // And a place holder structure is the coding context |
1456 // for use if we want to save and restore it | 1440 // for use if we want to save and restore it |
1457 CHECK_MEM_ERROR(cm, cpi->coding_context.last_frame_seg_map_copy, | 1441 CHECK_MEM_ERROR(cm, cpi->coding_context.last_frame_seg_map_copy, |
1458 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | 1442 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); |
1459 | 1443 |
1460 CHECK_MEM_ERROR(cm, cpi->nmvcosts[0], | 1444 CHECK_MEM_ERROR(cm, cpi->nmvcosts[0], |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1721 vp9_loop_filter_init(cm); | 1705 vp9_loop_filter_init(cm); |
1722 | 1706 |
1723 cm->error.setjmp = 0; | 1707 cm->error.setjmp = 0; |
1724 | 1708 |
1725 return cpi; | 1709 return cpi; |
1726 } | 1710 } |
1727 | 1711 |
1728 void vp9_remove_compressor(VP9_COMP *cpi) { | 1712 void vp9_remove_compressor(VP9_COMP *cpi) { |
1729 VP9_COMMON *const cm = &cpi->common; | 1713 VP9_COMMON *const cm = &cpi->common; |
1730 unsigned int i; | 1714 unsigned int i; |
| 1715 int t; |
1731 | 1716 |
1732 if (!cpi) | 1717 if (!cpi) |
1733 return; | 1718 return; |
1734 | 1719 |
1735 if (cpi && (cm->current_video_frame > 0)) { | 1720 if (cpi && (cm->current_video_frame > 0)) { |
1736 #if CONFIG_INTERNAL_STATS | 1721 #if CONFIG_INTERNAL_STATS |
1737 | 1722 |
1738 vp9_clear_system_state(); | 1723 vp9_clear_system_state(); |
1739 | 1724 |
1740 // printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count); | 1725 // printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1788 printf("\n_frames recive_data encod_mb_row compress_frame Total\n"); | 1773 printf("\n_frames recive_data encod_mb_row compress_frame Total\n"); |
1789 printf("%6d %10ld %10ld %10ld %10ld\n", cpi->common.current_video_frame, | 1774 printf("%6d %10ld %10ld %10ld %10ld\n", cpi->common.current_video_frame, |
1790 cpi->time_receive_data / 1000, cpi->time_encode_sb_row / 1000, | 1775 cpi->time_receive_data / 1000, cpi->time_encode_sb_row / 1000, |
1791 cpi->time_compress_data / 1000, | 1776 cpi->time_compress_data / 1000, |
1792 (cpi->time_receive_data + cpi->time_compress_data) / 1000); | 1777 (cpi->time_receive_data + cpi->time_compress_data) / 1000); |
1793 } | 1778 } |
1794 #endif | 1779 #endif |
1795 } | 1780 } |
1796 | 1781 |
1797 #if CONFIG_VP9_TEMPORAL_DENOISING | 1782 #if CONFIG_VP9_TEMPORAL_DENOISING |
1798 if (cpi->oxcf.noise_sensitivity > 0) { | 1783 vp9_denoiser_free(&(cpi->denoiser)); |
1799 vp9_denoiser_free(&(cpi->denoiser)); | 1784 #endif |
| 1785 |
| 1786 for (t = 0; t < cpi->num_workers; ++t) { |
| 1787 VP9Worker *const worker = &cpi->workers[t]; |
| 1788 EncWorkerData *const thread_data = (EncWorkerData*)worker->data1; |
| 1789 |
| 1790 // Deallocate allocated threads. |
| 1791 vp9_get_worker_interface()->end(worker); |
| 1792 |
| 1793 // Deallocate allocated thread data. |
| 1794 if (t < cpi->num_workers - 1) { |
| 1795 vpx_free(thread_data->td->counts); |
| 1796 vp9_free_pc_tree(thread_data->td); |
| 1797 vpx_free(thread_data->td); |
| 1798 } |
| 1799 |
| 1800 vpx_free(worker->data1); |
1800 } | 1801 } |
1801 #endif | 1802 vpx_free(cpi->workers); |
1802 | 1803 |
1803 dealloc_compressor_data(cpi); | 1804 dealloc_compressor_data(cpi); |
1804 | 1805 |
1805 for (i = 0; i < sizeof(cpi->mbgraph_stats) / | 1806 for (i = 0; i < sizeof(cpi->mbgraph_stats) / |
1806 sizeof(cpi->mbgraph_stats[0]); ++i) { | 1807 sizeof(cpi->mbgraph_stats[0]); ++i) { |
1807 vpx_free(cpi->mbgraph_stats[i].mb_stats); | 1808 vpx_free(cpi->mbgraph_stats[i].mb_stats); |
1808 } | 1809 } |
1809 | 1810 |
1810 #if CONFIG_FP_MB_STATS | 1811 #if CONFIG_FP_MB_STATS |
1811 if (cpi->use_fp_mb_stats) { | 1812 if (cpi->use_fp_mb_stats) { |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2118 void vp9_write_yuv_frame_420(YV12_BUFFER_CONFIG *s, FILE *f) { | 2119 void vp9_write_yuv_frame_420(YV12_BUFFER_CONFIG *s, FILE *f) { |
2119 uint8_t *src = s->y_buffer; | 2120 uint8_t *src = s->y_buffer; |
2120 int h = s->y_height; | 2121 int h = s->y_height; |
2121 | 2122 |
2122 do { | 2123 do { |
2123 fwrite(src, s->y_width, 1, f); | 2124 fwrite(src, s->y_width, 1, f); |
2124 src += s->y_stride; | 2125 src += s->y_stride; |
2125 } while (--h); | 2126 } while (--h); |
2126 | 2127 |
2127 src = s->u_buffer; | 2128 src = s->u_buffer; |
2128 h = s->uv_height / 2; | 2129 h = s->uv_height; |
2129 | 2130 |
2130 do { | 2131 do { |
2131 fwrite(src, s->uv_width / 2, 1, f); | 2132 fwrite(src, s->uv_width, 1, f); |
2132 src += s->uv_stride + s->uv_width / 2; | 2133 src += s->uv_stride; |
2133 } while (--h); | 2134 } while (--h); |
2134 | 2135 |
2135 src = s->v_buffer; | 2136 src = s->v_buffer; |
2136 h = s->uv_height / 2; | 2137 h = s->uv_height; |
2137 | 2138 |
2138 do { | 2139 do { |
2139 fwrite(src, s->uv_width / 2, 1, f); | 2140 fwrite(src, s->uv_width, 1, f); |
2140 src += s->uv_stride + s->uv_width / 2; | 2141 src += s->uv_stride; |
2141 } while (--h); | 2142 } while (--h); |
2142 } | 2143 } |
2143 #endif | 2144 #endif |
2144 #endif | 2145 #endif |
2145 | 2146 |
2146 #ifdef OUTPUT_YUV_REC | 2147 #ifdef OUTPUT_YUV_REC |
2147 void vp9_write_yuv_rec_frame(VP9_COMMON *cm) { | 2148 void vp9_write_yuv_rec_frame(VP9_COMMON *cm) { |
2148 YV12_BUFFER_CONFIG *s = cm->frame_to_show; | 2149 YV12_BUFFER_CONFIG *s = cm->frame_to_show; |
2149 uint8_t *src = s->y_buffer; | 2150 uint8_t *src = s->y_buffer; |
2150 int h = cm->height; | 2151 int h = cm->height; |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2453 const YV12_BUFFER_CONFIG *const ref = &cm->frame_bufs[idx].buf; | 2454 const YV12_BUFFER_CONFIG *const ref = &cm->frame_bufs[idx].buf; |
2454 | 2455 |
2455 #if CONFIG_VP9_HIGHBITDEPTH | 2456 #if CONFIG_VP9_HIGHBITDEPTH |
2456 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) { | 2457 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) { |
2457 const int new_fb = get_free_fb(cm); | 2458 const int new_fb = get_free_fb(cm); |
2458 cm->cur_frame = &cm->frame_bufs[new_fb]; | 2459 cm->cur_frame = &cm->frame_bufs[new_fb]; |
2459 vp9_realloc_frame_buffer(&cm->frame_bufs[new_fb].buf, | 2460 vp9_realloc_frame_buffer(&cm->frame_bufs[new_fb].buf, |
2460 cm->width, cm->height, | 2461 cm->width, cm->height, |
2461 cm->subsampling_x, cm->subsampling_y, | 2462 cm->subsampling_x, cm->subsampling_y, |
2462 cm->use_highbitdepth, | 2463 cm->use_highbitdepth, |
2463 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL); | 2464 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 2465 NULL, NULL, NULL); |
2464 scale_and_extend_frame(ref, &cm->frame_bufs[new_fb].buf, | 2466 scale_and_extend_frame(ref, &cm->frame_bufs[new_fb].buf, |
2465 (int)cm->bit_depth); | 2467 (int)cm->bit_depth); |
2466 #else | 2468 #else |
2467 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) { | 2469 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) { |
2468 const int new_fb = get_free_fb(cm); | 2470 const int new_fb = get_free_fb(cm); |
2469 vp9_realloc_frame_buffer(&cm->frame_bufs[new_fb].buf, | 2471 vp9_realloc_frame_buffer(&cm->frame_bufs[new_fb].buf, |
2470 cm->width, cm->height, | 2472 cm->width, cm->height, |
2471 cm->subsampling_x, cm->subsampling_y, | 2473 cm->subsampling_x, cm->subsampling_y, |
2472 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL); | 2474 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 2475 NULL, NULL, NULL); |
2473 scale_and_extend_frame(ref, &cm->frame_bufs[new_fb].buf); | 2476 scale_and_extend_frame(ref, &cm->frame_bufs[new_fb].buf); |
2474 #endif // CONFIG_VP9_HIGHBITDEPTH | 2477 #endif // CONFIG_VP9_HIGHBITDEPTH |
2475 cpi->scaled_ref_idx[ref_frame - 1] = new_fb; | 2478 cpi->scaled_ref_idx[ref_frame - 1] = new_fb; |
2476 if (cm->frame_bufs[new_fb].mvs == NULL || | 2479 if (cm->frame_bufs[new_fb].mvs == NULL || |
2477 cm->frame_bufs[new_fb].mi_rows < cm->mi_rows || | 2480 cm->frame_bufs[new_fb].mi_rows < cm->mi_rows || |
2478 cm->frame_bufs[new_fb].mi_cols < cm->mi_cols) { | 2481 cm->frame_bufs[new_fb].mi_cols < cm->mi_cols) { |
2479 vpx_free(cm->frame_bufs[new_fb].mvs); | 2482 vpx_free(cm->frame_bufs[new_fb].mvs); |
2480 cm->frame_bufs[new_fb].mvs = | 2483 cm->frame_bufs[new_fb].mvs = |
2481 (MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols, | 2484 (MV_REF *)vpx_calloc(cm->mi_rows * cm->mi_cols, |
2482 sizeof(*cm->frame_bufs[new_fb].mvs)); | 2485 sizeof(*cm->frame_bufs[new_fb].mvs)); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2526 for (j = 0; j < REF_TYPES; ++j) | 2529 for (j = 0; j < REF_TYPES; ++j) |
2527 for (k = 0; k < COEF_BANDS; ++k) | 2530 for (k = 0; k < COEF_BANDS; ++k) |
2528 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l) | 2531 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l) |
2529 full_to_model_count(model_count[i][j][k][l], full_count[i][j][k][l]); | 2532 full_to_model_count(model_count[i][j][k][l], full_count[i][j][k][l]); |
2530 } | 2533 } |
2531 | 2534 |
2532 #if 0 && CONFIG_INTERNAL_STATS | 2535 #if 0 && CONFIG_INTERNAL_STATS |
2533 static void output_frame_level_debug_stats(VP9_COMP *cpi) { | 2536 static void output_frame_level_debug_stats(VP9_COMP *cpi) { |
2534 VP9_COMMON *const cm = &cpi->common; | 2537 VP9_COMMON *const cm = &cpi->common; |
2535 FILE *const f = fopen("tmp.stt", cm->current_video_frame ? "a" : "w"); | 2538 FILE *const f = fopen("tmp.stt", cm->current_video_frame ? "a" : "w"); |
2536 int recon_err; | 2539 int64_t recon_err; |
2537 | 2540 |
2538 vp9_clear_system_state(); | 2541 vp9_clear_system_state(); |
2539 | 2542 |
2540 recon_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 2543 recon_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
2541 | 2544 |
2542 if (cpi->twopass.total_left_stats.coded_error != 0.0) | 2545 if (cpi->twopass.total_left_stats.coded_error != 0.0) |
2543 fprintf(f, "%10u %10d %10d %10d %10d" | 2546 fprintf(f, "%10u %10d %10d %10d %10d" |
2544 "%10"PRId64" %10"PRId64" %10"PRId64" %10"PRId64" %10d " | 2547 "%10"PRId64" %10"PRId64" %10"PRId64" %10"PRId64" %10d " |
2545 "%7.2lf %7.2lf %7.2lf %7.2lf %7.2lf" | 2548 "%7.2lf %7.2lf %7.2lf %7.2lf %7.2lf" |
2546 "%6d %6d %5d %5d %5d " | 2549 "%6d %6d %5d %5d %5d " |
2547 "%10"PRId64" %10.3lf" | 2550 "%10"PRId64" %10.3lf" |
2548 "%10lf %8u %10d %10d %10d\n", | 2551 "%10lf %8u %10"PRId64" %10d %10d\n", |
2549 cpi->common.current_video_frame, cpi->rc.this_frame_target, | 2552 cpi->common.current_video_frame, cpi->rc.this_frame_target, |
2550 cpi->rc.projected_frame_size, | 2553 cpi->rc.projected_frame_size, |
2551 cpi->rc.projected_frame_size / cpi->common.MBs, | 2554 cpi->rc.projected_frame_size / cpi->common.MBs, |
2552 (cpi->rc.projected_frame_size - cpi->rc.this_frame_target), | 2555 (cpi->rc.projected_frame_size - cpi->rc.this_frame_target), |
2553 cpi->rc.vbr_bits_off_target, | 2556 cpi->rc.vbr_bits_off_target, |
2554 cpi->rc.total_target_vs_actual, | 2557 cpi->rc.total_target_vs_actual, |
2555 (cpi->rc.starting_buffer_level - cpi->rc.bits_off_target), | 2558 (cpi->rc.starting_buffer_level - cpi->rc.bits_off_target), |
2556 cpi->rc.total_actual_bits, cm->base_qindex, | 2559 cpi->rc.total_actual_bits, cm->base_qindex, |
2557 vp9_convert_qindex_to_q(cm->base_qindex, cm->bit_depth), | 2560 vp9_convert_qindex_to_q(cm->base_qindex, cm->bit_depth), |
2558 (double)vp9_dc_quant(cm->base_qindex, 0, cm->bit_depth) / 4.0, | 2561 (double)vp9_dc_quant(cm->base_qindex, 0, cm->bit_depth) / 4.0, |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2701 vp9_set_target_rate(cpi); | 2704 vp9_set_target_rate(cpi); |
2702 } | 2705 } |
2703 | 2706 |
2704 // Reset the frame pointers to the current frame size. | 2707 // Reset the frame pointers to the current frame size. |
2705 vp9_realloc_frame_buffer(get_frame_new_buffer(cm), | 2708 vp9_realloc_frame_buffer(get_frame_new_buffer(cm), |
2706 cm->width, cm->height, | 2709 cm->width, cm->height, |
2707 cm->subsampling_x, cm->subsampling_y, | 2710 cm->subsampling_x, cm->subsampling_y, |
2708 #if CONFIG_VP9_HIGHBITDEPTH | 2711 #if CONFIG_VP9_HIGHBITDEPTH |
2709 cm->use_highbitdepth, | 2712 cm->use_highbitdepth, |
2710 #endif | 2713 #endif |
2711 VP9_ENC_BORDER_IN_PIXELS, NULL, NULL, NULL); | 2714 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, |
| 2715 NULL, NULL, NULL); |
2712 | 2716 |
2713 alloc_util_frame_buffers(cpi); | 2717 alloc_util_frame_buffers(cpi); |
2714 init_motion_estimation(cpi); | 2718 init_motion_estimation(cpi); |
2715 | 2719 |
2716 for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { | 2720 for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { |
2717 const int idx = cm->ref_frame_map[get_ref_frame_idx(cpi, ref_frame)]; | 2721 const int idx = cm->ref_frame_map[get_ref_frame_idx(cpi, ref_frame)]; |
2718 YV12_BUFFER_CONFIG *const buf = &cm->frame_bufs[idx].buf; | 2722 YV12_BUFFER_CONFIG *const buf = &cm->frame_bufs[idx].buf; |
2719 RefBuffer *const ref_buf = &cm->frame_refs[ref_frame - 1]; | 2723 RefBuffer *const ref_buf = &cm->frame_refs[ref_frame - 1]; |
2720 ref_buf->buf = buf; | 2724 ref_buf->buf = buf; |
2721 ref_buf->idx = idx; | 2725 ref_buf->idx = idx; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2866 frame_over_shoot_limit = 1; | 2870 frame_over_shoot_limit = 1; |
2867 } | 2871 } |
2868 | 2872 |
2869 if (cpi->oxcf.rc_mode == VPX_Q) { | 2873 if (cpi->oxcf.rc_mode == VPX_Q) { |
2870 loop = 0; | 2874 loop = 0; |
2871 } else { | 2875 } else { |
2872 if ((cm->frame_type == KEY_FRAME) && | 2876 if ((cm->frame_type == KEY_FRAME) && |
2873 rc->this_key_frame_forced && | 2877 rc->this_key_frame_forced && |
2874 (rc->projected_frame_size < rc->max_frame_bandwidth)) { | 2878 (rc->projected_frame_size < rc->max_frame_bandwidth)) { |
2875 int last_q = q; | 2879 int last_q = q; |
2876 int kf_err; | 2880 int64_t kf_err; |
2877 | 2881 |
2878 int high_err_target = cpi->ambient_err; | 2882 int64_t high_err_target = cpi->ambient_err; |
2879 int low_err_target = cpi->ambient_err >> 1; | 2883 int64_t low_err_target = cpi->ambient_err >> 1; |
2880 | 2884 |
2881 #if CONFIG_VP9_HIGHBITDEPTH | 2885 #if CONFIG_VP9_HIGHBITDEPTH |
2882 if (cm->use_highbitdepth) { | 2886 if (cm->use_highbitdepth) { |
2883 kf_err = vp9_highbd_get_y_sse(cpi->Source, get_frame_new_buffer(cm), | 2887 kf_err = vp9_highbd_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
2884 cm->bit_depth); | |
2885 } else { | 2888 } else { |
2886 kf_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 2889 kf_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
2887 } | 2890 } |
2888 #else | 2891 #else |
2889 kf_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 2892 kf_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
2890 #endif // CONFIG_VP9_HIGHBITDEPTH | 2893 #endif // CONFIG_VP9_HIGHBITDEPTH |
2891 | 2894 |
2892 // Prevent possible divide by zero error below for perfect KF | 2895 // Prevent possible divide by zero error below for perfect KF |
2893 kf_err += !kf_err; | 2896 kf_err += !kf_err; |
2894 | 2897 |
2895 // The key frame is not good enough or we can afford | 2898 // The key frame is not good enough or we can afford |
2896 // to make it better without undue risk of popping. | 2899 // to make it better without undue risk of popping. |
2897 if ((kf_err > high_err_target && | 2900 if ((kf_err > high_err_target && |
2898 rc->projected_frame_size <= frame_over_shoot_limit) || | 2901 rc->projected_frame_size <= frame_over_shoot_limit) || |
2899 (kf_err > low_err_target && | 2902 (kf_err > low_err_target && |
2900 rc->projected_frame_size <= frame_under_shoot_limit)) { | 2903 rc->projected_frame_size <= frame_under_shoot_limit)) { |
2901 // Lower q_high | 2904 // Lower q_high |
2902 q_high = q > q_low ? q - 1 : q_low; | 2905 q_high = q > q_low ? q - 1 : q_low; |
2903 | 2906 |
2904 // Adjust Q | 2907 // Adjust Q |
2905 q = (q * high_err_target) / kf_err; | 2908 q = (int)((q * high_err_target) / kf_err); |
2906 q = MIN(q, (q_high + q_low) >> 1); | 2909 q = MIN(q, (q_high + q_low) >> 1); |
2907 } else if (kf_err < low_err_target && | 2910 } else if (kf_err < low_err_target && |
2908 rc->projected_frame_size >= frame_under_shoot_limit) { | 2911 rc->projected_frame_size >= frame_under_shoot_limit) { |
2909 // The key frame is much better than the previous frame | 2912 // The key frame is much better than the previous frame |
2910 // Raise q_low | 2913 // Raise q_low |
2911 q_low = q < q_high ? q + 1 : q_high; | 2914 q_low = q < q_high ? q + 1 : q_high; |
2912 | 2915 |
2913 // Adjust Q | 2916 // Adjust Q |
2914 q = (q * low_err_target) / kf_err; | 2917 q = (int)((q * low_err_target) / kf_err); |
2915 q = MIN(q, (q_high + q_low + 1) >> 1); | 2918 q = MIN(q, (q_high + q_low + 1) >> 1); |
2916 } | 2919 } |
2917 | 2920 |
2918 // Clamp Q to upper and lower limits: | 2921 // Clamp Q to upper and lower limits: |
2919 q = clamp(q, q_low, q_high); | 2922 q = clamp(q, q_low, q_high); |
2920 | 2923 |
2921 loop = q != last_q; | 2924 loop = q != last_q; |
2922 } else if (recode_loop_test( | 2925 } else if (recode_loop_test( |
2923 cpi, frame_over_shoot_limit, frame_under_shoot_limit, | 2926 cpi, frame_over_shoot_limit, frame_under_shoot_limit, |
2924 q, MAX(q_high, top_index), bottom_index)) { | 2927 q, MAX(q_high, top_index), bottom_index)) { |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3120 unsigned int *frame_flags) { | 3123 unsigned int *frame_flags) { |
3121 VP9_COMMON *const cm = &cpi->common; | 3124 VP9_COMMON *const cm = &cpi->common; |
3122 const VP9EncoderConfig *const oxcf = &cpi->oxcf; | 3125 const VP9EncoderConfig *const oxcf = &cpi->oxcf; |
3123 struct segmentation *const seg = &cm->seg; | 3126 struct segmentation *const seg = &cm->seg; |
3124 TX_SIZE t; | 3127 TX_SIZE t; |
3125 | 3128 |
3126 set_ext_overrides(cpi); | 3129 set_ext_overrides(cpi); |
3127 | 3130 |
3128 vp9_clear_system_state(); | 3131 vp9_clear_system_state(); |
3129 | 3132 |
3130 // Enable or disable mode based tweaking of the zbin. | |
3131 // For 2 pass only used where GF/ARF prediction quality | |
3132 // is above a threshold. | |
3133 cpi->zbin_mode_boost = 0; | |
3134 cpi->zbin_mode_boost_enabled = 0; | |
3135 | |
3136 // Set the arf sign bias for this frame. | 3133 // Set the arf sign bias for this frame. |
3137 set_arf_sign_bias(cpi); | 3134 set_arf_sign_bias(cpi); |
3138 | 3135 |
3139 // Set default state for segment based loop filter update flags. | 3136 // Set default state for segment based loop filter update flags. |
3140 cm->lf.mode_ref_delta_update = 0; | 3137 cm->lf.mode_ref_delta_update = 0; |
3141 | 3138 |
3142 if (cpi->oxcf.pass == 2 && | 3139 if (cpi->oxcf.pass == 2 && |
3143 cpi->sf.adaptive_interp_filter_search) | 3140 cpi->sf.adaptive_interp_filter_search) |
3144 cpi->sf.interp_filter_search_mask = | 3141 cpi->sf.interp_filter_search_mask = |
3145 setup_interp_filter_search_mask(cpi); | 3142 setup_interp_filter_search_mask(cpi); |
3146 | 3143 |
3147 // Set various flags etc to special state if it is a key frame. | 3144 // Set various flags etc to special state if it is a key frame. |
3148 if (frame_is_intra_only(cm)) { | 3145 if (frame_is_intra_only(cm)) { |
3149 // Reset the loop filter deltas and segmentation map. | 3146 // Reset the loop filter deltas and segmentation map. |
3150 vp9_reset_segment_features(&cm->seg); | 3147 vp9_reset_segment_features(&cm->seg); |
3151 | 3148 |
3152 // If segmentation is enabled force a map update for key frames. | 3149 // If segmentation is enabled force a map update for key frames. |
3153 if (seg->enabled) { | 3150 if (seg->enabled) { |
3154 seg->update_map = 1; | 3151 seg->update_map = 1; |
3155 seg->update_data = 1; | 3152 seg->update_data = 1; |
3156 } | 3153 } |
3157 | 3154 |
3158 // The alternate reference frame cannot be active for a key frame. | 3155 // The alternate reference frame cannot be active for a key frame. |
3159 cpi->rc.source_alt_ref_active = 0; | 3156 cpi->rc.source_alt_ref_active = 0; |
3160 | 3157 |
3161 cm->error_resilient_mode = oxcf->error_resilient_mode; | 3158 cm->error_resilient_mode = oxcf->error_resilient_mode; |
| 3159 cm->frame_parallel_decoding_mode = oxcf->frame_parallel_decoding_mode; |
3162 | 3160 |
3163 // By default, encoder assumes decoder can use prev_mi. | 3161 // By default, encoder assumes decoder can use prev_mi. |
3164 if (cm->error_resilient_mode) { | 3162 if (cm->error_resilient_mode) { |
3165 cm->frame_parallel_decoding_mode = 1; | 3163 cm->frame_parallel_decoding_mode = 1; |
3166 cm->reset_frame_context = 0; | 3164 cm->reset_frame_context = 0; |
3167 cm->refresh_frame_context = 0; | 3165 cm->refresh_frame_context = 0; |
3168 } else if (cm->intra_only) { | 3166 } else if (cm->intra_only) { |
3169 cm->frame_parallel_decoding_mode = oxcf->frame_parallel_decoding_mode; | |
3170 // Only reset the current context. | 3167 // Only reset the current context. |
3171 cm->reset_frame_context = 2; | 3168 cm->reset_frame_context = 2; |
3172 } | 3169 } |
3173 } | 3170 } |
3174 if (is_two_pass_svc(cpi) && cm->error_resilient_mode == 0) { | 3171 if (is_two_pass_svc(cpi) && cm->error_resilient_mode == 0) { |
3175 // Use the last frame context for the empty frame. | 3172 // Use the last frame context for the empty frame. |
3176 cm->frame_context_idx = | 3173 cm->frame_context_idx = |
3177 (cpi->svc.encode_empty_frame_state == ENCODING) ? FRAME_CONTEXTS - 1 : | 3174 (cpi->svc.encode_empty_frame_state == ENCODING) ? FRAME_CONTEXTS - 1 : |
3178 cpi->svc.spatial_layer_id * cpi->svc.number_temporal_layers + | 3175 cpi->svc.spatial_layer_id * cpi->svc.number_temporal_layers + |
3179 cpi->svc.temporal_layer_id; | 3176 cpi->svc.temporal_layer_id; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3238 #endif | 3235 #endif |
3239 | 3236 |
3240 | 3237 |
3241 // Special case code to reduce pulsing when key frames are forced at a | 3238 // Special case code to reduce pulsing when key frames are forced at a |
3242 // fixed interval. Note the reconstruction error if it is the frame before | 3239 // fixed interval. Note the reconstruction error if it is the frame before |
3243 // the force key frame | 3240 // the force key frame |
3244 if (cpi->rc.next_key_frame_forced && cpi->rc.frames_to_key == 1) { | 3241 if (cpi->rc.next_key_frame_forced && cpi->rc.frames_to_key == 1) { |
3245 #if CONFIG_VP9_HIGHBITDEPTH | 3242 #if CONFIG_VP9_HIGHBITDEPTH |
3246 if (cm->use_highbitdepth) { | 3243 if (cm->use_highbitdepth) { |
3247 cpi->ambient_err = vp9_highbd_get_y_sse(cpi->Source, | 3244 cpi->ambient_err = vp9_highbd_get_y_sse(cpi->Source, |
3248 get_frame_new_buffer(cm), | 3245 get_frame_new_buffer(cm)); |
3249 cm->bit_depth); | |
3250 } else { | 3246 } else { |
3251 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 3247 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
3252 } | 3248 } |
3253 #else | 3249 #else |
3254 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 3250 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
3255 #endif // CONFIG_VP9_HIGHBITDEPTH | 3251 #endif // CONFIG_VP9_HIGHBITDEPTH |
3256 } | 3252 } |
3257 | 3253 |
3258 // If the encoder forced a KEY_FRAME decision | 3254 // If the encoder forced a KEY_FRAME decision |
3259 if (cm->frame_type == KEY_FRAME) | 3255 if (cm->frame_type == KEY_FRAME) |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3390 alloc_util_frame_buffers(cpi); | 3386 alloc_util_frame_buffers(cpi); |
3391 | 3387 |
3392 init_motion_estimation(cpi); // TODO(agrange) This can be removed. | 3388 init_motion_estimation(cpi); // TODO(agrange) This can be removed. |
3393 | 3389 |
3394 cpi->initial_width = cm->width; | 3390 cpi->initial_width = cm->width; |
3395 cpi->initial_height = cm->height; | 3391 cpi->initial_height = cm->height; |
3396 cpi->initial_mbs = cm->MBs; | 3392 cpi->initial_mbs = cm->MBs; |
3397 } | 3393 } |
3398 } | 3394 } |
3399 | 3395 |
| 3396 #if CONFIG_VP9_TEMPORAL_DENOISING |
| 3397 static void setup_denoiser_buffer(VP9_COMP *cpi) { |
| 3398 VP9_COMMON *const cm = &cpi->common; |
| 3399 if (cpi->oxcf.noise_sensitivity > 0 && |
| 3400 !cpi->denoiser.frame_buffer_initialized) { |
| 3401 vp9_denoiser_alloc(&(cpi->denoiser), cm->width, cm->height, |
| 3402 cm->subsampling_x, cm->subsampling_y, |
| 3403 #if CONFIG_VP9_HIGHBITDEPTH |
| 3404 cm->use_highbitdepth, |
| 3405 #endif |
| 3406 VP9_ENC_BORDER_IN_PIXELS); |
| 3407 } |
| 3408 } |
| 3409 #endif |
3400 | 3410 |
3401 int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags, | 3411 int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags, |
3402 YV12_BUFFER_CONFIG *sd, int64_t time_stamp, | 3412 YV12_BUFFER_CONFIG *sd, int64_t time_stamp, |
3403 int64_t end_time) { | 3413 int64_t end_time) { |
3404 VP9_COMMON *cm = &cpi->common; | 3414 VP9_COMMON *cm = &cpi->common; |
3405 struct vpx_usec_timer timer; | 3415 struct vpx_usec_timer timer; |
3406 int res = 0; | 3416 int res = 0; |
3407 const int subsampling_x = sd->subsampling_x; | 3417 const int subsampling_x = sd->subsampling_x; |
3408 const int subsampling_y = sd->subsampling_y; | 3418 const int subsampling_y = sd->subsampling_y; |
3409 #if CONFIG_VP9_HIGHBITDEPTH | 3419 #if CONFIG_VP9_HIGHBITDEPTH |
3410 const int use_highbitdepth = sd->flags & YV12_FLAG_HIGHBITDEPTH; | 3420 const int use_highbitdepth = sd->flags & YV12_FLAG_HIGHBITDEPTH; |
3411 check_initial_width(cpi, use_highbitdepth, subsampling_x, subsampling_y); | 3421 check_initial_width(cpi, use_highbitdepth, subsampling_x, subsampling_y); |
3412 #else | 3422 #else |
3413 check_initial_width(cpi, subsampling_x, subsampling_y); | 3423 check_initial_width(cpi, subsampling_x, subsampling_y); |
3414 #endif // CONFIG_VP9_HIGHBITDEPTH | 3424 #endif // CONFIG_VP9_HIGHBITDEPTH |
3415 | 3425 |
| 3426 #if CONFIG_VP9_TEMPORAL_DENOISING |
| 3427 setup_denoiser_buffer(cpi); |
| 3428 #endif |
3416 vpx_usec_timer_start(&timer); | 3429 vpx_usec_timer_start(&timer); |
3417 | 3430 |
3418 if (vp9_lookahead_push(cpi->lookahead, sd, time_stamp, end_time, frame_flags)) | 3431 if (vp9_lookahead_push(cpi->lookahead, sd, time_stamp, end_time, frame_flags)) |
3419 res = -1; | 3432 res = -1; |
3420 vpx_usec_timer_mark(&timer); | 3433 vpx_usec_timer_mark(&timer); |
3421 cpi->time_receive_data += vpx_usec_timer_elapsed(&timer); | 3434 cpi->time_receive_data += vpx_usec_timer_elapsed(&timer); |
3422 | 3435 |
3423 if ((cm->profile == PROFILE_0 || cm->profile == PROFILE_2) && | 3436 if ((cm->profile == PROFILE_0 || cm->profile == PROFILE_2) && |
3424 (subsampling_x != 1 || subsampling_y != 1)) { | 3437 (subsampling_x != 1 || subsampling_y != 1)) { |
3425 vpx_internal_error(&cm->error, VPX_CODEC_INVALID_PARAM, | 3438 vpx_internal_error(&cm->error, VPX_CODEC_INVALID_PARAM, |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3819 | 3832 |
3820 cpi->totalp += psnr2.psnr[0]; | 3833 cpi->totalp += psnr2.psnr[0]; |
3821 cpi->totalp_y += psnr2.psnr[1]; | 3834 cpi->totalp_y += psnr2.psnr[1]; |
3822 cpi->totalp_u += psnr2.psnr[2]; | 3835 cpi->totalp_u += psnr2.psnr[2]; |
3823 cpi->totalp_v += psnr2.psnr[3]; | 3836 cpi->totalp_v += psnr2.psnr[3]; |
3824 cpi->totalp_sq_error += psnr2.sse[0]; | 3837 cpi->totalp_sq_error += psnr2.sse[0]; |
3825 cpi->totalp_samples += psnr2.samples[0]; | 3838 cpi->totalp_samples += psnr2.samples[0]; |
3826 | 3839 |
3827 #if CONFIG_VP9_HIGHBITDEPTH | 3840 #if CONFIG_VP9_HIGHBITDEPTH |
3828 if (cm->use_highbitdepth) { | 3841 if (cm->use_highbitdepth) { |
3829 frame_ssim2 = vp9_highbd_calc_ssim(orig, recon, &weight, xd->bd); | 3842 frame_ssim2 = vp9_highbd_calc_ssim(orig, recon, &weight, |
| 3843 (int)cm->bit_depth); |
3830 } else { | 3844 } else { |
3831 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); | 3845 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); |
3832 } | 3846 } |
3833 #else | 3847 #else |
3834 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); | 3848 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); |
3835 #endif // CONFIG_VP9_HIGHBITDEPTH | 3849 #endif // CONFIG_VP9_HIGHBITDEPTH |
3836 | 3850 |
3837 cpi->summed_quality += frame_ssim2 * weight; | 3851 cpi->summed_quality += frame_ssim2 * weight; |
3838 cpi->summed_weights += weight; | 3852 cpi->summed_weights += weight; |
3839 | 3853 |
3840 #if CONFIG_VP9_HIGHBITDEPTH | 3854 #if CONFIG_VP9_HIGHBITDEPTH |
3841 if (cm->use_highbitdepth) { | 3855 if (cm->use_highbitdepth) { |
3842 frame_ssim2 = vp9_highbd_calc_ssim( | 3856 frame_ssim2 = vp9_highbd_calc_ssim( |
3843 orig, &cm->post_proc_buffer, &weight, xd->bd); | 3857 orig, &cm->post_proc_buffer, &weight, (int)cm->bit_depth); |
3844 } else { | 3858 } else { |
3845 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); | 3859 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); |
3846 } | 3860 } |
3847 #else | 3861 #else |
3848 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); | 3862 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); |
3849 #endif // CONFIG_VP9_HIGHBITDEPTH | 3863 #endif // CONFIG_VP9_HIGHBITDEPTH |
3850 | 3864 |
3851 cpi->summedp_quality += frame_ssim2 * weight; | 3865 cpi->summedp_quality += frame_ssim2 * weight; |
3852 cpi->summedp_weights += weight; | 3866 cpi->summedp_weights += weight; |
3853 #if 0 | 3867 #if 0 |
3854 { | 3868 { |
3855 FILE *f = fopen("q_used.stt", "a"); | 3869 FILE *f = fopen("q_used.stt", "a"); |
3856 fprintf(f, "%5d : Y%f7.3:U%f7.3:V%f7.3:F%f7.3:S%7.3f\n", | 3870 fprintf(f, "%5d : Y%f7.3:U%f7.3:V%f7.3:F%f7.3:S%7.3f\n", |
3857 cpi->common.current_video_frame, y2, u2, v2, | 3871 cpi->common.current_video_frame, y2, u2, v2, |
3858 frame_psnr2, frame_ssim2); | 3872 frame_psnr2, frame_ssim2); |
3859 fclose(f); | 3873 fclose(f); |
3860 } | 3874 } |
3861 #endif | 3875 #endif |
3862 } | 3876 } |
3863 } | 3877 } |
3864 | 3878 |
3865 | 3879 |
3866 if (cpi->b_calculate_ssimg) { | 3880 if (cpi->b_calculate_ssimg) { |
3867 double y, u, v, frame_all; | 3881 double y, u, v, frame_all; |
3868 #if CONFIG_VP9_HIGHBITDEPTH | 3882 #if CONFIG_VP9_HIGHBITDEPTH |
3869 if (cm->use_highbitdepth) { | 3883 if (cm->use_highbitdepth) { |
3870 frame_all = vp9_highbd_calc_ssimg(cpi->Source, cm->frame_to_show, &y, | 3884 frame_all = vp9_highbd_calc_ssimg(cpi->Source, cm->frame_to_show, &y, |
3871 &u, &v, xd->bd); | 3885 &u, &v, (int)cm->bit_depth); |
3872 } else { | 3886 } else { |
3873 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, | 3887 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, |
3874 &v); | 3888 &v); |
3875 } | 3889 } |
3876 #else | 3890 #else |
3877 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, &v); | 3891 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, &v); |
3878 #endif // CONFIG_VP9_HIGHBITDEPTH | 3892 #endif // CONFIG_VP9_HIGHBITDEPTH |
3879 cpi->total_ssimg_y += y; | 3893 cpi->total_ssimg_y += y; |
3880 cpi->total_ssimg_u += u; | 3894 cpi->total_ssimg_u += u; |
3881 cpi->total_ssimg_v += v; | 3895 cpi->total_ssimg_v += v; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3979 | 3993 |
3980 int vp9_set_size_literal(VP9_COMP *cpi, unsigned int width, | 3994 int vp9_set_size_literal(VP9_COMP *cpi, unsigned int width, |
3981 unsigned int height) { | 3995 unsigned int height) { |
3982 VP9_COMMON *cm = &cpi->common; | 3996 VP9_COMMON *cm = &cpi->common; |
3983 #if CONFIG_VP9_HIGHBITDEPTH | 3997 #if CONFIG_VP9_HIGHBITDEPTH |
3984 check_initial_width(cpi, 1, 1, cm->use_highbitdepth); | 3998 check_initial_width(cpi, 1, 1, cm->use_highbitdepth); |
3985 #else | 3999 #else |
3986 check_initial_width(cpi, 1, 1); | 4000 check_initial_width(cpi, 1, 1); |
3987 #endif // CONFIG_VP9_HIGHBITDEPTH | 4001 #endif // CONFIG_VP9_HIGHBITDEPTH |
3988 | 4002 |
| 4003 #if CONFIG_VP9_TEMPORAL_DENOISING |
| 4004 setup_denoiser_buffer(cpi); |
| 4005 #endif |
| 4006 |
3989 if (width) { | 4007 if (width) { |
3990 cm->width = width; | 4008 cm->width = width; |
3991 if (cm->width > cpi->initial_width) { | 4009 if (cm->width > cpi->initial_width) { |
3992 cm->width = cpi->initial_width; | 4010 cm->width = cpi->initial_width; |
3993 printf("Warning: Desired width too large, changed to %d\n", cm->width); | 4011 printf("Warning: Desired width too large, changed to %d\n", cm->width); |
3994 } | 4012 } |
3995 } | 4013 } |
3996 | 4014 |
3997 if (height) { | 4015 if (height) { |
3998 cm->height = height; | 4016 cm->height = height; |
3999 if (cm->height > cpi->initial_height) { | 4017 if (cm->height > cpi->initial_height) { |
4000 cm->height = cpi->initial_height; | 4018 cm->height = cpi->initial_height; |
4001 printf("Warning: Desired height too large, changed to %d\n", cm->height); | 4019 printf("Warning: Desired height too large, changed to %d\n", cm->height); |
4002 } | 4020 } |
4003 } | 4021 } |
4004 assert(cm->width <= cpi->initial_width); | 4022 assert(cm->width <= cpi->initial_width); |
4005 assert(cm->height <= cpi->initial_height); | 4023 assert(cm->height <= cpi->initial_height); |
4006 | 4024 |
4007 update_frame_size(cpi); | 4025 update_frame_size(cpi); |
4008 | 4026 |
4009 return 0; | 4027 return 0; |
4010 } | 4028 } |
4011 | 4029 |
4012 void vp9_set_svc(VP9_COMP *cpi, int use_svc) { | 4030 void vp9_set_svc(VP9_COMP *cpi, int use_svc) { |
4013 cpi->use_svc = use_svc; | 4031 cpi->use_svc = use_svc; |
4014 return; | 4032 return; |
4015 } | 4033 } |
4016 | 4034 |
4017 int vp9_get_y_sse(const YV12_BUFFER_CONFIG *a, const YV12_BUFFER_CONFIG *b) { | 4035 int64_t vp9_get_y_sse(const YV12_BUFFER_CONFIG *a, |
| 4036 const YV12_BUFFER_CONFIG *b) { |
4018 assert(a->y_crop_width == b->y_crop_width); | 4037 assert(a->y_crop_width == b->y_crop_width); |
4019 assert(a->y_crop_height == b->y_crop_height); | 4038 assert(a->y_crop_height == b->y_crop_height); |
4020 | 4039 |
4021 return (int)get_sse(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, | 4040 return get_sse(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, |
4022 a->y_crop_width, a->y_crop_height); | 4041 a->y_crop_width, a->y_crop_height); |
4023 } | 4042 } |
4024 | 4043 |
4025 #if CONFIG_VP9_HIGHBITDEPTH | 4044 #if CONFIG_VP9_HIGHBITDEPTH |
4026 int vp9_highbd_get_y_sse(const YV12_BUFFER_CONFIG *a, | 4045 int64_t vp9_highbd_get_y_sse(const YV12_BUFFER_CONFIG *a, |
4027 const YV12_BUFFER_CONFIG *b, | 4046 const YV12_BUFFER_CONFIG *b) { |
4028 vpx_bit_depth_t bit_depth) { | |
4029 unsigned int sse; | |
4030 int sum; | |
4031 assert(a->y_crop_width == b->y_crop_width); | 4047 assert(a->y_crop_width == b->y_crop_width); |
4032 assert(a->y_crop_height == b->y_crop_height); | 4048 assert(a->y_crop_height == b->y_crop_height); |
4033 assert((a->flags & YV12_FLAG_HIGHBITDEPTH) != 0); | 4049 assert((a->flags & YV12_FLAG_HIGHBITDEPTH) != 0); |
4034 assert((b->flags & YV12_FLAG_HIGHBITDEPTH) != 0); | 4050 assert((b->flags & YV12_FLAG_HIGHBITDEPTH) != 0); |
4035 switch (bit_depth) { | 4051 |
4036 case VPX_BITS_8: | 4052 return highbd_get_sse(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, |
4037 highbd_variance(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, | 4053 a->y_crop_width, a->y_crop_height); |
4038 a->y_crop_width, a->y_crop_height, &sse, &sum); | |
4039 return (int) sse; | |
4040 case VPX_BITS_10: | |
4041 highbd_10_variance(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, | |
4042 a->y_crop_width, a->y_crop_height, &sse, &sum); | |
4043 return (int) sse; | |
4044 case VPX_BITS_12: | |
4045 highbd_12_variance(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, | |
4046 a->y_crop_width, a->y_crop_height, &sse, &sum); | |
4047 return (int) sse; | |
4048 default: | |
4049 assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12"); | |
4050 return -1; | |
4051 } | |
4052 } | 4054 } |
4053 #endif // CONFIG_VP9_HIGHBITDEPTH | 4055 #endif // CONFIG_VP9_HIGHBITDEPTH |
4054 | 4056 |
4055 int vp9_get_quantizer(VP9_COMP *cpi) { | 4057 int vp9_get_quantizer(VP9_COMP *cpi) { |
4056 return cpi->common.base_qindex; | 4058 return cpi->common.base_qindex; |
4057 } | 4059 } |
4058 | 4060 |
4059 void vp9_apply_encoding_flags(VP9_COMP *cpi, vpx_enc_frame_flags_t flags) { | 4061 void vp9_apply_encoding_flags(VP9_COMP *cpi, vpx_enc_frame_flags_t flags) { |
4060 if (flags & (VP8_EFLAG_NO_REF_LAST | VP8_EFLAG_NO_REF_GF | | 4062 if (flags & (VP8_EFLAG_NO_REF_LAST | VP8_EFLAG_NO_REF_GF | |
4061 VP8_EFLAG_NO_REF_ARF)) { | 4063 VP8_EFLAG_NO_REF_ARF)) { |
(...skipping 25 matching lines...) Expand all Loading... |
4087 if (flags & VP8_EFLAG_NO_UPD_ARF) | 4089 if (flags & VP8_EFLAG_NO_UPD_ARF) |
4088 upd ^= VP9_ALT_FLAG; | 4090 upd ^= VP9_ALT_FLAG; |
4089 | 4091 |
4090 vp9_update_reference(cpi, upd); | 4092 vp9_update_reference(cpi, upd); |
4091 } | 4093 } |
4092 | 4094 |
4093 if (flags & VP8_EFLAG_NO_UPD_ENTROPY) { | 4095 if (flags & VP8_EFLAG_NO_UPD_ENTROPY) { |
4094 vp9_update_entropy(cpi, 0); | 4096 vp9_update_entropy(cpi, 0); |
4095 } | 4097 } |
4096 } | 4098 } |
OLD | NEW |