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 1670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 } | 1681 } |
1682 | 1682 |
1683 | 1683 |
1684 static void parse_global_config(struct global_config *global, char **argv) { | 1684 static void parse_global_config(struct global_config *global, char **argv) { |
1685 char **argi, **argj; | 1685 char **argi, **argj; |
1686 struct arg arg; | 1686 struct arg arg; |
1687 | 1687 |
1688 /* Initialize default parameters */ | 1688 /* Initialize default parameters */ |
1689 memset(global, 0, sizeof(*global)); | 1689 memset(global, 0, sizeof(*global)); |
1690 global->codec = codecs; | 1690 global->codec = codecs; |
1691 global->passes = 1; | 1691 global->passes = 0; |
1692 global->use_i420 = 1; | 1692 global->use_i420 = 1; |
| 1693 /* Assign default deadline to good quality */ |
| 1694 global->deadline = VPX_DL_GOOD_QUALITY; |
1693 | 1695 |
1694 for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { | 1696 for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { |
1695 arg.argv_step = 1; | 1697 arg.argv_step = 1; |
1696 | 1698 |
1697 if (arg_match(&arg, &codecarg, argi)) { | 1699 if (arg_match(&arg, &codecarg, argi)) { |
1698 int j, k = -1; | 1700 int j, k = -1; |
1699 | 1701 |
1700 for (j = 0; j < sizeof(codecs) / sizeof(codecs[0]); j++) | 1702 for (j = 0; j < sizeof(codecs) / sizeof(codecs[0]); j++) |
1701 if (!strcmp(codecs[j].name, arg.val)) | 1703 if (!strcmp(codecs[j].name, arg.val)) |
1702 k = j; | 1704 k = j; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1754 global->debug = 1; | 1756 global->debug = 1; |
1755 else if (arg_match(&arg, &q_hist_n, argi)) | 1757 else if (arg_match(&arg, &q_hist_n, argi)) |
1756 global->show_q_hist_buckets = arg_parse_uint(&arg); | 1758 global->show_q_hist_buckets = arg_parse_uint(&arg); |
1757 else if (arg_match(&arg, &rate_hist_n, argi)) | 1759 else if (arg_match(&arg, &rate_hist_n, argi)) |
1758 global->show_rate_hist_buckets = arg_parse_uint(&arg); | 1760 global->show_rate_hist_buckets = arg_parse_uint(&arg); |
1759 else | 1761 else |
1760 argj++; | 1762 argj++; |
1761 } | 1763 } |
1762 | 1764 |
1763 /* Validate global config */ | 1765 /* Validate global config */ |
| 1766 if (global->passes == 0) { |
| 1767 // Make default VP9 passes = 2 until there is a better quality 1-pass |
| 1768 // encoder |
| 1769 global->passes = (global->codec->iface == vpx_codec_vp9_cx ? 2 : 1); |
| 1770 } |
1764 | 1771 |
1765 if (global->pass) { | 1772 if (global->pass) { |
1766 /* DWIM: Assume the user meant passes=2 if pass=2 is specified */ | 1773 /* DWIM: Assume the user meant passes=2 if pass=2 is specified */ |
1767 if (global->pass > global->passes) { | 1774 if (global->pass > global->passes) { |
1768 warn("Assuming --pass=%d implies --passes=%d\n", | 1775 warn("Assuming --pass=%d implies --passes=%d\n", |
1769 global->pass, global->pass); | 1776 global->pass, global->pass); |
1770 global->passes = global->pass; | 1777 global->passes = global->pass; |
1771 } | 1778 } |
1772 } | 1779 } |
1773 } | 1780 } |
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2624 vpx_img_alloc(&raw, | 2631 vpx_img_alloc(&raw, |
2625 input.use_i420 ? VPX_IMG_FMT_I420 | 2632 input.use_i420 ? VPX_IMG_FMT_I420 |
2626 : VPX_IMG_FMT_YV12, | 2633 : VPX_IMG_FMT_YV12, |
2627 input.w, input.h, 32); | 2634 input.w, input.h, 32); |
2628 | 2635 |
2629 FOREACH_STREAM(init_rate_histogram(&stream->rate_hist, | 2636 FOREACH_STREAM(init_rate_histogram(&stream->rate_hist, |
2630 &stream->config.cfg, | 2637 &stream->config.cfg, |
2631 &global.framerate)); | 2638 &global.framerate)); |
2632 } | 2639 } |
2633 | 2640 |
| 2641 FOREACH_STREAM(setup_pass(stream, &global, pass)); |
2634 FOREACH_STREAM(open_output_file(stream, &global)); | 2642 FOREACH_STREAM(open_output_file(stream, &global)); |
2635 FOREACH_STREAM(setup_pass(stream, &global, pass)); | |
2636 FOREACH_STREAM(initialize_encoder(stream, &global)); | 2643 FOREACH_STREAM(initialize_encoder(stream, &global)); |
2637 | 2644 |
2638 frame_avail = 1; | 2645 frame_avail = 1; |
2639 got_data = 0; | 2646 got_data = 0; |
2640 | 2647 |
2641 while (frame_avail || got_data) { | 2648 while (frame_avail || got_data) { |
2642 struct vpx_usec_timer timer; | 2649 struct vpx_usec_timer timer; |
2643 | 2650 |
2644 if (!global.limit || frames_in < global.limit) { | 2651 if (!global.limit || frames_in < global.limit) { |
2645 frame_avail = read_frame(&input, &raw); | 2652 frame_avail = read_frame(&input, &raw); |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2784 } | 2791 } |
2785 fclose(f); | 2792 fclose(f); |
2786 }); | 2793 }); |
2787 #endif | 2794 #endif |
2788 | 2795 |
2789 vpx_img_free(&raw); | 2796 vpx_img_free(&raw); |
2790 free(argv); | 2797 free(argv); |
2791 free(streams); | 2798 free(streams); |
2792 return res ? EXIT_FAILURE : EXIT_SUCCESS; | 2799 return res ? EXIT_FAILURE : EXIT_SUCCESS; |
2793 } | 2800 } |
OLD | NEW |