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
00044 #define VPX_ENCODER_ABI_VERSION (2 + VPX_CODEC_ABI_VERSION)
00056 #define VPX_CODEC_CAP_PSNR 0x10000
00063 #define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000
00064
00065
00073 #define VPX_CODEC_USE_PSNR 0x10000
00074 #define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000
00082 typedef struct vpx_fixed_buf
00083 {
00084 void *buf;
00085 size_t sz;
00086 } vpx_fixed_buf_t;
00094 typedef int64_t vpx_codec_pts_t;
00095
00096
00104 typedef uint32_t vpx_codec_frame_flags_t;
00105 #define VPX_FRAME_IS_KEY 0x1
00106 #define VPX_FRAME_IS_DROPPABLE 0x2
00109 #define VPX_FRAME_IS_INVISIBLE 0x4
00111 #define VPX_FRAME_IS_FRAGMENT 0x8
00120 typedef uint32_t vpx_codec_er_flags_t;
00121 #define VPX_ERROR_RESILIENT_DEFAULT 0x1
00123 #define VPX_ERROR_RESILIENT_PARTITIONS 0x2
00138 enum vpx_codec_cx_pkt_kind
00139 {
00140 VPX_CODEC_CX_FRAME_PKT,
00141 VPX_CODEC_STATS_PKT,
00142 VPX_CODEC_PSNR_PKT,
00143 VPX_CODEC_CUSTOM_PKT = 256
00144 };
00145
00146
00152 typedef struct vpx_codec_cx_pkt
00153 {
00154 enum vpx_codec_cx_pkt_kind kind;
00155 union
00156 {
00157 struct
00158 {
00159 void *buf;
00160 size_t sz;
00161 vpx_codec_pts_t pts;
00163 unsigned long duration;
00165 vpx_codec_frame_flags_t flags;
00166 int partition_id;
00173 } frame;
00174 struct vpx_fixed_buf twopass_stats;
00175 struct vpx_psnr_pkt
00176 {
00177 unsigned int samples[4];
00178 uint64_t sse[4];
00179 double psnr[4];
00180 } psnr;
00181 struct vpx_fixed_buf raw;
00183
00184
00185
00186
00187
00188 char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)];
00189 } data;
00190 } vpx_codec_cx_pkt_t;
00197 typedef struct vpx_rational
00198 {
00199 int num;
00200 int den;
00201 } vpx_rational_t;
00205 enum vpx_enc_pass
00206 {
00207 VPX_RC_ONE_PASS,
00208 VPX_RC_FIRST_PASS,
00209 VPX_RC_LAST_PASS
00210 };
00211
00212
00214 enum vpx_rc_mode
00215 {
00216 VPX_VBR,
00217 VPX_CBR,
00218 VPX_CQ
00219 };
00220
00221
00230 enum vpx_kf_mode
00231 {
00232 VPX_KF_FIXED,
00233 VPX_KF_AUTO,
00234 VPX_KF_DISABLED = 0
00235 };
00236
00237
00245 typedef long vpx_enc_frame_flags_t;
00246 #define VPX_EFLAG_FORCE_KF (1<<0)
00255 typedef struct vpx_codec_enc_cfg
00256 {
00257
00258
00259
00260
00268 unsigned int g_usage;
00269
00270
00277 unsigned int g_threads;
00278
00279
00288 unsigned int g_profile;
00299 unsigned int g_w;
00300
00301
00309 unsigned int g_h;
00310
00311
00324 struct vpx_rational g_timebase;
00325
00326
00333 vpx_codec_er_flags_t g_error_resilient;
00334
00335
00341 enum vpx_enc_pass g_pass;
00342
00343
00356 unsigned int g_lag_in_frames;
00357
00358
00359
00360
00361
00362
00379 unsigned int rc_dropframe_thresh;
00380
00381
00389 unsigned int rc_resize_allowed;
00390
00391
00398 unsigned int rc_resize_up_thresh;
00399
00400
00407 unsigned int rc_resize_down_thresh;
00408
00409
00418 enum vpx_rc_mode rc_end_usage;
00419
00420
00426 struct vpx_fixed_buf rc_twopass_stats_in;
00427
00428
00433 unsigned int rc_target_bitrate;
00434
00435
00436
00437
00438
00439
00440
00449 unsigned int rc_min_quantizer;
00450
00451
00460 unsigned int rc_max_quantizer;
00461
00462
00463
00464
00465
00466
00467
00478 unsigned int rc_undershoot_pct;
00479
00480
00491 unsigned int rc_overshoot_pct;
00492
00493
00494
00495
00496
00497
00498
00508 unsigned int rc_buf_sz;
00509
00510
00518 unsigned int rc_buf_initial_sz;
00519
00520
00528 unsigned int rc_buf_optimal_sz;
00529
00530
00531
00532
00533
00534
00535
00544 unsigned int rc_2pass_vbr_bias_pct;
00552 unsigned int rc_2pass_vbr_minsection_pct;
00553
00554
00560 unsigned int rc_2pass_vbr_maxsection_pct;
00561
00562
00563
00564
00565
00566
00573 enum vpx_kf_mode kf_mode;
00574
00575
00583 unsigned int kf_min_dist;
00584
00585
00593 unsigned int kf_max_dist;
00594
00595 } vpx_codec_enc_cfg_t;
00620 vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
00621 vpx_codec_iface_t *iface,
00622 vpx_codec_enc_cfg_t *cfg,
00623 vpx_codec_flags_t flags,
00624 int ver);
00625
00626
00631 #define vpx_codec_enc_init(ctx, iface, cfg, flags) \
00632 vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION)
00633
00634
00654 vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
00655 vpx_codec_enc_cfg_t *cfg,
00656 unsigned int usage);
00657
00658
00673 vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
00674 const vpx_codec_enc_cfg_t *cfg);
00675
00676
00688 vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx);
00689
00690
00691 #define VPX_DL_REALTIME (1)
00693 #define VPX_DL_GOOD_QUALITY (1000000)
00695 #define VPX_DL_BEST_QUALITY (0)
00733 vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
00734 const vpx_image_t *img,
00735 vpx_codec_pts_t pts,
00736 unsigned long duration,
00737 vpx_enc_frame_flags_t flags,
00738 unsigned long deadline);
00739
00740
00784 vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
00785 const vpx_fixed_buf_t *buf,
00786 unsigned int pad_before,
00787 unsigned int pad_after);
00788
00789
00813 const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
00814 vpx_codec_iter_t *iter);
00815
00816
00829 const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx);
00830
00831
00834 #endif
00835 #ifdef __cplusplus
00836 }
00837 #endif