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

Side by Side Diff: source/libvpx/test/svc_test.cc

Issue 592203002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « source/libvpx/test/partial_idct_test.cc ('k') | source/libvpx/test/test.mk » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 virtual void TearDown() { 68 virtual void TearDown() {
69 ReleaseEncoder(); 69 ReleaseEncoder();
70 delete(decoder_); 70 delete(decoder_);
71 } 71 }
72 72
73 void InitializeEncoder() { 73 void InitializeEncoder() {
74 const vpx_codec_err_t res = 74 const vpx_codec_err_t res =
75 vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 75 vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
76 EXPECT_EQ(VPX_CODEC_OK, res); 76 EXPECT_EQ(VPX_CODEC_OK, res);
77 vpx_codec_control(&codec_, VP8E_SET_CPUUSED, 4); // Make the test faster
77 codec_initialized_ = true; 78 codec_initialized_ = true;
78 } 79 }
79 80
80 void ReleaseEncoder() { 81 void ReleaseEncoder() {
81 vpx_svc_release(&svc_); 82 vpx_svc_release(&svc_);
82 if (codec_initialized_) vpx_codec_destroy(&codec_); 83 if (codec_initialized_) vpx_codec_destroy(&codec_);
83 codec_initialized_ = false; 84 codec_initialized_ = false;
84 } 85 }
85 86
87 void GetStatsData(std::string *const stats_buf) {
88 vpx_codec_iter_t iter = NULL;
89 const vpx_codec_cx_pkt_t *cx_pkt;
90
91 while ((cx_pkt = vpx_codec_get_cx_data(&codec_, &iter)) != NULL) {
92 if (cx_pkt->kind == VPX_CODEC_STATS_PKT) {
93 EXPECT_GT(cx_pkt->data.twopass_stats.sz, 0U);
94 ASSERT_TRUE(cx_pkt->data.twopass_stats.buf != NULL);
95 stats_buf->append(static_cast<char*>(cx_pkt->data.twopass_stats.buf),
96 cx_pkt->data.twopass_stats.sz);
97 }
98 }
99 }
100
86 void Pass1EncodeNFrames(const int n, const int layers, 101 void Pass1EncodeNFrames(const int n, const int layers,
87 std::string *const stats_buf) { 102 std::string *const stats_buf) {
88 vpx_codec_err_t res; 103 vpx_codec_err_t res;
89 size_t stats_size = 0;
90 const char *stats_data = NULL;
91 104
92 ASSERT_GT(n, 0); 105 ASSERT_GT(n, 0);
93 ASSERT_GT(layers, 0); 106 ASSERT_GT(layers, 0);
94 svc_.spatial_layers = layers; 107 svc_.spatial_layers = layers;
95 codec_enc_.g_pass = VPX_RC_FIRST_PASS; 108 codec_enc_.g_pass = VPX_RC_FIRST_PASS;
96 InitializeEncoder(); 109 InitializeEncoder();
97 110
98 libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight, 111 libvpx_test::I420VideoSource video(test_file_name_, kWidth, kHeight,
99 codec_enc_.g_timebase.den, 112 codec_enc_.g_timebase.den,
100 codec_enc_.g_timebase.num, 0, 30); 113 codec_enc_.g_timebase.num, 0, 30);
101 video.Begin(); 114 video.Begin();
102 115
103 for (int i = 0; i < n; ++i) { 116 for (int i = 0; i < n; ++i) {
104 res = vpx_svc_encode(&svc_, &codec_, video.img(), video.pts(), 117 res = vpx_svc_encode(&svc_, &codec_, video.img(), video.pts(),
105 video.duration(), VPX_DL_GOOD_QUALITY); 118 video.duration(), VPX_DL_GOOD_QUALITY);
106 ASSERT_EQ(VPX_CODEC_OK, res); 119 ASSERT_EQ(VPX_CODEC_OK, res);
107 stats_size = vpx_svc_get_rc_stats_buffer_size(&svc_); 120 GetStatsData(stats_buf);
108 EXPECT_GT(stats_size, 0U);
109 stats_data = vpx_svc_get_rc_stats_buffer(&svc_);
110 ASSERT_TRUE(stats_data != NULL);
111 stats_buf->append(stats_data, stats_size);
112 video.Next(); 121 video.Next();
113 } 122 }
114 123
115 // Flush encoder and test EOS packet. 124 // Flush encoder and test EOS packet.
116 res = vpx_svc_encode(&svc_, &codec_, NULL, video.pts(), 125 res = vpx_svc_encode(&svc_, &codec_, NULL, video.pts(),
117 video.duration(), VPX_DL_GOOD_QUALITY); 126 video.duration(), VPX_DL_GOOD_QUALITY);
118 stats_size = vpx_svc_get_rc_stats_buffer_size(&svc_); 127 ASSERT_EQ(VPX_CODEC_OK, res);
119 EXPECT_GT(stats_size, 0U); 128 GetStatsData(stats_buf);
120 stats_data = vpx_svc_get_rc_stats_buffer(&svc_);
121 ASSERT_TRUE(stats_data != NULL);
122 stats_buf->append(stats_data, stats_size);
123 129
124 ReleaseEncoder(); 130 ReleaseEncoder();
125 } 131 }
126 132
127 void StoreFrames(const size_t max_frame_received, 133 void StoreFrames(const size_t max_frame_received,
128 struct vpx_fixed_buf *const outputs, 134 struct vpx_fixed_buf *const outputs,
129 size_t *const frame_received) { 135 size_t *const frame_received) {
130 size_t frame_size; 136 vpx_codec_iter_t iter = NULL;
131 while ((frame_size = vpx_svc_get_frame_size(&svc_)) > 0) { 137 const vpx_codec_cx_pkt_t *cx_pkt;
132 ASSERT_LT(*frame_received, max_frame_received);
133 138
134 if (*frame_received == 0) { 139 while ((cx_pkt = vpx_codec_get_cx_data(&codec_, &iter)) != NULL) {
135 EXPECT_EQ(1, vpx_svc_is_keyframe(&svc_)); 140 if (cx_pkt->kind == VPX_CODEC_CX_FRAME_PKT) {
141 const size_t frame_size = cx_pkt->data.frame.sz;
142
143 EXPECT_GT(frame_size, 0U);
144 ASSERT_TRUE(cx_pkt->data.frame.buf != NULL);
145 ASSERT_LT(*frame_received, max_frame_received);
146
147 if (*frame_received == 0)
148 EXPECT_EQ(1, !!(cx_pkt->data.frame.flags & VPX_FRAME_IS_KEY));
149
150 outputs[*frame_received].buf = malloc(frame_size + 16);
151 ASSERT_TRUE(outputs[*frame_received].buf != NULL);
152 memcpy(outputs[*frame_received].buf, cx_pkt->data.frame.buf,
153 frame_size);
154 outputs[*frame_received].sz = frame_size;
155 ++(*frame_received);
136 } 156 }
137
138 outputs[*frame_received].buf = malloc(frame_size + 16);
139 ASSERT_TRUE(outputs[*frame_received].buf != NULL);
140 memcpy(outputs[*frame_received].buf, vpx_svc_get_buffer(&svc_),
141 frame_size);
142 outputs[*frame_received].sz = frame_size;
143 ++(*frame_received);
144 } 157 }
145 } 158 }
146 159
147 void Pass2EncodeNFrames(std::string *const stats_buf, 160 void Pass2EncodeNFrames(std::string *const stats_buf,
148 const int n, const int layers, 161 const int n, const int layers,
149 struct vpx_fixed_buf *const outputs) { 162 struct vpx_fixed_buf *const outputs) {
150 vpx_codec_err_t res; 163 vpx_codec_err_t res;
151 size_t frame_received = 0; 164 size_t frame_received = 0;
152 165
153 ASSERT_TRUE(outputs != NULL); 166 ASSERT_TRUE(outputs != NULL);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_); 392 res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
380 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 393 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
381 394
382 svc_.spatial_layers = 0; // use default layers 395 svc_.spatial_layers = 0; // use default layers
383 InitializeEncoder(); 396 InitializeEncoder();
384 EXPECT_EQ(VPX_SS_DEFAULT_LAYERS, svc_.spatial_layers); 397 EXPECT_EQ(VPX_SS_DEFAULT_LAYERS, svc_.spatial_layers);
385 } 398 }
386 399
387 TEST_F(SvcTest, InitTwoLayers) { 400 TEST_F(SvcTest, InitTwoLayers) {
388 svc_.spatial_layers = 2; 401 svc_.spatial_layers = 2;
389 vpx_svc_set_scale_factors(&svc_, "4/16,16*16"); // invalid scale values
390 vpx_codec_err_t res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
391 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
392
393 vpx_svc_set_scale_factors(&svc_, "4/16,16/16"); // valid scale values
394 InitializeEncoder(); 402 InitializeEncoder();
395 } 403 }
396 404
397 TEST_F(SvcTest, InvalidOptions) { 405 TEST_F(SvcTest, InvalidOptions) {
398 vpx_codec_err_t res = vpx_svc_set_options(&svc_, NULL); 406 vpx_codec_err_t res = vpx_svc_set_options(&svc_, NULL);
399 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 407 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
400 408
401 res = vpx_svc_set_options(&svc_, "not-an-option=1"); 409 res = vpx_svc_set_options(&svc_, "not-an-option=1");
402 EXPECT_EQ(VPX_CODEC_OK, res); 410 EXPECT_EQ(VPX_CODEC_OK, res);
403 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 411 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
(...skipping 16 matching lines...) Expand all
420 } 428 }
421 429
422 TEST_F(SvcTest, SetScaleFactorsOption) { 430 TEST_F(SvcTest, SetScaleFactorsOption) {
423 svc_.spatial_layers = 2; 431 svc_.spatial_layers = 2;
424 vpx_codec_err_t res = 432 vpx_codec_err_t res =
425 vpx_svc_set_options(&svc_, "scale-factors=not-scale-factors"); 433 vpx_svc_set_options(&svc_, "scale-factors=not-scale-factors");
426 EXPECT_EQ(VPX_CODEC_OK, res); 434 EXPECT_EQ(VPX_CODEC_OK, res);
427 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 435 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
428 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 436 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
429 437
438 res = vpx_svc_set_options(&svc_, "scale-factors=1/3, 3*3");
439 EXPECT_EQ(VPX_CODEC_OK, res);
440 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
441 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
442
443 res = vpx_svc_set_options(&svc_, "scale-factors=1/3");
444 EXPECT_EQ(VPX_CODEC_OK, res);
445 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
446 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
447
430 res = vpx_svc_set_options(&svc_, "scale-factors=1/3,2/3"); 448 res = vpx_svc_set_options(&svc_, "scale-factors=1/3,2/3");
431 EXPECT_EQ(VPX_CODEC_OK, res); 449 EXPECT_EQ(VPX_CODEC_OK, res);
432 InitializeEncoder(); 450 InitializeEncoder();
433 } 451 }
434 452
435 TEST_F(SvcTest, SetQuantizersOption) { 453 TEST_F(SvcTest, SetQuantizersOption) {
436 svc_.spatial_layers = 2; 454 svc_.spatial_layers = 2;
437 vpx_codec_err_t res = vpx_svc_set_options(&svc_, "quantizers=not-quantizers"); 455 vpx_codec_err_t res = vpx_svc_set_options(&svc_, "max-quantizers=nothing");
438 EXPECT_EQ(VPX_CODEC_OK, res); 456 EXPECT_EQ(VPX_CODEC_OK, res);
439 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 457 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
440 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 458 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
441 459
442 vpx_svc_set_options(&svc_, "quantizers=40,45"); 460 res = vpx_svc_set_options(&svc_, "min-quantizers=nothing");
461 EXPECT_EQ(VPX_CODEC_OK, res);
462 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
463 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
464
465 res = vpx_svc_set_options(&svc_, "max-quantizers=40");
466 EXPECT_EQ(VPX_CODEC_OK, res);
467 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
468 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
469
470 res = vpx_svc_set_options(&svc_, "min-quantizers=40");
471 EXPECT_EQ(VPX_CODEC_OK, res);
472 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
473 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
474
475 res = vpx_svc_set_options(&svc_, "max-quantizers=30,30 min-quantizers=40,40");
476 EXPECT_EQ(VPX_CODEC_OK, res);
477 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
478 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
479
480 res = vpx_svc_set_options(&svc_, "max-quantizers=40,40 min-quantizers=30,30");
443 InitializeEncoder(); 481 InitializeEncoder();
444 } 482 }
445 483
446 TEST_F(SvcTest, SetAutoAltRefOption) { 484 TEST_F(SvcTest, SetAutoAltRefOption) {
447 svc_.spatial_layers = 5; 485 svc_.spatial_layers = 5;
448 vpx_codec_err_t res = vpx_svc_set_options(&svc_, "auto-alt-refs=none"); 486 vpx_codec_err_t res = vpx_svc_set_options(&svc_, "auto-alt-refs=none");
449 EXPECT_EQ(VPX_CODEC_OK, res); 487 EXPECT_EQ(VPX_CODEC_OK, res);
450 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 488 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
451 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 489 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
452 490
453 res = vpx_svc_set_options(&svc_, "auto-alt-refs=1,1,1,1,0"); 491 res = vpx_svc_set_options(&svc_, "auto-alt-refs=1,1,1,1,0");
454 EXPECT_EQ(VPX_CODEC_OK, res); 492 EXPECT_EQ(VPX_CODEC_OK, res);
455 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_); 493 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
456 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res); 494 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
457 495
458 vpx_svc_set_options(&svc_, "auto-alt-refs=0,1,1,1,0"); 496 vpx_svc_set_options(&svc_, "auto-alt-refs=0,1,1,1,0");
459 InitializeEncoder(); 497 InitializeEncoder();
460 } 498 }
461 499
462 TEST_F(SvcTest, SetQuantizers) {
463 vpx_codec_err_t res = vpx_svc_set_quantizers(NULL, "40,30");
464 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
465
466 res = vpx_svc_set_quantizers(&svc_, NULL);
467 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
468
469 svc_.spatial_layers = 2;
470 res = vpx_svc_set_quantizers(&svc_, "40");
471 EXPECT_EQ(VPX_CODEC_OK, res);
472 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
473 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
474
475 res = vpx_svc_set_quantizers(&svc_, "40,30");
476 EXPECT_EQ(VPX_CODEC_OK, res);
477 InitializeEncoder();
478 }
479
480 TEST_F(SvcTest, SetScaleFactors) {
481 vpx_codec_err_t res = vpx_svc_set_scale_factors(NULL, "4/16,16/16");
482 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
483
484 res = vpx_svc_set_scale_factors(&svc_, NULL);
485 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
486
487 svc_.spatial_layers = 2;
488 res = vpx_svc_set_scale_factors(&svc_, "4/16");
489 EXPECT_EQ(VPX_CODEC_OK, res);
490 res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
491 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
492
493 res = vpx_svc_set_scale_factors(&svc_, "4/16,16/16");
494 EXPECT_EQ(VPX_CODEC_OK, res);
495 InitializeEncoder();
496 }
497
498 // Test that decoder can handle an SVC frame as the first frame in a sequence. 500 // Test that decoder can handle an SVC frame as the first frame in a sequence.
499 TEST_F(SvcTest, OnePassEncodeOneFrame) { 501 TEST_F(SvcTest, OnePassEncodeOneFrame) {
500 codec_enc_.g_pass = VPX_RC_ONE_PASS; 502 codec_enc_.g_pass = VPX_RC_ONE_PASS;
501 vpx_fixed_buf output = {0}; 503 vpx_fixed_buf output = {0};
502 Pass2EncodeNFrames(NULL, 1, 2, &output); 504 Pass2EncodeNFrames(NULL, 1, 2, &output);
503 DecodeNFrames(&output, 1); 505 DecodeNFrames(&output, 1);
504 FreeBitstreamBuffers(&output, 1); 506 FreeBitstreamBuffers(&output, 1);
505 } 507 }
506 508
507 TEST_F(SvcTest, OnePassEncodeThreeFrames) { 509 TEST_F(SvcTest, OnePassEncodeThreeFrames) {
508 codec_enc_.g_pass = VPX_RC_ONE_PASS; 510 codec_enc_.g_pass = VPX_RC_ONE_PASS;
509 vpx_fixed_buf outputs[3]; 511 vpx_fixed_buf outputs[3];
510 memset(&outputs[0], 0, sizeof(outputs)); 512 memset(&outputs[0], 0, sizeof(outputs));
511 Pass2EncodeNFrames(NULL, 3, 2, &outputs[0]); 513 Pass2EncodeNFrames(NULL, 3, 2, &outputs[0]);
512 DecodeNFrames(&outputs[0], 3); 514 DecodeNFrames(&outputs[0], 3);
513 FreeBitstreamBuffers(&outputs[0], 3); 515 FreeBitstreamBuffers(&outputs[0], 3);
514 } 516 }
515 517
516 TEST_F(SvcTest, GetLayerResolution) {
517 svc_.spatial_layers = 2;
518 vpx_svc_set_scale_factors(&svc_, "4/16,8/16");
519 vpx_svc_set_quantizers(&svc_, "40,30");
520
521 InitializeEncoder();
522
523 // ensure that requested layer is a valid layer
524 uint32_t layer_width, layer_height;
525 vpx_codec_err_t res = vpx_svc_get_layer_resolution(&svc_, svc_.spatial_layers,
526 &layer_width, &layer_height);
527 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
528
529 res = vpx_svc_get_layer_resolution(NULL, 0, &layer_width, &layer_height);
530 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
531
532 res = vpx_svc_get_layer_resolution(&svc_, 0, NULL, &layer_height);
533 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
534
535 res = vpx_svc_get_layer_resolution(&svc_, 0, &layer_width, NULL);
536 EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
537
538 res = vpx_svc_get_layer_resolution(&svc_, 0, &layer_width, &layer_height);
539 EXPECT_EQ(VPX_CODEC_OK, res);
540 EXPECT_EQ(kWidth * 4 / 16, layer_width);
541 EXPECT_EQ(kHeight * 4 / 16, layer_height);
542
543 res = vpx_svc_get_layer_resolution(&svc_, 1, &layer_width, &layer_height);
544 EXPECT_EQ(VPX_CODEC_OK, res);
545 EXPECT_EQ(kWidth * 8 / 16, layer_width);
546 EXPECT_EQ(kHeight * 8 / 16, layer_height);
547 }
548
549 TEST_F(SvcTest, TwoPassEncode10Frames) { 518 TEST_F(SvcTest, TwoPassEncode10Frames) {
550 // First pass encode 519 // First pass encode
551 std::string stats_buf; 520 std::string stats_buf;
552 Pass1EncodeNFrames(10, 2, &stats_buf); 521 Pass1EncodeNFrames(10, 2, &stats_buf);
553 522
554 // Second pass encode 523 // Second pass encode
555 codec_enc_.g_pass = VPX_RC_LAST_PASS; 524 codec_enc_.g_pass = VPX_RC_LAST_PASS;
556 vpx_fixed_buf outputs[10]; 525 vpx_fixed_buf outputs[10];
557 memset(&outputs[0], 0, sizeof(outputs)); 526 memset(&outputs[0], 0, sizeof(outputs));
558 Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]); 527 Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 818
850 vpx_fixed_buf base_layer[5]; 819 vpx_fixed_buf base_layer[5];
851 for (int i = 0; i < 5; ++i) 820 for (int i = 0; i < 5; ++i)
852 base_layer[i] = outputs[i * 2]; 821 base_layer[i] = outputs[i * 2];
853 822
854 DecodeNFrames(&base_layer[0], 5); 823 DecodeNFrames(&base_layer[0], 5);
855 FreeBitstreamBuffers(&outputs[0], 10); 824 FreeBitstreamBuffers(&outputs[0], 10);
856 } 825 }
857 826
858 } // namespace 827 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/partial_idct_test.cc ('k') | source/libvpx/test/test.mk » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698