| 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 21 matching lines...) Expand all  Loading... | 
| 32     unsigned int                enable_auto_alt_ref;           /** if encoder de
      cides to uses alternate reference frame */ | 32     unsigned int                enable_auto_alt_ref;           /** if encoder de
      cides to uses alternate reference frame */ | 
| 33     unsigned int                noise_sensitivity; | 33     unsigned int                noise_sensitivity; | 
| 34     unsigned int                Sharpness; | 34     unsigned int                Sharpness; | 
| 35     unsigned int                static_thresh; | 35     unsigned int                static_thresh; | 
| 36     unsigned int                token_partitions; | 36     unsigned int                token_partitions; | 
| 37     unsigned int                arnr_max_frames;    /* alt_ref Noise Reduction M
      ax Frame Count */ | 37     unsigned int                arnr_max_frames;    /* alt_ref Noise Reduction M
      ax Frame Count */ | 
| 38     unsigned int                arnr_strength;    /* alt_ref Noise Reduction Str
      ength */ | 38     unsigned int                arnr_strength;    /* alt_ref Noise Reduction Str
      ength */ | 
| 39     unsigned int                arnr_type;        /* alt_ref filter type */ | 39     unsigned int                arnr_type;        /* alt_ref filter type */ | 
| 40     vp8e_tuning                 tuning; | 40     vp8e_tuning                 tuning; | 
| 41     unsigned int                cq_level;         /* constrained quality level *
      / | 41     unsigned int                cq_level;         /* constrained quality level *
      / | 
|  | 42     unsigned int                rc_max_intra_bitrate_pct; | 
| 42 | 43 | 
| 43 }; | 44 }; | 
| 44 | 45 | 
| 45 struct extraconfig_map | 46 struct extraconfig_map | 
| 46 { | 47 { | 
| 47     int                 usage; | 48     int                 usage; | 
| 48     struct vp8_extracfg cfg; | 49     struct vp8_extracfg cfg; | 
| 49 }; | 50 }; | 
| 50 | 51 | 
| 51 static const struct extraconfig_map extracfg_map[] = | 52 static const struct extraconfig_map extracfg_map[] = | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 64             0,                          /* enable_auto_alt_ref */ | 65             0,                          /* enable_auto_alt_ref */ | 
| 65             0,                          /* noise_sensitivity */ | 66             0,                          /* noise_sensitivity */ | 
| 66             0,                          /* Sharpness */ | 67             0,                          /* Sharpness */ | 
| 67             0,                          /* static_thresh */ | 68             0,                          /* static_thresh */ | 
| 68             VP8_ONE_TOKENPARTITION,     /* token_partitions */ | 69             VP8_ONE_TOKENPARTITION,     /* token_partitions */ | 
| 69             0,                          /* arnr_max_frames */ | 70             0,                          /* arnr_max_frames */ | 
| 70             3,                          /* arnr_strength */ | 71             3,                          /* arnr_strength */ | 
| 71             3,                          /* arnr_type*/ | 72             3,                          /* arnr_type*/ | 
| 72             0,                          /* tuning*/ | 73             0,                          /* tuning*/ | 
| 73             10,                         /* cq_level */ | 74             10,                         /* cq_level */ | 
|  | 75             0,                          /* rc_max_intra_bitrate_pct */ | 
| 74         } | 76         } | 
| 75     } | 77     } | 
| 76 }; | 78 }; | 
| 77 | 79 | 
| 78 struct vpx_codec_alg_priv | 80 struct vpx_codec_alg_priv | 
| 79 { | 81 { | 
| 80     vpx_codec_priv_t        base; | 82     vpx_codec_priv_t        base; | 
| 81     vpx_codec_enc_cfg_t     cfg; | 83     vpx_codec_enc_cfg_t     cfg; | 
| 82     struct vp8_extracfg     vp8_cfg; | 84     struct vp8_extracfg     vp8_cfg; | 
| 83     VP8_CONFIG              oxcf; | 85     VP8_CONFIG              oxcf; | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 130     } while(0) | 132     } while(0) | 
| 131 | 133 | 
| 132 #define RANGE_CHECK_BOOL(p,memb) do {\ | 134 #define RANGE_CHECK_BOOL(p,memb) do {\ | 
| 133         if(!!((p)->memb) != (p)->memb) ERROR(#memb " expected boolean");\ | 135         if(!!((p)->memb) != (p)->memb) ERROR(#memb " expected boolean");\ | 
| 134     } while(0) | 136     } while(0) | 
| 135 | 137 | 
| 136 static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t      *ctx, | 138 static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t      *ctx, | 
| 137                                        const vpx_codec_enc_cfg_t *cfg, | 139                                        const vpx_codec_enc_cfg_t *cfg, | 
| 138                                        const struct vp8_extracfg *vp8_cfg) | 140                                        const struct vp8_extracfg *vp8_cfg) | 
| 139 { | 141 { | 
| 140     RANGE_CHECK(cfg, g_w,                   1, 16384); | 142     RANGE_CHECK(cfg, g_w,                   1, 16383); /* 14 bits available */ | 
| 141     RANGE_CHECK(cfg, g_h,                   1, 16384); | 143     RANGE_CHECK(cfg, g_h,                   1, 16383); /* 14 bits available */ | 
| 142     RANGE_CHECK(cfg, g_timebase.den,        1, 1000000000); | 144     RANGE_CHECK(cfg, g_timebase.den,        1, 1000000000); | 
| 143     RANGE_CHECK(cfg, g_timebase.num,        1, cfg->g_timebase.den); | 145     RANGE_CHECK(cfg, g_timebase.num,        1, cfg->g_timebase.den); | 
| 144     RANGE_CHECK_HI(cfg, g_profile,          3); | 146     RANGE_CHECK_HI(cfg, g_profile,          3); | 
| 145     RANGE_CHECK_HI(cfg, rc_max_quantizer,   63); | 147     RANGE_CHECK_HI(cfg, rc_max_quantizer,   63); | 
| 146     RANGE_CHECK_HI(cfg, rc_min_quantizer,   cfg->rc_max_quantizer); | 148     RANGE_CHECK_HI(cfg, rc_min_quantizer,   cfg->rc_max_quantizer); | 
| 147     RANGE_CHECK_HI(cfg, g_threads,          64); | 149     RANGE_CHECK_HI(cfg, g_threads,          64); | 
| 148 #if !(CONFIG_REALTIME_ONLY) | 150 #if !(CONFIG_REALTIME_ONLY) | 
| 149     RANGE_CHECK_HI(cfg, g_lag_in_frames,    25); | 151     RANGE_CHECK_HI(cfg, g_lag_in_frames,    25); | 
| 150 #else | 152 #else | 
| 151     RANGE_CHECK_HI(cfg, g_lag_in_frames,    0); | 153     RANGE_CHECK_HI(cfg, g_lag_in_frames,    0); | 
| 152 #endif | 154 #endif | 
| 153     RANGE_CHECK(cfg, rc_end_usage,          VPX_VBR, VPX_CQ); | 155     RANGE_CHECK(cfg, rc_end_usage,          VPX_VBR, VPX_CQ); | 
| 154     RANGE_CHECK_HI(cfg, rc_undershoot_pct,  100); | 156     RANGE_CHECK_HI(cfg, rc_undershoot_pct,  1000); | 
|  | 157     RANGE_CHECK_HI(cfg, rc_overshoot_pct,   1000); | 
| 155     RANGE_CHECK_HI(cfg, rc_2pass_vbr_bias_pct, 100); | 158     RANGE_CHECK_HI(cfg, rc_2pass_vbr_bias_pct, 100); | 
| 156     RANGE_CHECK(cfg, kf_mode,               VPX_KF_DISABLED, VPX_KF_AUTO); | 159     RANGE_CHECK(cfg, kf_mode,               VPX_KF_DISABLED, VPX_KF_AUTO); | 
| 157     //RANGE_CHECK_BOOL(cfg,                 g_delete_firstpassfile); | 160     //RANGE_CHECK_BOOL(cfg,                 g_delete_firstpassfile); | 
| 158     RANGE_CHECK_BOOL(cfg,                   rc_resize_allowed); | 161     RANGE_CHECK_BOOL(cfg,                   rc_resize_allowed); | 
| 159     RANGE_CHECK_HI(cfg, rc_dropframe_thresh,   100); | 162     RANGE_CHECK_HI(cfg, rc_dropframe_thresh,   100); | 
| 160     RANGE_CHECK_HI(cfg, rc_resize_up_thresh,   100); | 163     RANGE_CHECK_HI(cfg, rc_resize_up_thresh,   100); | 
| 161     RANGE_CHECK_HI(cfg, rc_resize_down_thresh, 100); | 164     RANGE_CHECK_HI(cfg, rc_resize_down_thresh, 100); | 
| 162 #if !(CONFIG_REALTIME_ONLY) | 165 #if !(CONFIG_REALTIME_ONLY) | 
| 163     RANGE_CHECK(cfg,        g_pass,         VPX_RC_ONE_PASS, VPX_RC_LAST_PASS); | 166     RANGE_CHECK(cfg,        g_pass,         VPX_RC_ONE_PASS, VPX_RC_LAST_PASS); | 
| 164 #else | 167 #else | 
| 165     RANGE_CHECK(cfg,        g_pass,         VPX_RC_ONE_PASS, VPX_RC_ONE_PASS); | 168     RANGE_CHECK(cfg,        g_pass,         VPX_RC_ONE_PASS, VPX_RC_ONE_PASS); | 
| 166 #endif | 169 #endif | 
| 167 | 170 | 
| 168     /* VP8 does not support a lower bound on the keyframe interval in | 171     /* VP8 does not support a lower bound on the keyframe interval in | 
| 169      * automatic keyframe placement mode. | 172      * automatic keyframe placement mode. | 
| 170      */ | 173      */ | 
| 171     if (cfg->kf_mode != VPX_KF_DISABLED && cfg->kf_min_dist != cfg->kf_max_dist | 174     if (cfg->kf_mode != VPX_KF_DISABLED && cfg->kf_min_dist != cfg->kf_max_dist | 
| 172         && cfg->kf_min_dist > 0) | 175         && cfg->kf_min_dist > 0) | 
| 173         ERROR("kf_min_dist not supported in auto mode, use 0 " | 176         ERROR("kf_min_dist not supported in auto mode, use 0 " | 
| 174               "or kf_max_dist instead."); | 177               "or kf_max_dist instead."); | 
| 175 | 178 | 
| 176     RANGE_CHECK_BOOL(vp8_cfg,               enable_auto_alt_ref); | 179     RANGE_CHECK_BOOL(vp8_cfg,               enable_auto_alt_ref); | 
|  | 180     RANGE_CHECK(vp8_cfg, cpu_used,           -16, 16); | 
|  | 181 | 
| 177 #if !(CONFIG_REALTIME_ONLY) | 182 #if !(CONFIG_REALTIME_ONLY) | 
| 178     RANGE_CHECK(vp8_cfg, encoding_mode,      VP8_BEST_QUALITY_ENCODING, VP8_REAL
      _TIME_ENCODING); | 183     RANGE_CHECK(vp8_cfg, encoding_mode,      VP8_BEST_QUALITY_ENCODING, VP8_REAL
      _TIME_ENCODING); | 
| 179     RANGE_CHECK(vp8_cfg, cpu_used,           -16, 16); |  | 
| 180     RANGE_CHECK_HI(vp8_cfg, noise_sensitivity,  6); | 184     RANGE_CHECK_HI(vp8_cfg, noise_sensitivity,  6); | 
| 181 #else | 185 #else | 
| 182     RANGE_CHECK(vp8_cfg, encoding_mode,      VP8_REAL_TIME_ENCODING, VP8_REAL_TI
      ME_ENCODING); | 186     RANGE_CHECK(vp8_cfg, encoding_mode,      VP8_REAL_TIME_ENCODING, VP8_REAL_TI
      ME_ENCODING); | 
| 183 |  | 
| 184     if (!((vp8_cfg->cpu_used >= -16 && vp8_cfg->cpu_used <= -4) || (vp8_cfg->cpu
      _used >= 4 && vp8_cfg->cpu_used <= 16))) |  | 
| 185         ERROR("cpu_used out of range [-16..-4] or [4..16]"); |  | 
| 186 |  | 
| 187     RANGE_CHECK(vp8_cfg, noise_sensitivity,  0, 0); | 187     RANGE_CHECK(vp8_cfg, noise_sensitivity,  0, 0); | 
| 188 #endif | 188 #endif | 
| 189 | 189 | 
| 190     RANGE_CHECK(vp8_cfg, token_partitions,   VP8_ONE_TOKENPARTITION, VP8_EIGHT_T
      OKENPARTITION); | 190     RANGE_CHECK(vp8_cfg, token_partitions,   VP8_ONE_TOKENPARTITION, VP8_EIGHT_T
      OKENPARTITION); | 
| 191     RANGE_CHECK_HI(vp8_cfg, Sharpness,       7); | 191     RANGE_CHECK_HI(vp8_cfg, Sharpness,       7); | 
| 192     RANGE_CHECK(vp8_cfg, arnr_max_frames, 0, 15); | 192     RANGE_CHECK(vp8_cfg, arnr_max_frames, 0, 15); | 
| 193     RANGE_CHECK_HI(vp8_cfg, arnr_strength,   6); | 193     RANGE_CHECK_HI(vp8_cfg, arnr_strength,   6); | 
| 194     RANGE_CHECK(vp8_cfg, arnr_type,       1, 3); | 194     RANGE_CHECK(vp8_cfg, arnr_type,       1, 3); | 
| 195     RANGE_CHECK(vp8_cfg, cq_level, 0, 63); | 195     RANGE_CHECK(vp8_cfg, cq_level, 0, 63); | 
| 196 | 196 | 
| 197 #if !(CONFIG_REALTIME_ONLY) | 197 #if !(CONFIG_REALTIME_ONLY) | 
| 198     if (cfg->g_pass == VPX_RC_LAST_PASS) | 198     if (cfg->g_pass == VPX_RC_LAST_PASS) | 
| 199     { | 199     { | 
| 200         int              mb_r = (cfg->g_h + 15) / 16; |  | 
| 201         int              mb_c = (cfg->g_w + 15) / 16; |  | 
| 202         size_t           packet_sz = sizeof(FIRSTPASS_STATS); | 200         size_t           packet_sz = sizeof(FIRSTPASS_STATS); | 
| 203         int              n_packets = cfg->rc_twopass_stats_in.sz / packet_sz; | 201         int              n_packets = cfg->rc_twopass_stats_in.sz / packet_sz; | 
| 204         FIRSTPASS_STATS *stats; | 202         FIRSTPASS_STATS *stats; | 
| 205 | 203 | 
| 206         if (!cfg->rc_twopass_stats_in.buf) | 204         if (!cfg->rc_twopass_stats_in.buf) | 
| 207             ERROR("rc_twopass_stats_in.buf not set."); | 205             ERROR("rc_twopass_stats_in.buf not set."); | 
| 208 | 206 | 
| 209         if (cfg->rc_twopass_stats_in.sz % packet_sz) | 207         if (cfg->rc_twopass_stats_in.sz % packet_sz) | 
| 210             ERROR("rc_twopass_stats_in.sz indicates truncated packet."); | 208             ERROR("rc_twopass_stats_in.sz indicates truncated packet."); | 
| 211 | 209 | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 302     else if (cfg.rc_end_usage == VPX_CBR) | 300     else if (cfg.rc_end_usage == VPX_CBR) | 
| 303     { | 301     { | 
| 304         oxcf->end_usage          = USAGE_STREAM_FROM_SERVER; | 302         oxcf->end_usage          = USAGE_STREAM_FROM_SERVER; | 
| 305     } | 303     } | 
| 306     else if (cfg.rc_end_usage == VPX_CQ) | 304     else if (cfg.rc_end_usage == VPX_CQ) | 
| 307     { | 305     { | 
| 308         oxcf->end_usage          = USAGE_CONSTRAINED_QUALITY; | 306         oxcf->end_usage          = USAGE_CONSTRAINED_QUALITY; | 
| 309     } | 307     } | 
| 310 | 308 | 
| 311     oxcf->target_bandwidth       = cfg.rc_target_bitrate; | 309     oxcf->target_bandwidth       = cfg.rc_target_bitrate; | 
|  | 310     oxcf->rc_max_intra_bitrate_pct = vp8_cfg.rc_max_intra_bitrate_pct; | 
| 312 | 311 | 
| 313     oxcf->best_allowed_q          = cfg.rc_min_quantizer; | 312     oxcf->best_allowed_q          = cfg.rc_min_quantizer; | 
| 314     oxcf->worst_allowed_q         = cfg.rc_max_quantizer; | 313     oxcf->worst_allowed_q         = cfg.rc_max_quantizer; | 
| 315     oxcf->cq_level                = vp8_cfg.cq_level; | 314     oxcf->cq_level                = vp8_cfg.cq_level; | 
| 316     oxcf->fixed_q = -1; | 315     oxcf->fixed_q = -1; | 
| 317 | 316 | 
| 318     oxcf->under_shoot_pct         = cfg.rc_undershoot_pct; | 317     oxcf->under_shoot_pct         = cfg.rc_undershoot_pct; | 
| 319     //oxcf->over_shoot_pct        = cfg.rc_overshoot_pct; | 318     oxcf->over_shoot_pct          = cfg.rc_overshoot_pct; | 
| 320 | 319 | 
| 321     oxcf->maximum_buffer_size     = cfg.rc_buf_sz; | 320     oxcf->maximum_buffer_size     = cfg.rc_buf_sz; | 
| 322     oxcf->starting_buffer_level   = cfg.rc_buf_initial_sz; | 321     oxcf->starting_buffer_level   = cfg.rc_buf_initial_sz; | 
| 323     oxcf->optimal_buffer_level    = cfg.rc_buf_optimal_sz; | 322     oxcf->optimal_buffer_level    = cfg.rc_buf_optimal_sz; | 
| 324 | 323 | 
| 325     oxcf->two_pass_vbrbias        = cfg.rc_2pass_vbr_bias_pct; | 324     oxcf->two_pass_vbrbias        = cfg.rc_2pass_vbr_bias_pct; | 
| 326     oxcf->two_pass_vbrmin_section  = cfg.rc_2pass_vbr_minsection_pct; | 325     oxcf->two_pass_vbrmin_section  = cfg.rc_2pass_vbr_minsection_pct; | 
| 327     oxcf->two_pass_vbrmax_section  = cfg.rc_2pass_vbr_maxsection_pct; | 326     oxcf->two_pass_vbrmax_section  = cfg.rc_2pass_vbr_maxsection_pct; | 
| 328 | 327 | 
| 329     oxcf->auto_key               = cfg.kf_mode == VPX_KF_AUTO | 328     oxcf->auto_key               = cfg.kf_mode == VPX_KF_AUTO | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 355         printf("target_bandwidth: %d\n", oxcf->target_bandwidth); | 354         printf("target_bandwidth: %d\n", oxcf->target_bandwidth); | 
| 356         printf("noise_sensitivity: %d\n", oxcf->noise_sensitivity); | 355         printf("noise_sensitivity: %d\n", oxcf->noise_sensitivity); | 
| 357         printf("Sharpness: %d\n",    oxcf->Sharpness); | 356         printf("Sharpness: %d\n",    oxcf->Sharpness); | 
| 358         printf("cpu_used: %d\n",  oxcf->cpu_used); | 357         printf("cpu_used: %d\n",  oxcf->cpu_used); | 
| 359         printf("Mode: %d\n",     oxcf->Mode); | 358         printf("Mode: %d\n",     oxcf->Mode); | 
| 360         printf("delete_first_pass_file: %d\n",  oxcf->delete_first_pass_file); | 359         printf("delete_first_pass_file: %d\n",  oxcf->delete_first_pass_file); | 
| 361         printf("auto_key: %d\n",  oxcf->auto_key); | 360         printf("auto_key: %d\n",  oxcf->auto_key); | 
| 362         printf("key_freq: %d\n", oxcf->key_freq); | 361         printf("key_freq: %d\n", oxcf->key_freq); | 
| 363         printf("end_usage: %d\n", oxcf->end_usage); | 362         printf("end_usage: %d\n", oxcf->end_usage); | 
| 364         printf("under_shoot_pct: %d\n", oxcf->under_shoot_pct); | 363         printf("under_shoot_pct: %d\n", oxcf->under_shoot_pct); | 
|  | 364         printf("over_shoot_pct: %d\n", oxcf->over_shoot_pct); | 
| 365         printf("starting_buffer_level: %d\n", oxcf->starting_buffer_level); | 365         printf("starting_buffer_level: %d\n", oxcf->starting_buffer_level); | 
| 366         printf("optimal_buffer_level: %d\n",  oxcf->optimal_buffer_level); | 366         printf("optimal_buffer_level: %d\n",  oxcf->optimal_buffer_level); | 
| 367         printf("maximum_buffer_size: %d\n", oxcf->maximum_buffer_size); | 367         printf("maximum_buffer_size: %d\n", oxcf->maximum_buffer_size); | 
| 368         printf("fixed_q: %d\n",  oxcf->fixed_q); | 368         printf("fixed_q: %d\n",  oxcf->fixed_q); | 
| 369         printf("worst_allowed_q: %d\n", oxcf->worst_allowed_q); | 369         printf("worst_allowed_q: %d\n", oxcf->worst_allowed_q); | 
| 370         printf("best_allowed_q: %d\n", oxcf->best_allowed_q); | 370         printf("best_allowed_q: %d\n", oxcf->best_allowed_q); | 
| 371         printf("allow_spatial_resampling: %d\n",  oxcf->allow_spatial_resampling
      ); | 371         printf("allow_spatial_resampling: %d\n",  oxcf->allow_spatial_resampling
      ); | 
| 372         printf("resample_down_water_mark: %d\n", oxcf->resample_down_water_mark)
      ; | 372         printf("resample_down_water_mark: %d\n", oxcf->resample_down_water_mark)
      ; | 
| 373         printf("resample_up_water_mark: %d\n", oxcf->resample_up_water_mark); | 373         printf("resample_up_water_mark: %d\n", oxcf->resample_up_water_mark); | 
| 374         printf("allow_df: %d\n", oxcf->allow_df); | 374         printf("allow_df: %d\n", oxcf->allow_df); | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 457         MAP(VP8E_SET_NOISE_SENSITIVITY,     xcfg.noise_sensitivity); | 457         MAP(VP8E_SET_NOISE_SENSITIVITY,     xcfg.noise_sensitivity); | 
| 458         MAP(VP8E_SET_SHARPNESS,             xcfg.Sharpness); | 458         MAP(VP8E_SET_SHARPNESS,             xcfg.Sharpness); | 
| 459         MAP(VP8E_SET_STATIC_THRESHOLD,      xcfg.static_thresh); | 459         MAP(VP8E_SET_STATIC_THRESHOLD,      xcfg.static_thresh); | 
| 460         MAP(VP8E_SET_TOKEN_PARTITIONS,      xcfg.token_partitions); | 460         MAP(VP8E_SET_TOKEN_PARTITIONS,      xcfg.token_partitions); | 
| 461 | 461 | 
| 462         MAP(VP8E_SET_ARNR_MAXFRAMES,        xcfg.arnr_max_frames); | 462         MAP(VP8E_SET_ARNR_MAXFRAMES,        xcfg.arnr_max_frames); | 
| 463         MAP(VP8E_SET_ARNR_STRENGTH ,        xcfg.arnr_strength); | 463         MAP(VP8E_SET_ARNR_STRENGTH ,        xcfg.arnr_strength); | 
| 464         MAP(VP8E_SET_ARNR_TYPE     ,        xcfg.arnr_type); | 464         MAP(VP8E_SET_ARNR_TYPE     ,        xcfg.arnr_type); | 
| 465         MAP(VP8E_SET_TUNING,                xcfg.tuning); | 465         MAP(VP8E_SET_TUNING,                xcfg.tuning); | 
| 466         MAP(VP8E_SET_CQ_LEVEL,              xcfg.cq_level); | 466         MAP(VP8E_SET_CQ_LEVEL,              xcfg.cq_level); | 
|  | 467         MAP(VP8E_SET_MAX_INTRA_BITRATE_PCT, xcfg.rc_max_intra_bitrate_pct); | 
| 467 | 468 | 
| 468     } | 469     } | 
| 469 | 470 | 
| 470     res = validate_config(ctx, &ctx->cfg, &xcfg); | 471     res = validate_config(ctx, &ctx->cfg, &xcfg); | 
| 471 | 472 | 
| 472     if (!res) | 473     if (!res) | 
| 473     { | 474     { | 
| 474         ctx->vp8_cfg = xcfg; | 475         ctx->vp8_cfg = xcfg; | 
| 475         set_vp8e_config(&ctx->oxcf, ctx->cfg, ctx->vp8_cfg); | 476         set_vp8e_config(&ctx->oxcf, ctx->cfg, ctx->vp8_cfg); | 
| 476         vp8_change_config(ctx->cpi, &ctx->oxcf); | 477         vp8_change_config(ctx->cpi, &ctx->oxcf); | 
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 718             flags |= VPX_EFLAG_FORCE_KF; | 719             flags |= VPX_EFLAG_FORCE_KF; | 
| 719             ctx->fixed_kf_cntr = 1; | 720             ctx->fixed_kf_cntr = 1; | 
| 720         } | 721         } | 
| 721     } | 722     } | 
| 722 | 723 | 
| 723     /* Initialize the encoder instance on the first frame*/ | 724     /* Initialize the encoder instance on the first frame*/ | 
| 724     if (!res && ctx->cpi) | 725     if (!res && ctx->cpi) | 
| 725     { | 726     { | 
| 726         unsigned int lib_flags; | 727         unsigned int lib_flags; | 
| 727         YV12_BUFFER_CONFIG sd; | 728         YV12_BUFFER_CONFIG sd; | 
| 728         INT64 dst_time_stamp, dst_end_time_stamp; | 729         int64_t dst_time_stamp, dst_end_time_stamp; | 
| 729         unsigned long size, cx_data_sz; | 730         unsigned long size, cx_data_sz; | 
| 730         unsigned char *cx_data; | 731         unsigned char *cx_data; | 
| 731 | 732 | 
| 732         /* Set up internal flags */ | 733         /* Set up internal flags */ | 
| 733         if (ctx->base.init_flags & VPX_CODEC_USE_PSNR) | 734         if (ctx->base.init_flags & VPX_CODEC_USE_PSNR) | 
| 734             ((VP8_COMP *)ctx->cpi)->b_calculate_psnr = 1; | 735             ((VP8_COMP *)ctx->cpi)->b_calculate_psnr = 1; | 
| 735 | 736 | 
|  | 737         if (ctx->base.init_flags & VPX_CODEC_USE_OUTPUT_PARTITION) | 
|  | 738             ((VP8_COMP *)ctx->cpi)->output_partition = 1; | 
|  | 739 | 
| 736         /* Convert API flags to internal codec lib flags */ | 740         /* Convert API flags to internal codec lib flags */ | 
| 737         lib_flags = (flags & VPX_EFLAG_FORCE_KF) ? FRAMEFLAGS_KEY : 0; | 741         lib_flags = (flags & VPX_EFLAG_FORCE_KF) ? FRAMEFLAGS_KEY : 0; | 
| 738 | 742 | 
| 739         /* vp8 use 10,000,000 ticks/second as time stamp */ | 743         /* vp8 use 10,000,000 ticks/second as time stamp */ | 
| 740         dst_time_stamp    = pts * 10000000 * ctx->cfg.g_timebase.num / ctx->cfg.
      g_timebase.den; | 744         dst_time_stamp    = pts * 10000000 * ctx->cfg.g_timebase.num / ctx->cfg.
      g_timebase.den; | 
| 741         dst_end_time_stamp = (pts + duration) * 10000000 * ctx->cfg.g_timebase.n
      um / ctx->cfg.g_timebase.den; | 745         dst_end_time_stamp = (pts + duration) * 10000000 * ctx->cfg.g_timebase.n
      um / ctx->cfg.g_timebase.den; | 
| 742 | 746 | 
| 743         if (img != NULL) | 747         if (img != NULL) | 
| 744         { | 748         { | 
| 745             res = image2yuvconfig(img, &sd); | 749             res = image2yuvconfig(img, &sd); | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 765             if (size) | 769             if (size) | 
| 766             { | 770             { | 
| 767                 vpx_codec_pts_t    round, delta; | 771                 vpx_codec_pts_t    round, delta; | 
| 768                 vpx_codec_cx_pkt_t pkt; | 772                 vpx_codec_cx_pkt_t pkt; | 
| 769                 VP8_COMP *cpi = (VP8_COMP *)ctx->cpi; | 773                 VP8_COMP *cpi = (VP8_COMP *)ctx->cpi; | 
| 770 | 774 | 
| 771                 /* Add the frame packet to the list of returned packets. */ | 775                 /* Add the frame packet to the list of returned packets. */ | 
| 772                 round = 1000000 * ctx->cfg.g_timebase.num / 2 - 1; | 776                 round = 1000000 * ctx->cfg.g_timebase.num / 2 - 1; | 
| 773                 delta = (dst_end_time_stamp - dst_time_stamp); | 777                 delta = (dst_end_time_stamp - dst_time_stamp); | 
| 774                 pkt.kind = VPX_CODEC_CX_FRAME_PKT; | 778                 pkt.kind = VPX_CODEC_CX_FRAME_PKT; | 
| 775                 pkt.data.frame.buf = cx_data; |  | 
| 776                 pkt.data.frame.sz  = size; |  | 
| 777                 pkt.data.frame.pts = | 779                 pkt.data.frame.pts = | 
| 778                     (dst_time_stamp * ctx->cfg.g_timebase.den + round) | 780                     (dst_time_stamp * ctx->cfg.g_timebase.den + round) | 
| 779                     / ctx->cfg.g_timebase.num / 10000000; | 781                     / ctx->cfg.g_timebase.num / 10000000; | 
| 780                 pkt.data.frame.duration = | 782                 pkt.data.frame.duration = | 
| 781                     (delta * ctx->cfg.g_timebase.den + round) | 783                     (delta * ctx->cfg.g_timebase.den + round) | 
| 782                     / ctx->cfg.g_timebase.num / 10000000; | 784                     / ctx->cfg.g_timebase.num / 10000000; | 
| 783                 pkt.data.frame.flags = lib_flags << 16; | 785                 pkt.data.frame.flags = lib_flags << 16; | 
| 784 | 786 | 
| 785                 if (lib_flags & FRAMEFLAGS_KEY) | 787                 if (lib_flags & FRAMEFLAGS_KEY) | 
| 786                     pkt.data.frame.flags |= VPX_FRAME_IS_KEY; | 788                     pkt.data.frame.flags |= VPX_FRAME_IS_KEY; | 
| 787 | 789 | 
| 788                 if (!cpi->common.show_frame) | 790                 if (!cpi->common.show_frame) | 
| 789                 { | 791                 { | 
| 790                     pkt.data.frame.flags |= VPX_FRAME_IS_INVISIBLE; | 792                     pkt.data.frame.flags |= VPX_FRAME_IS_INVISIBLE; | 
| 791 | 793 | 
| 792                     // This timestamp should be as close as possible to the | 794                     // This timestamp should be as close as possible to the | 
| 793                     // prior PTS so that if a decoder uses pts to schedule when | 795                     // prior PTS so that if a decoder uses pts to schedule when | 
| 794                     // to do this, we start right after last frame was decoded. | 796                     // to do this, we start right after last frame was decoded. | 
| 795                     // Invisible frames have no duration. | 797                     // Invisible frames have no duration. | 
| 796                     pkt.data.frame.pts = ((cpi->last_time_stamp_seen | 798                     pkt.data.frame.pts = ((cpi->last_time_stamp_seen | 
| 797                         * ctx->cfg.g_timebase.den + round) | 799                         * ctx->cfg.g_timebase.den + round) | 
| 798                         / ctx->cfg.g_timebase.num / 10000000) + 1; | 800                         / ctx->cfg.g_timebase.num / 10000000) + 1; | 
| 799                     pkt.data.frame.duration = 0; | 801                     pkt.data.frame.duration = 0; | 
| 800                 } | 802                 } | 
| 801 | 803 | 
| 802                 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); | 804                 if (cpi->droppable) | 
|  | 805                     pkt.data.frame.flags |= VPX_FRAME_IS_DROPPABLE; | 
|  | 806 | 
|  | 807                 if (cpi->output_partition) | 
|  | 808                 { | 
|  | 809                     int i; | 
|  | 810                     const int num_partitions = | 
|  | 811                             (1 << cpi->common.multi_token_partition) + 1; | 
|  | 812 | 
|  | 813                     pkt.data.frame.flags |= VPX_FRAME_IS_FRAGMENT; | 
|  | 814 | 
|  | 815                     for (i = 0; i < num_partitions; ++i) | 
|  | 816                     { | 
|  | 817                         pkt.data.frame.buf = cx_data; | 
|  | 818                         pkt.data.frame.sz = cpi->partition_sz[i]; | 
|  | 819                         pkt.data.frame.partition_id = i; | 
|  | 820                         /* don't set the fragment bit for the last partition */ | 
|  | 821                         if (i == (num_partitions - 1)) | 
|  | 822                             pkt.data.frame.flags &= ~VPX_FRAME_IS_FRAGMENT; | 
|  | 823                         vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); | 
|  | 824                         cx_data += cpi->partition_sz[i]; | 
|  | 825                         cx_data_sz -= cpi->partition_sz[i]; | 
|  | 826                     } | 
|  | 827                 } | 
|  | 828                 else | 
|  | 829                 { | 
|  | 830                     pkt.data.frame.buf = cx_data; | 
|  | 831                     pkt.data.frame.sz  = size; | 
|  | 832                     pkt.data.frame.partition_id = -1; | 
|  | 833                     vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); | 
|  | 834                     cx_data += size; | 
|  | 835                     cx_data_sz -= size; | 
|  | 836                 } | 
| 803 | 837 | 
| 804                 //printf("timestamp: %lld, duration: %d\n", pkt->data.frame.pts,
       pkt->data.frame.duration); | 838                 //printf("timestamp: %lld, duration: %d\n", pkt->data.frame.pts,
       pkt->data.frame.duration); | 
| 805                 cx_data += size; |  | 
| 806                 cx_data_sz -= size; |  | 
| 807             } | 839             } | 
| 808         } | 840         } | 
| 809     } | 841     } | 
| 810 | 842 | 
| 811     return res; | 843     return res; | 
| 812 } | 844 } | 
| 813 | 845 | 
| 814 | 846 | 
| 815 static const vpx_codec_cx_pkt_t *vp8e_get_cxdata(vpx_codec_alg_priv_t  *ctx, | 847 static const vpx_codec_cx_pkt_t *vp8e_get_cxdata(vpx_codec_alg_priv_t  *ctx, | 
| 816         vpx_codec_iter_t      *iter) | 848         vpx_codec_iter_t      *iter) | 
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1049     {VP8E_SET_SHARPNESS,                set_param}, | 1081     {VP8E_SET_SHARPNESS,                set_param}, | 
| 1050     {VP8E_SET_STATIC_THRESHOLD,         set_param}, | 1082     {VP8E_SET_STATIC_THRESHOLD,         set_param}, | 
| 1051     {VP8E_SET_TOKEN_PARTITIONS,         set_param}, | 1083     {VP8E_SET_TOKEN_PARTITIONS,         set_param}, | 
| 1052     {VP8E_GET_LAST_QUANTIZER,           get_param}, | 1084     {VP8E_GET_LAST_QUANTIZER,           get_param}, | 
| 1053     {VP8E_GET_LAST_QUANTIZER_64,        get_param}, | 1085     {VP8E_GET_LAST_QUANTIZER_64,        get_param}, | 
| 1054     {VP8E_SET_ARNR_MAXFRAMES,           set_param}, | 1086     {VP8E_SET_ARNR_MAXFRAMES,           set_param}, | 
| 1055     {VP8E_SET_ARNR_STRENGTH ,           set_param}, | 1087     {VP8E_SET_ARNR_STRENGTH ,           set_param}, | 
| 1056     {VP8E_SET_ARNR_TYPE     ,           set_param}, | 1088     {VP8E_SET_ARNR_TYPE     ,           set_param}, | 
| 1057     {VP8E_SET_TUNING,                   set_param}, | 1089     {VP8E_SET_TUNING,                   set_param}, | 
| 1058     {VP8E_SET_CQ_LEVEL,                 set_param}, | 1090     {VP8E_SET_CQ_LEVEL,                 set_param}, | 
|  | 1091     {VP8E_SET_MAX_INTRA_BITRATE_PCT,    set_param}, | 
| 1059     { -1, NULL}, | 1092     { -1, NULL}, | 
| 1060 }; | 1093 }; | 
| 1061 | 1094 | 
| 1062 static vpx_codec_enc_cfg_map_t vp8e_usage_cfg_map[] = | 1095 static vpx_codec_enc_cfg_map_t vp8e_usage_cfg_map[] = | 
| 1063 { | 1096 { | 
| 1064     { | 1097     { | 
| 1065     0, | 1098     0, | 
| 1066     { | 1099     { | 
| 1067         0,                  /* g_usage */ | 1100         0,                  /* g_usage */ | 
| 1068         0,                  /* g_threads */ | 1101         0,                  /* g_threads */ | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 1081         0,                  /* rc_dropframe_thresh */ | 1114         0,                  /* rc_dropframe_thresh */ | 
| 1082         0,                  /* rc_resize_allowed */ | 1115         0,                  /* rc_resize_allowed */ | 
| 1083         60,                 /* rc_resize_down_thresold */ | 1116         60,                 /* rc_resize_down_thresold */ | 
| 1084         30,                 /* rc_resize_up_thresold */ | 1117         30,                 /* rc_resize_up_thresold */ | 
| 1085 | 1118 | 
| 1086         VPX_VBR,            /* rc_end_usage */ | 1119         VPX_VBR,            /* rc_end_usage */ | 
| 1087 #if VPX_ENCODER_ABI_VERSION > (1 + VPX_CODEC_ABI_VERSION) | 1120 #if VPX_ENCODER_ABI_VERSION > (1 + VPX_CODEC_ABI_VERSION) | 
| 1088         {0},                /* rc_twopass_stats_in */ | 1121         {0},                /* rc_twopass_stats_in */ | 
| 1089 #endif | 1122 #endif | 
| 1090         256,                /* rc_target_bandwidth */ | 1123         256,                /* rc_target_bandwidth */ | 
| 1091 |  | 
| 1092         4,                  /* rc_min_quantizer */ | 1124         4,                  /* rc_min_quantizer */ | 
| 1093         63,                 /* rc_max_quantizer */ | 1125         63,                 /* rc_max_quantizer */ | 
| 1094         95,                 /* rc_undershoot_pct */ | 1126         100,                /* rc_undershoot_pct */ | 
| 1095         200,                /* rc_overshoot_pct */ | 1127         100,                /* rc_overshoot_pct */ | 
| 1096 | 1128 | 
| 1097         6000,               /* rc_max_buffer_size */ | 1129         6000,               /* rc_max_buffer_size */ | 
| 1098         4000,               /* rc_buffer_initial_size; */ | 1130         4000,               /* rc_buffer_initial_size; */ | 
| 1099         5000,               /* rc_buffer_optimal_size; */ | 1131         5000,               /* rc_buffer_optimal_size; */ | 
| 1100 | 1132 | 
| 1101         50,                 /* rc_two_pass_vbrbias  */ | 1133         50,                 /* rc_two_pass_vbrbias  */ | 
| 1102         0,                  /* rc_two_pass_vbrmin_section */ | 1134         0,                  /* rc_two_pass_vbrmin_section */ | 
| 1103         400,                /* rc_two_pass_vbrmax_section */ | 1135         400,                /* rc_two_pass_vbrmax_section */ | 
| 1104 | 1136 | 
| 1105         /* keyframing settings (kf) */ | 1137         /* keyframing settings (kf) */ | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 1116 }; | 1148 }; | 
| 1117 | 1149 | 
| 1118 | 1150 | 
| 1119 #ifndef VERSION_STRING | 1151 #ifndef VERSION_STRING | 
| 1120 #define VERSION_STRING | 1152 #define VERSION_STRING | 
| 1121 #endif | 1153 #endif | 
| 1122 CODEC_INTERFACE(vpx_codec_vp8_cx) = | 1154 CODEC_INTERFACE(vpx_codec_vp8_cx) = | 
| 1123 { | 1155 { | 
| 1124     "WebM Project VP8 Encoder" VERSION_STRING, | 1156     "WebM Project VP8 Encoder" VERSION_STRING, | 
| 1125     VPX_CODEC_INTERNAL_ABI_VERSION, | 1157     VPX_CODEC_INTERNAL_ABI_VERSION, | 
| 1126     VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR, | 1158     VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR | | 
|  | 1159     VPX_CODEC_CAP_OUTPUT_PARTITION, | 
| 1127     /* vpx_codec_caps_t          caps; */ | 1160     /* vpx_codec_caps_t          caps; */ | 
| 1128     vp8e_init,          /* vpx_codec_init_fn_t       init; */ | 1161     vp8e_init,          /* vpx_codec_init_fn_t       init; */ | 
| 1129     vp8e_destroy,       /* vpx_codec_destroy_fn_t    destroy; */ | 1162     vp8e_destroy,       /* vpx_codec_destroy_fn_t    destroy; */ | 
| 1130     vp8e_ctf_maps,      /* vpx_codec_ctrl_fn_map_t  *ctrl_maps; */ | 1163     vp8e_ctf_maps,      /* vpx_codec_ctrl_fn_map_t  *ctrl_maps; */ | 
| 1131     NOT_IMPLEMENTED,    /* vpx_codec_get_mmap_fn_t   get_mmap; */ | 1164     NOT_IMPLEMENTED,    /* vpx_codec_get_mmap_fn_t   get_mmap; */ | 
| 1132     NOT_IMPLEMENTED,    /* vpx_codec_set_mmap_fn_t   set_mmap; */ | 1165     NOT_IMPLEMENTED,    /* vpx_codec_set_mmap_fn_t   set_mmap; */ | 
| 1133     { | 1166     { | 
| 1134         NOT_IMPLEMENTED,    /* vpx_codec_peek_si_fn_t    peek_si; */ | 1167         NOT_IMPLEMENTED,    /* vpx_codec_peek_si_fn_t    peek_si; */ | 
| 1135         NOT_IMPLEMENTED,    /* vpx_codec_get_si_fn_t     get_si; */ | 1168         NOT_IMPLEMENTED,    /* vpx_codec_get_si_fn_t     get_si; */ | 
| 1136         NOT_IMPLEMENTED,    /* vpx_codec_decode_fn_t     decode; */ | 1169         NOT_IMPLEMENTED,    /* vpx_codec_decode_fn_t     decode; */ | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1222     {NOT_IMPLEMENTED},  /* decoder functions */ | 1255     {NOT_IMPLEMENTED},  /* decoder functions */ | 
| 1223     { | 1256     { | 
| 1224         vp8e_usage_cfg_map, /* vpx_codec_enc_cfg_map_t    peek_si; */ | 1257         vp8e_usage_cfg_map, /* vpx_codec_enc_cfg_map_t    peek_si; */ | 
| 1225         api1_encode,        /* vpx_codec_encode_fn_t      encode; */ | 1258         api1_encode,        /* vpx_codec_encode_fn_t      encode; */ | 
| 1226         vp8e_get_cxdata,    /* vpx_codec_get_cx_data_fn_t   frame_get; */ | 1259         vp8e_get_cxdata,    /* vpx_codec_get_cx_data_fn_t   frame_get; */ | 
| 1227         vp8e_set_config, | 1260         vp8e_set_config, | 
| 1228         NOT_IMPLEMENTED, | 1261         NOT_IMPLEMENTED, | 
| 1229         vp8e_get_preview, | 1262         vp8e_get_preview, | 
| 1230     } /* encoder functions */ | 1263     } /* encoder functions */ | 
| 1231 }; | 1264 }; | 
| OLD | NEW | 
|---|