OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright (c) 2013 The WebM project authors. All Rights Reserved. |
| 3 * |
| 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 |
| 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ |
| 10 |
| 11 /** |
| 12 * SvcContext - input parameters and state to encode a multi-layered |
| 13 * spatial SVC frame |
| 14 */ |
| 15 |
| 16 #ifndef VPX_SVC_CONTEXT_H_ |
| 17 #define VPX_SVC_CONTEXT_H_ |
| 18 |
| 19 #include "vpx/vp8cx.h" |
| 20 #include "vpx/vpx_encoder.h" |
| 21 |
| 22 #ifdef __cplusplus |
| 23 extern "C" { |
| 24 #endif |
| 25 |
| 26 typedef enum SVC_ENCODING_MODE { |
| 27 INTER_LAYER_PREDICTION_I, |
| 28 ALT_INTER_LAYER_PREDICTION_IP, |
| 29 INTER_LAYER_PREDICTION_IP, |
| 30 USE_GOLDEN_FRAME |
| 31 } SVC_ENCODING_MODE; |
| 32 |
| 33 typedef enum SVC_LOG_LEVEL { |
| 34 SVC_LOG_ERROR, |
| 35 SVC_LOG_INFO, |
| 36 SVC_LOG_DEBUG |
| 37 } SVC_LOG_LEVEL; |
| 38 |
| 39 typedef struct { |
| 40 // public interface to svc_command options |
| 41 int spatial_layers; // number of layers |
| 42 SVC_ENCODING_MODE encoding_mode; // svc encoding strategy |
| 43 SVC_LOG_LEVEL log_level; // amount of information to display |
| 44 int log_print; // when set, printf log messages instead of returning the |
| 45 // message with svc_get_message |
| 46 |
| 47 // private storage for vpx_svc_encode |
| 48 void *internal; |
| 49 } SvcContext; |
| 50 |
| 51 /** |
| 52 * Set SVC options |
| 53 * options are supplied as a single string separated by spaces |
| 54 * Format: encoding-mode=<i|ip|alt-ip|gf> |
| 55 * layers=<layer_count> |
| 56 * scaling-factors=<n1>/<d1>,<n2>/<d2>,... |
| 57 * quantizers=<q1>,<q2>,... |
| 58 */ |
| 59 vpx_codec_err_t vpx_svc_set_options(SvcContext *svc_ctx, const char *options); |
| 60 |
| 61 /** |
| 62 * Set SVC quantizer values |
| 63 * values comma separated, ordered from lowest resolution to highest |
| 64 * e.g., "60,53,39,33,27" |
| 65 */ |
| 66 vpx_codec_err_t vpx_svc_set_quantizers(SvcContext *svc_ctx, |
| 67 const char *quantizer_values); |
| 68 |
| 69 /** |
| 70 * Set SVC scale factors |
| 71 * values comma separated, ordered from lowest resolution to highest |
| 72 * e.g., "4/16,5/16,7/16,11/16,16/16" |
| 73 */ |
| 74 vpx_codec_err_t vpx_svc_set_scale_factors(SvcContext *svc_ctx, |
| 75 const char *scale_factors); |
| 76 |
| 77 /** |
| 78 * initialize SVC encoding |
| 79 */ |
| 80 vpx_codec_err_t vpx_svc_init(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx, |
| 81 vpx_codec_iface_t *iface, |
| 82 vpx_codec_enc_cfg_t *cfg); |
| 83 /** |
| 84 * encode a frame of video with multiple layers |
| 85 */ |
| 86 vpx_codec_err_t vpx_svc_encode(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx, |
| 87 struct vpx_image *rawimg, vpx_codec_pts_t pts, |
| 88 int64_t duration, int deadline); |
| 89 |
| 90 /** |
| 91 * finished with svc encoding, release allocated resources |
| 92 */ |
| 93 void vpx_svc_release(SvcContext *svc_ctx); |
| 94 |
| 95 /** |
| 96 * dump accumulated statistics and reset accumulated values |
| 97 */ |
| 98 const char *vpx_svc_dump_statistics(SvcContext *svc_ctx); |
| 99 |
| 100 /** |
| 101 * get status message from previous encode |
| 102 */ |
| 103 const char *vpx_svc_get_message(const SvcContext *svc_ctx); |
| 104 |
| 105 /** |
| 106 * return size of encoded data to be returned by vpx_svc_get_buffer |
| 107 */ |
| 108 size_t vpx_svc_get_frame_size(const SvcContext *svc_ctx); |
| 109 |
| 110 /** |
| 111 * return buffer with encoded data |
| 112 */ |
| 113 void *vpx_svc_get_buffer(const SvcContext *svc_ctx); |
| 114 |
| 115 /** |
| 116 * return spatial resolution of the specified layer |
| 117 */ |
| 118 vpx_codec_err_t vpx_svc_get_layer_resolution(const SvcContext *svc_ctx, |
| 119 int layer, |
| 120 unsigned int *width, |
| 121 unsigned int *height); |
| 122 /** |
| 123 * return number of frames that have been encoded |
| 124 */ |
| 125 int vpx_svc_get_encode_frame_count(const SvcContext *svc_ctx); |
| 126 |
| 127 /** |
| 128 * return 1 if last encoded frame was a keyframe |
| 129 */ |
| 130 int vpx_svc_is_keyframe(const SvcContext *svc_ctx); |
| 131 |
| 132 /** |
| 133 * force the next frame to be a keyframe |
| 134 */ |
| 135 void vpx_svc_set_keyframe(SvcContext *svc_ctx); |
| 136 |
| 137 #ifdef __cplusplus |
| 138 } // extern "C" |
| 139 #endif |
| 140 |
| 141 #endif /* VPX_SVC_CONTEXT_H_ */ |
OLD | NEW |