00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 #ifndef VPX_ENCODER_H
00032 #define VPX_ENCODER_H
00033 #include "vpx_codec.h"
00034
00035 #define MAX_PERIODICITY 16
00036 #define MAX_LAYERS 5
00037
00046 #define VPX_ENCODER_ABI_VERSION (3 + VPX_CODEC_ABI_VERSION)
00058 #define VPX_CODEC_CAP_PSNR 0x10000
00065 #define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000
00066
00067
00075 #define VPX_CODEC_USE_PSNR 0x10000
00076 #define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000
00084 typedef struct vpx_fixed_buf
00085 {
00086 void *buf;
00087 size_t sz;
00088 } vpx_fixed_buf_t;
00096 typedef int64_t vpx_codec_pts_t;
00097
00098
00106 typedef uint32_t vpx_codec_frame_flags_t;
00107 #define VPX_FRAME_IS_KEY 0x1
00108 #define VPX_FRAME_IS_DROPPABLE 0x2
00111 #define VPX_FRAME_IS_INVISIBLE 0x4
00113 #define VPX_FRAME_IS_FRAGMENT 0x8
00122 typedef uint32_t vpx_codec_er_flags_t;
00123 #define VPX_ERROR_RESILIENT_DEFAULT 0x1
00125 #define VPX_ERROR_RESILIENT_PARTITIONS 0x2
00140 enum vpx_codec_cx_pkt_kind
00141 {
00142 VPX_CODEC_CX_FRAME_PKT,
00143 VPX_CODEC_STATS_PKT,
00144 VPX_CODEC_PSNR_PKT,
00145 VPX_CODEC_CUSTOM_PKT = 256
00146 };
00147
00148
00154 typedef struct vpx_codec_cx_pkt
00155 {
00156 enum vpx_codec_cx_pkt_kind kind;
00157 union
00158 {
00159 struct
00160 {
00161 void *buf;
00162 size_t sz;
00163 vpx_codec_pts_t pts;
00165 unsigned long duration;
00167 vpx_codec_frame_flags_t flags;
00168 int partition_id;
00175 } frame;
00176 struct vpx_fixed_buf twopass_stats;
00177 struct vpx_psnr_pkt
00178 {
00179 unsigned int samples[4];
00180 uint64_t sse[4];
00181 double psnr[4];
00182 } psnr;
00183 struct vpx_fixed_buf raw;
00185
00186
00187
00188
00189
00190 char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)];
00191 } data;
00192 } vpx_codec_cx_pkt_t;
00199 typedef struct vpx_rational
00200 {
00201 int num;
00202 int den;
00203 } vpx_rational_t;
00207 enum vpx_enc_pass
00208 {
00209 VPX_RC_ONE_PASS,
00210 VPX_RC_FIRST_PASS,
00211 VPX_RC_LAST_PASS
00212 };
00213
00214
00216 enum vpx_rc_mode
00217 {
00218 VPX_VBR,
00219 VPX_CBR,
00220 VPX_CQ
00221 };
00222
00223
00232 enum vpx_kf_mode
00233 {
00234 VPX_KF_FIXED,
00235 VPX_KF_AUTO,
00236 VPX_KF_DISABLED = 0
00237 };
00238
00239
00247 typedef long vpx_enc_frame_flags_t;
00248 #define VPX_EFLAG_FORCE_KF (1<<0)
00257 typedef struct vpx_codec_enc_cfg
00258 {
00259
00260
00261
00262
00270 unsigned int g_usage;
00271
00272
00279 unsigned int g_threads;
00280
00281
00290 unsigned int g_profile;
00301 unsigned int g_w;
00302
00303
00311 unsigned int g_h;
00312
00313
00326 struct vpx_rational g_timebase;
00327
00328
00335 vpx_codec_er_flags_t g_error_resilient;
00336
00337
00343 enum vpx_enc_pass g_pass;
00344
00345
00358 unsigned int g_lag_in_frames;
00359
00360
00361
00362
00363
00364
00381 unsigned int rc_dropframe_thresh;
00382
00383
00391 unsigned int rc_resize_allowed;
00392
00393
00400 unsigned int rc_resize_up_thresh;
00401
00402
00409 unsigned int rc_resize_down_thresh;
00410
00411
00420 enum vpx_rc_mode rc_end_usage;
00421
00422
00428 struct vpx_fixed_buf rc_twopass_stats_in;
00429
00430
00435 unsigned int rc_target_bitrate;
00436
00437
00438
00439
00440
00441
00442
00451 unsigned int rc_min_quantizer;
00452
00453
00462 unsigned int rc_max_quantizer;
00463
00464
00465
00466
00467
00468
00469
00480 unsigned int rc_undershoot_pct;
00481
00482
00493 unsigned int rc_overshoot_pct;
00494
00495
00496
00497
00498
00499
00500
00510 unsigned int rc_buf_sz;
00511
00512
00520 unsigned int rc_buf_initial_sz;
00521
00522
00530 unsigned int rc_buf_optimal_sz;
00531
00532
00533
00534
00535
00536
00537
00546 unsigned int rc_2pass_vbr_bias_pct;
00554 unsigned int rc_2pass_vbr_minsection_pct;
00555
00556
00562 unsigned int rc_2pass_vbr_maxsection_pct;
00563
00564
00565
00566
00567
00568
00575 enum vpx_kf_mode kf_mode;
00576
00577
00585 unsigned int kf_min_dist;
00586
00587
00595 unsigned int kf_max_dist;
00596
00597
00598
00599
00600
00605 unsigned int ts_number_layers;
00606
00611 unsigned int ts_target_bitrate[MAX_LAYERS];
00612
00618 unsigned int ts_rate_decimator[MAX_LAYERS];
00619
00627 unsigned int ts_periodicity;
00628
00636 unsigned int ts_layer_id[MAX_PERIODICITY];
00637 } vpx_codec_enc_cfg_t;
00662 vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
00663 vpx_codec_iface_t *iface,
00664 vpx_codec_enc_cfg_t *cfg,
00665 vpx_codec_flags_t flags,
00666 int ver);
00667
00668
00673 #define vpx_codec_enc_init(ctx, iface, cfg, flags) \
00674 vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION)
00675
00676
00701 vpx_codec_err_t vpx_codec_enc_init_multi_ver(vpx_codec_ctx_t *ctx,
00702 vpx_codec_iface_t *iface,
00703 vpx_codec_enc_cfg_t *cfg,
00704 int num_enc,
00705 vpx_codec_flags_t flags,
00706 vpx_rational_t *dsf,
00707 int ver);
00708
00709
00714 #define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \
00715 vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \
00716 VPX_ENCODER_ABI_VERSION)
00717
00718
00738 vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
00739 vpx_codec_enc_cfg_t *cfg,
00740 unsigned int usage);
00741
00742
00757 vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
00758 const vpx_codec_enc_cfg_t *cfg);
00759
00760
00772 vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx);
00773
00774
00775 #define VPX_DL_REALTIME (1)
00777 #define VPX_DL_GOOD_QUALITY (1000000)
00779 #define VPX_DL_BEST_QUALITY (0)
00817 vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
00818 const vpx_image_t *img,
00819 vpx_codec_pts_t pts,
00820 unsigned long duration,
00821 vpx_enc_frame_flags_t flags,
00822 unsigned long deadline);
00823
00867 vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
00868 const vpx_fixed_buf_t *buf,
00869 unsigned int pad_before,
00870 unsigned int pad_after);
00871
00872
00896 const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
00897 vpx_codec_iter_t *iter);
00898
00899
00912 const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx);
00913
00914
00917 #endif
00918 #ifdef __cplusplus
00919 }
00920 #endif