Skip to content

Commit df42091

Browse files
committed
EHN: header file added, no need to download source code anymore.
1 parent 94e10a3 commit df42091

File tree

10 files changed

+3481
-0
lines changed

10 files changed

+3481
-0
lines changed

vpx/svc_context.h

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
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 "./vp8cx.h"
20+
#include "./vpx_encoder.h"
21+
22+
#ifdef __cplusplus
23+
extern "C" {
24+
#endif
25+
26+
typedef enum SVC_LOG_LEVEL {
27+
SVC_LOG_ERROR,
28+
SVC_LOG_INFO,
29+
SVC_LOG_DEBUG
30+
} SVC_LOG_LEVEL;
31+
32+
typedef struct {
33+
// public interface to svc_command options
34+
int spatial_layers; // number of spatial layers
35+
int temporal_layers; // number of temporal layers
36+
int temporal_layering_mode;
37+
SVC_LOG_LEVEL log_level; // amount of information to display
38+
int log_print; // when set, printf log messages instead of returning the
39+
// message with svc_get_message
40+
int output_rc_stat; // for outputting rc stats
41+
int speed; // speed setting for codec
42+
int threads;
43+
int aqmode; // turns on aq-mode=3 (cyclic_refresh): 0=off, 1=on.
44+
// private storage for vpx_svc_encode
45+
void *internal;
46+
} SvcContext;
47+
48+
#define OPTION_BUFFER_SIZE 1024
49+
#define COMPONENTS 4 // psnr & sse statistics maintained for total, y, u, v
50+
51+
typedef struct SvcInternal {
52+
char options[OPTION_BUFFER_SIZE]; // set by vpx_svc_set_options
53+
54+
// values extracted from option, quantizers
55+
vpx_svc_extra_cfg_t svc_params;
56+
int enable_auto_alt_ref[VPX_SS_MAX_LAYERS];
57+
int bitrates[VPX_MAX_LAYERS];
58+
59+
// accumulated statistics
60+
double psnr_sum[VPX_SS_MAX_LAYERS][COMPONENTS]; // total/Y/U/V
61+
uint64_t sse_sum[VPX_SS_MAX_LAYERS][COMPONENTS];
62+
uint32_t bytes_sum[VPX_SS_MAX_LAYERS];
63+
64+
// codec encoding values
65+
int width; // width of highest layer
66+
int height; // height of highest layer
67+
int kf_dist; // distance between keyframes
68+
69+
// state variables
70+
int psnr_pkt_received;
71+
int layer;
72+
int use_multiple_frame_contexts;
73+
74+
char message_buffer[2048];
75+
vpx_codec_ctx_t *codec_ctx;
76+
} SvcInternal_t;
77+
78+
/**
79+
* Set SVC options
80+
* options are supplied as a single string separated by spaces
81+
* Format: encoding-mode=<i|ip|alt-ip|gf>
82+
* layers=<layer_count>
83+
* scaling-factors=<n1>/<d1>,<n2>/<d2>,...
84+
* quantizers=<q1>,<q2>,...
85+
*/
86+
vpx_codec_err_t vpx_svc_set_options(SvcContext *svc_ctx, const char *options);
87+
88+
/**
89+
* initialize SVC encoding
90+
*/
91+
vpx_codec_err_t vpx_svc_init(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx,
92+
vpx_codec_iface_t *iface,
93+
vpx_codec_enc_cfg_t *cfg);
94+
/**
95+
* encode a frame of video with multiple layers
96+
*/
97+
vpx_codec_err_t vpx_svc_encode(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx,
98+
struct vpx_image *rawimg, vpx_codec_pts_t pts,
99+
int64_t duration, int deadline);
100+
101+
/**
102+
* finished with svc encoding, release allocated resources
103+
*/
104+
void vpx_svc_release(SvcContext *svc_ctx);
105+
106+
/**
107+
* dump accumulated statistics and reset accumulated values
108+
*/
109+
const char *vpx_svc_dump_statistics(SvcContext *svc_ctx);
110+
111+
/**
112+
* get status message from previous encode
113+
*/
114+
const char *vpx_svc_get_message(const SvcContext *svc_ctx);
115+
116+
#ifdef __cplusplus
117+
} // extern "C"
118+
#endif
119+
120+
#endif // VPX_SVC_CONTEXT_H_

