Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_svc_layercontext.c

Issue 1162573005: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2014 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
11 #include <math.h> 11 #include <math.h>
12 12
13 #include "vp9/encoder/vp9_encoder.h" 13 #include "vp9/encoder/vp9_encoder.h"
14 #include "vp9/encoder/vp9_svc_layercontext.h" 14 #include "vp9/encoder/vp9_svc_layercontext.h"
15 #include "vp9/encoder/vp9_extend.h" 15 #include "vp9/encoder/vp9_extend.h"
16 16
17 #define SMALL_FRAME_FB_IDX 7 17 #define SMALL_FRAME_FB_IDX 7
18 #define SMALL_FRAME_WIDTH 16
19 #define SMALL_FRAME_HEIGHT 16
18 20
19 void vp9_init_layer_context(VP9_COMP *const cpi) { 21 void vp9_init_layer_context(VP9_COMP *const cpi) {
20 SVC *const svc = &cpi->svc; 22 SVC *const svc = &cpi->svc;
21 const VP9EncoderConfig *const oxcf = &cpi->oxcf; 23 const VP9EncoderConfig *const oxcf = &cpi->oxcf;
22 int layer; 24 int layer;
23 int layer_end; 25 int layer_end;
24 int alt_ref_idx = svc->number_spatial_layers; 26 int alt_ref_idx = svc->number_spatial_layers;
25 27
26 svc->spatial_layer_id = 0; 28 svc->spatial_layer_id = 0;
27 svc->temporal_layer_id = 0; 29 svc->temporal_layer_id = 0;
28 30
29 if (svc->number_temporal_layers > 1 && cpi->oxcf.rc_mode == VPX_CBR) { 31 if (svc->number_temporal_layers > 1 && cpi->oxcf.rc_mode == VPX_CBR) {
30 layer_end = svc->number_temporal_layers; 32 layer_end = svc->number_temporal_layers;
31 } else { 33 } else {
32 layer_end = svc->number_spatial_layers; 34 layer_end = svc->number_spatial_layers;
33 35
34 if (cpi->oxcf.error_resilient_mode == 0 && cpi->oxcf.pass == 2) { 36 if (cpi->oxcf.error_resilient_mode == 0 && cpi->oxcf.pass == 2) {
35 if (vp9_realloc_frame_buffer(&cpi->svc.empty_frame.img, 37 if (vp9_realloc_frame_buffer(&cpi->svc.empty_frame.img,
36 cpi->common.width, cpi->common.height, 38 SMALL_FRAME_WIDTH, SMALL_FRAME_HEIGHT,
37 cpi->common.subsampling_x, 39 cpi->common.subsampling_x,
38 cpi->common.subsampling_y, 40 cpi->common.subsampling_y,
39 #if CONFIG_VP9_HIGHBITDEPTH 41 #if CONFIG_VP9_HIGHBITDEPTH
40 cpi->common.use_highbitdepth, 42 cpi->common.use_highbitdepth,
41 #endif 43 #endif
42 VP9_ENC_BORDER_IN_PIXELS, 44 VP9_ENC_BORDER_IN_PIXELS,
43 cpi->common.byte_alignment, 45 cpi->common.byte_alignment,
44 NULL, NULL, NULL)) 46 NULL, NULL, NULL))
45 vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR, 47 vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,
46 "Failed to allocate empty frame for multiple frame " 48 "Failed to allocate empty frame for multiple frame "
47 "contexts"); 49 "contexts");
48 50
49 memset(cpi->svc.empty_frame.img.buffer_alloc, 0x80, 51 memset(cpi->svc.empty_frame.img.buffer_alloc, 0x80,
50 cpi->svc.empty_frame.img.buffer_alloc_sz); 52 cpi->svc.empty_frame.img.buffer_alloc_sz);
51 cpi->svc.empty_frame_width = cpi->common.width;
52 cpi->svc.empty_frame_height = cpi->common.height;
53 } 53 }
54 } 54 }
55 55
56 for (layer = 0; layer < layer_end; ++layer) { 56 for (layer = 0; layer < layer_end; ++layer) {
57 LAYER_CONTEXT *const lc = &svc->layer_context[layer]; 57 LAYER_CONTEXT *const lc = &svc->layer_context[layer];
58 RATE_CONTROL *const lrc = &lc->rc; 58 RATE_CONTROL *const lrc = &lc->rc;
59 int i; 59 int i;
60 lc->current_video_frame_in_layer = 0; 60 lc->current_video_frame_in_layer = 0;
61 lc->layer_size = 0; 61 lc->layer_size = 0;
62 lc->frames_from_key_frame = 0; 62 lc->frames_from_key_frame = 0;
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 if (buf != NULL) { 355 if (buf != NULL) {
356 cpi->svc.empty_frame.ts_start = buf->ts_start; 356 cpi->svc.empty_frame.ts_start = buf->ts_start;
357 cpi->svc.empty_frame.ts_end = buf->ts_end; 357 cpi->svc.empty_frame.ts_end = buf->ts_end;
358 cpi->svc.encode_empty_frame_state = ENCODING; 358 cpi->svc.encode_empty_frame_state = ENCODING;
359 cpi->common.show_frame = 0; 359 cpi->common.show_frame = 0;
360 cpi->ref_frame_flags = 0; 360 cpi->ref_frame_flags = 0;
361 cpi->common.frame_type = INTER_FRAME; 361 cpi->common.frame_type = INTER_FRAME;
362 cpi->lst_fb_idx = 362 cpi->lst_fb_idx =
363 cpi->gld_fb_idx = cpi->alt_fb_idx = SMALL_FRAME_FB_IDX; 363 cpi->gld_fb_idx = cpi->alt_fb_idx = SMALL_FRAME_FB_IDX;
364 364
365 // Gradually make the empty frame smaller to save bits. Make it half of 365 if (cpi->svc.encode_intra_empty_frame != 0)
366 // its previous size because of the scaling factor restriction. 366 cpi->common.intra_only = 1;
367 cpi->svc.empty_frame_width >>= 1;
368 cpi->svc.empty_frame_width = (cpi->svc.empty_frame_width + 1) & ~1;
369 if (cpi->svc.empty_frame_width < 16)
370 cpi->svc.empty_frame_width = 16;
371 367
372 cpi->svc.empty_frame_height >>= 1; 368 width = SMALL_FRAME_WIDTH;
373 cpi->svc.empty_frame_height = (cpi->svc.empty_frame_height + 1) & ~1; 369 height = SMALL_FRAME_HEIGHT;
374 if (cpi->svc.empty_frame_height < 16)
375 cpi->svc.empty_frame_height = 16;
376
377 width = cpi->svc.empty_frame_width;
378 height = cpi->svc.empty_frame_height;
379 } 370 }
380 } 371 }
381 } 372 }
382 373
383 cpi->oxcf.worst_allowed_q = vp9_quantizer_to_qindex(lc->max_q); 374 cpi->oxcf.worst_allowed_q = vp9_quantizer_to_qindex(lc->max_q);
384 cpi->oxcf.best_allowed_q = vp9_quantizer_to_qindex(lc->min_q); 375 cpi->oxcf.best_allowed_q = vp9_quantizer_to_qindex(lc->min_q);
385 376
386 vp9_change_config(cpi, &cpi->oxcf); 377 vp9_change_config(cpi, &cpi->oxcf);
387 378
388 if (vp9_set_size_literal(cpi, width, height) != 0) 379 if (vp9_set_size_literal(cpi, width, height) != 0)
(...skipping 17 matching lines...) Expand all
406 // Only remove the buffer when pop the highest layer. 397 // Only remove the buffer when pop the highest layer.
407 if (cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1) { 398 if (cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1) {
408 vp9_lookahead_pop(ctx, drain); 399 vp9_lookahead_pop(ctx, drain);
409 } 400 }
410 } 401 }
411 } 402 }
412 403
413 return buf; 404 return buf;
414 } 405 }
415 #endif 406 #endif
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_svc_layercontext.h ('k') | source/libvpx/vp9/encoder/vp9_temporal_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698