| 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 24 matching lines...) Expand all  Loading... | 
| 35 #if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER | 35 #if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER | 
| 36 #include "vpx/vp8dx.h" | 36 #include "vpx/vp8dx.h" | 
| 37 #endif | 37 #endif | 
| 38 | 38 | 
| 39 #include "vpx/vpx_integer.h" | 39 #include "vpx/vpx_integer.h" | 
| 40 #include "vpx_ports/mem_ops.h" | 40 #include "vpx_ports/mem_ops.h" | 
| 41 #include "vpx_ports/vpx_timer.h" | 41 #include "vpx_ports/vpx_timer.h" | 
| 42 #include "./rate_hist.h" | 42 #include "./rate_hist.h" | 
| 43 #include "./vpxstats.h" | 43 #include "./vpxstats.h" | 
| 44 #include "./warnings.h" | 44 #include "./warnings.h" | 
|  | 45 #if CONFIG_WEBM_IO | 
| 45 #include "./webmenc.h" | 46 #include "./webmenc.h" | 
|  | 47 #endif | 
| 46 #include "./y4minput.h" | 48 #include "./y4minput.h" | 
| 47 | 49 | 
| 48 /* Swallow warnings about unused results of fread/fwrite */ | 50 /* Swallow warnings about unused results of fread/fwrite */ | 
| 49 static size_t wrap_fread(void *ptr, size_t size, size_t nmemb, | 51 static size_t wrap_fread(void *ptr, size_t size, size_t nmemb, | 
| 50                          FILE *stream) { | 52                          FILE *stream) { | 
| 51   return fread(ptr, size, nmemb, stream); | 53   return fread(ptr, size, nmemb, stream); | 
| 52 } | 54 } | 
| 53 #define fread wrap_fread | 55 #define fread wrap_fread | 
| 54 | 56 | 
| 55 static size_t wrap_fwrite(const void *ptr, size_t size, size_t nmemb, | 57 static size_t wrap_fwrite(const void *ptr, size_t size, size_t nmemb, | 
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 200 static const arg_def_t usage            = ARG_DEF("u", "usage", 1, | 202 static const arg_def_t usage            = ARG_DEF("u", "usage", 1, | 
| 201                                                   "Usage profile number to use")
      ; | 203                                                   "Usage profile number to use")
      ; | 
| 202 static const arg_def_t threads          = ARG_DEF("t", "threads", 1, | 204 static const arg_def_t threads          = ARG_DEF("t", "threads", 1, | 
| 203                                                   "Max number of threads to use"
      ); | 205                                                   "Max number of threads to use"
      ); | 
| 204 static const arg_def_t profile          = ARG_DEF(NULL, "profile", 1, | 206 static const arg_def_t profile          = ARG_DEF(NULL, "profile", 1, | 
| 205                                                   "Bitstream profile number to u
      se"); | 207                                                   "Bitstream profile number to u
      se"); | 
| 206 static const arg_def_t width            = ARG_DEF("w", "width", 1, | 208 static const arg_def_t width            = ARG_DEF("w", "width", 1, | 
| 207                                                   "Frame width"); | 209                                                   "Frame width"); | 
| 208 static const arg_def_t height           = ARG_DEF("h", "height", 1, | 210 static const arg_def_t height           = ARG_DEF("h", "height", 1, | 
| 209                                                   "Frame height"); | 211                                                   "Frame height"); | 
|  | 212 #if CONFIG_WEBM_IO | 
| 210 static const struct arg_enum_list stereo_mode_enum[] = { | 213 static const struct arg_enum_list stereo_mode_enum[] = { | 
| 211   {"mono", STEREO_FORMAT_MONO}, | 214   {"mono", STEREO_FORMAT_MONO}, | 
| 212   {"left-right", STEREO_FORMAT_LEFT_RIGHT}, | 215   {"left-right", STEREO_FORMAT_LEFT_RIGHT}, | 
| 213   {"bottom-top", STEREO_FORMAT_BOTTOM_TOP}, | 216   {"bottom-top", STEREO_FORMAT_BOTTOM_TOP}, | 
| 214   {"top-bottom", STEREO_FORMAT_TOP_BOTTOM}, | 217   {"top-bottom", STEREO_FORMAT_TOP_BOTTOM}, | 
| 215   {"right-left", STEREO_FORMAT_RIGHT_LEFT}, | 218   {"right-left", STEREO_FORMAT_RIGHT_LEFT}, | 
| 216   {NULL, 0} | 219   {NULL, 0} | 
| 217 }; | 220 }; | 
| 218 static const arg_def_t stereo_mode      = ARG_DEF_ENUM(NULL, "stereo-mode", 1, | 221 static const arg_def_t stereo_mode      = ARG_DEF_ENUM(NULL, "stereo-mode", 1, | 
| 219                                                        "Stereo 3D video format",
       stereo_mode_enum); | 222                                                        "Stereo 3D video format",
       stereo_mode_enum); | 
|  | 223 #endif | 
| 220 static const arg_def_t timebase         = ARG_DEF(NULL, "timebase", 1, | 224 static const arg_def_t timebase         = ARG_DEF(NULL, "timebase", 1, | 
| 221                                                   "Output timestamp precision (f
      ractional seconds)"); | 225                                                   "Output timestamp precision (f
      ractional seconds)"); | 
| 222 static const arg_def_t error_resilient  = ARG_DEF(NULL, "error-resilient", 1, | 226 static const arg_def_t error_resilient  = ARG_DEF(NULL, "error-resilient", 1, | 
| 223                                                   "Enable error resiliency featu
      res"); | 227                                                   "Enable error resiliency featu
      res"); | 
| 224 static const arg_def_t lag_in_frames    = ARG_DEF(NULL, "lag-in-frames", 1, | 228 static const arg_def_t lag_in_frames    = ARG_DEF(NULL, "lag-in-frames", 1, | 
| 225                                                   "Max number of frames to lag")
      ; | 229                                                   "Max number of frames to lag")
      ; | 
| 226 | 230 | 
| 227 static const arg_def_t *global_args[] = { | 231 static const arg_def_t *global_args[] = { | 
| 228   &use_yv12, &use_i420, &usage, &threads, &profile, | 232   &use_yv12, &use_i420, &usage, &threads, &profile, | 
| 229   &width, &height, &stereo_mode, &timebase, &framerate, | 233   &width, &height, | 
|  | 234 #if CONFIG_WEBM_IO | 
|  | 235   &stereo_mode, | 
|  | 236 #endif | 
|  | 237   &timebase, &framerate, | 
| 230   &error_resilient, | 238   &error_resilient, | 
| 231   &lag_in_frames, NULL | 239   &lag_in_frames, NULL | 
| 232 }; | 240 }; | 
| 233 | 241 | 
| 234 static const arg_def_t dropframe_thresh   = ARG_DEF(NULL, "drop-frame", 1, | 242 static const arg_def_t dropframe_thresh   = ARG_DEF(NULL, "drop-frame", 1, | 
| 235                                                     "Temporal resampling thresho
      ld (buf %)"); | 243                                                     "Temporal resampling thresho
      ld (buf %)"); | 
| 236 static const arg_def_t resize_allowed     = ARG_DEF(NULL, "resize-allowed", 1, | 244 static const arg_def_t resize_allowed     = ARG_DEF(NULL, "resize-allowed", 1, | 
| 237                                                     "Spatial resampling enabled 
      (bool)"); | 245                                                     "Spatial resampling enabled 
      (bool)"); | 
| 238 static const arg_def_t resize_width       = ARG_DEF(NULL, "resize-width", 1, | 246 static const arg_def_t resize_width       = ARG_DEF(NULL, "resize-width", 1, | 
| 239                                                     "Width of encoded frame"); | 247                                                     "Width of encoded frame"); | 
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 547 #define MAX(x,y) ((x)>(y)?(x):(y)) | 555 #define MAX(x,y) ((x)>(y)?(x):(y)) | 
| 548 #if CONFIG_VP8_ENCODER && !CONFIG_VP9_ENCODER | 556 #if CONFIG_VP8_ENCODER && !CONFIG_VP9_ENCODER | 
| 549 #define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) | 557 #define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) | 
| 550 #elif !CONFIG_VP8_ENCODER && CONFIG_VP9_ENCODER | 558 #elif !CONFIG_VP8_ENCODER && CONFIG_VP9_ENCODER | 
| 551 #define ARG_CTRL_CNT_MAX NELEMENTS(vp9_arg_ctrl_map) | 559 #define ARG_CTRL_CNT_MAX NELEMENTS(vp9_arg_ctrl_map) | 
| 552 #else | 560 #else | 
| 553 #define ARG_CTRL_CNT_MAX MAX(NELEMENTS(vp8_arg_ctrl_map), \ | 561 #define ARG_CTRL_CNT_MAX MAX(NELEMENTS(vp8_arg_ctrl_map), \ | 
| 554                              NELEMENTS(vp9_arg_ctrl_map)) | 562                              NELEMENTS(vp9_arg_ctrl_map)) | 
| 555 #endif | 563 #endif | 
| 556 | 564 | 
|  | 565 #if !CONFIG_WEBM_IO | 
|  | 566 typedef int stereo_format_t; | 
|  | 567 struct EbmlGlobal { int debug; }; | 
|  | 568 #endif | 
|  | 569 | 
| 557 /* Per-stream configuration */ | 570 /* Per-stream configuration */ | 
| 558 struct stream_config { | 571 struct stream_config { | 
| 559   struct vpx_codec_enc_cfg  cfg; | 572   struct vpx_codec_enc_cfg  cfg; | 
| 560   const char               *out_fn; | 573   const char               *out_fn; | 
| 561   const char               *stats_fn; | 574   const char               *stats_fn; | 
| 562   stereo_format_t           stereo_fmt; | 575   stereo_format_t           stereo_fmt; | 
| 563   int                       arg_ctrls[ARG_CTRL_CNT_MAX][2]; | 576   int                       arg_ctrls[ARG_CTRL_CNT_MAX][2]; | 
| 564   int                       arg_ctrl_cnt; | 577   int                       arg_ctrl_cnt; | 
| 565   int                       write_webm; | 578   int                       write_webm; | 
| 566   int                       have_kf_max_dist; | 579   int                       have_kf_max_dist; | 
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 785      */ | 798      */ | 
| 786     stream->config.cfg.g_timebase.den = 1000; | 799     stream->config.cfg.g_timebase.den = 1000; | 
| 787 | 800 | 
| 788     /* Never use the library's default resolution, require it be parsed | 801     /* Never use the library's default resolution, require it be parsed | 
| 789      * from the file or set on the command line. | 802      * from the file or set on the command line. | 
| 790      */ | 803      */ | 
| 791     stream->config.cfg.g_w = 0; | 804     stream->config.cfg.g_w = 0; | 
| 792     stream->config.cfg.g_h = 0; | 805     stream->config.cfg.g_h = 0; | 
| 793 | 806 | 
| 794     /* Initialize remaining stream parameters */ | 807     /* Initialize remaining stream parameters */ | 
| 795     stream->config.stereo_fmt = STEREO_FORMAT_MONO; |  | 
| 796     stream->config.write_webm = 1; | 808     stream->config.write_webm = 1; | 
| 797 #if CONFIG_WEBM_IO | 809 #if CONFIG_WEBM_IO | 
|  | 810     stream->config.stereo_fmt = STEREO_FORMAT_MONO; | 
| 798     stream->ebml.last_pts_ns = -1; | 811     stream->ebml.last_pts_ns = -1; | 
| 799     stream->ebml.writer = NULL; | 812     stream->ebml.writer = NULL; | 
| 800     stream->ebml.segment = NULL; | 813     stream->ebml.segment = NULL; | 
| 801 #endif | 814 #endif | 
| 802 | 815 | 
| 803     /* Allows removal of the application version from the EBML tags */ | 816     /* Allows removal of the application version from the EBML tags */ | 
| 804     stream->ebml.debug = global->debug; | 817     stream->ebml.debug = global->debug; | 
| 805 | 818 | 
| 806     /* Default lag_in_frames is 0 in realtime mode */ | 819     /* Default lag_in_frames is 0 in realtime mode */ | 
| 807     if (global->deadline == VPX_DL_REALTIME) | 820     if (global->deadline == VPX_DL_REALTIME) | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 862     } else if (arg_match(&arg, &use_ivf, argi)) { | 875     } else if (arg_match(&arg, &use_ivf, argi)) { | 
| 863       config->write_webm = 0; | 876       config->write_webm = 0; | 
| 864     } else if (arg_match(&arg, &threads, argi)) { | 877     } else if (arg_match(&arg, &threads, argi)) { | 
| 865       config->cfg.g_threads = arg_parse_uint(&arg); | 878       config->cfg.g_threads = arg_parse_uint(&arg); | 
| 866     } else if (arg_match(&arg, &profile, argi)) { | 879     } else if (arg_match(&arg, &profile, argi)) { | 
| 867       config->cfg.g_profile = arg_parse_uint(&arg); | 880       config->cfg.g_profile = arg_parse_uint(&arg); | 
| 868     } else if (arg_match(&arg, &width, argi)) { | 881     } else if (arg_match(&arg, &width, argi)) { | 
| 869       config->cfg.g_w = arg_parse_uint(&arg); | 882       config->cfg.g_w = arg_parse_uint(&arg); | 
| 870     } else if (arg_match(&arg, &height, argi)) { | 883     } else if (arg_match(&arg, &height, argi)) { | 
| 871       config->cfg.g_h = arg_parse_uint(&arg); | 884       config->cfg.g_h = arg_parse_uint(&arg); | 
|  | 885 #if CONFIG_WEBM_IO | 
| 872     } else if (arg_match(&arg, &stereo_mode, argi)) { | 886     } else if (arg_match(&arg, &stereo_mode, argi)) { | 
| 873       config->stereo_fmt = arg_parse_enum_or_int(&arg); | 887       config->stereo_fmt = arg_parse_enum_or_int(&arg); | 
|  | 888 #endif | 
| 874     } else if (arg_match(&arg, &timebase, argi)) { | 889     } else if (arg_match(&arg, &timebase, argi)) { | 
| 875       config->cfg.g_timebase = arg_parse_rational(&arg); | 890       config->cfg.g_timebase = arg_parse_rational(&arg); | 
| 876       validate_positive_rational(arg.name, &config->cfg.g_timebase); | 891       validate_positive_rational(arg.name, &config->cfg.g_timebase); | 
| 877     } else if (arg_match(&arg, &error_resilient, argi)) { | 892     } else if (arg_match(&arg, &error_resilient, argi)) { | 
| 878       config->cfg.g_error_resilient = arg_parse_uint(&arg); | 893       config->cfg.g_error_resilient = arg_parse_uint(&arg); | 
| 879     } else if (arg_match(&arg, &lag_in_frames, argi)) { | 894     } else if (arg_match(&arg, &lag_in_frames, argi)) { | 
| 880       config->cfg.g_lag_in_frames = arg_parse_uint(&arg); | 895       config->cfg.g_lag_in_frames = arg_parse_uint(&arg); | 
| 881       if (global->deadline == VPX_DL_REALTIME && | 896       if (global->deadline == VPX_DL_REALTIME && | 
| 882           config->cfg.g_lag_in_frames != 0) { | 897           config->cfg.g_lag_in_frames != 0) { | 
| 883         warn("non-zero %s option ignored in realtime mode.\n", arg.name); | 898         warn("non-zero %s option ignored in realtime mode.\n", arg.name); | 
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1760       } | 1775       } | 
| 1761       fclose(f); | 1776       fclose(f); | 
| 1762     }); | 1777     }); | 
| 1763 #endif | 1778 #endif | 
| 1764 | 1779 | 
| 1765   vpx_img_free(&raw); | 1780   vpx_img_free(&raw); | 
| 1766   free(argv); | 1781   free(argv); | 
| 1767   free(streams); | 1782   free(streams); | 
| 1768   return res ? EXIT_FAILURE : EXIT_SUCCESS; | 1783   return res ? EXIT_FAILURE : EXIT_SUCCESS; | 
| 1769 } | 1784 } | 
| OLD | NEW | 
|---|