vpx/vp8.h

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/*
2+
* Copyright (c) 2010 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+
/*!\defgroup vp8 VP8
12+
* \ingroup codecs
13+
* VP8 is vpx's newest video compression algorithm that uses motion
14+
* compensated prediction, Discrete Cosine Transform (DCT) coding of the
15+
* prediction error signal and context dependent entropy coding techniques
16+
* based on arithmetic principles. It features:
17+
* - YUV 4:2:0 image format
18+
* - Macro-block based coding (16x16 luma plus two 8x8 chroma)
19+
* - 1/4 (1/8) pixel accuracy motion compensated prediction
20+
* - 4x4 DCT transform
21+
* - 128 level linear quantizer
22+
* - In loop deblocking filter
23+
* - Context-based entropy coding
24+
*
25+
* @{
26+
*/
27+
/*!\file
28+
* \brief Provides controls common to both the VP8 encoder and decoder.
29+
*/
30+
#ifndef VPX_VP8_H_
31+
#define VPX_VP8_H_
32+
33+
#include "./vpx_codec.h"
34+
#include "./vpx_image.h"
35+
36+
#ifdef __cplusplus
37+
extern "C" {
38+
#endif
39+
40+
/*!\brief Control functions
41+
*
42+
* The set of macros define the control functions of VP8 interface
43+
*/
44+
enum vp8_com_control_id {
45+
/*!\brief pass in an external frame into decoder to be used as reference frame
46+
*/
47+
VP8_SET_REFERENCE = 1,
48+
VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */
49+
VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */
50+
VP8_SET_DBG_COLOR_REF_FRAME = 4, /**< \deprecated */
51+
VP8_SET_DBG_COLOR_MB_MODES = 5, /**< \deprecated */
52+
VP8_SET_DBG_COLOR_B_MODES = 6, /**< \deprecated */
53+
VP8_SET_DBG_DISPLAY_MV = 7, /**< \deprecated */
54+
55+
/* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+)
56+
* for its control ids. These should be migrated to something like the
57+
* VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI.
58+
*/
59+
VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */
60+
VP8_COMMON_CTRL_ID_MAX,
61+
VP8_DECODER_CTRL_ID_START = 256
62+
};
63+
64+
/*!\brief post process flags
65+
*
66+
* The set of macros define VP8 decoder post processing flags
67+
*/
68+
enum vp8_postproc_level {
69+
VP8_NOFILTERING = 0,
70+
VP8_DEBLOCK = 1 << 0,
71+
VP8_DEMACROBLOCK = 1 << 1,
72+
VP8_ADDNOISE = 1 << 2,
73+
VP8_DEBUG_TXT_FRAME_INFO = 1 << 3, /**< print frame information */
74+
VP8_DEBUG_TXT_MBLK_MODES =
75+
1 << 4, /**< print macro block modes over each macro block */
76+
VP8_DEBUG_TXT_DC_DIFF = 1 << 5, /**< print dc diff for each macro block */
77+
VP8_DEBUG_TXT_RATE_INFO = 1 << 6, /**< print video rate info (encoder only) */
78+
VP8_MFQE = 1 << 10
79+
};
80+
81+
/*!\brief post process flags
82+
*
83+
* This define a structure that describe the post processing settings. For
84+
* the best objective measure (using the PSNR metric) set post_proc_flag
85+
* to VP8_DEBLOCK and deblocking_level to 1.
86+
*/
87+
88+
typedef struct vp8_postproc_cfg {
89+
/*!\brief the types of post processing to be done, should be combination of
90+
* "vp8_postproc_level" */
91+
int post_proc_flag;
92+
int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */
93+
int noise_level; /**< the strength of additive noise, valid range [0, 16] */
94+
} vp8_postproc_cfg_t;
95+
96+
/*!\brief reference frame type
97+
*
98+
* The set of macros define the type of VP8 reference frames
99+
*/
100+
typedef enum vpx_ref_frame_type {
101+
VP8_LAST_FRAME = 1,
102+
VP8_GOLD_FRAME = 2,
103+
VP8_ALTR_FRAME = 4
104+
} vpx_ref_frame_type_t;
105+
106+
/*!\brief reference frame data struct
107+
*
108+
* Define the data struct to access vp8 reference frames.
109+
*/
110+
typedef struct vpx_ref_frame {
111+
vpx_ref_frame_type_t frame_type; /**< which reference frame */
112+
vpx_image_t img; /**< reference frame data in image format */
113+
} vpx_ref_frame_t;
114+
115+
/*!\brief VP9 specific reference frame data struct
116+
*
117+
* Define the data struct to access vp9 reference frames.
118+
*/
119+
typedef struct vp9_ref_frame {
120+
int idx; /**< frame index to get (input) */
121+
vpx_image_t img; /**< img structure to populate (output) */
122+
} vp9_ref_frame_t;
123+
124+
/*!\cond */
125+
/*!\brief vp8 decoder control function parameter type
126+
*
127+
* defines the data type for each of VP8 decoder control function requires
128+
*/
129+
VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *)
130+
#define VPX_CTRL_VP8_SET_REFERENCE
131+
VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *)
132+
#define VPX_CTRL_VP8_COPY_REFERENCE
133+
VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *)
134+
#define VPX_CTRL_VP8_SET_POSTPROC
135+
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_REF_FRAME, int)
136+
#define VPX_CTRL_VP8_SET_DBG_COLOR_REF_FRAME
137+
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_MB_MODES, int)
138+
#define VPX_CTRL_VP8_SET_DBG_COLOR_MB_MODES
139+
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_B_MODES, int)
140+
#define VPX_CTRL_VP8_SET_DBG_COLOR_B_MODES
141+
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_DISPLAY_MV, int)
142+
#define VPX_CTRL_VP8_SET_DBG_DISPLAY_MV
143+
VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *)
144+
#define VPX_CTRL_VP9_GET_REFERENCE
145+
146+
/*!\endcond */
147+
/*! @} - end defgroup vp8 */
148+
149+
#ifdef __cplusplus
150+
} // extern "C"
151+
#endif
152+
153+
#endif // VPX_VP8_H_

0 commit comments

Comments
 (0)