-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
EHN: header file added, no need to download source code anymore.
- Loading branch information
1 parent
94e10a3
commit df42091
Showing
10 changed files
with
3,481 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
/* | ||
* Copyright (c) 2013 The WebM project authors. All Rights Reserved. | ||
* | ||
* Use of this source code is governed by a BSD-style license | ||
* that can be found in the LICENSE file in the root of the source | ||
* tree. An additional intellectual property rights grant can be found | ||
* in the file PATENTS. All contributing project authors may | ||
* be found in the AUTHORS file in the root of the source tree. | ||
*/ | ||
|
||
/** | ||
* SvcContext - input parameters and state to encode a multi-layered | ||
* spatial SVC frame | ||
*/ | ||
|
||
#ifndef VPX_SVC_CONTEXT_H_ | ||
#define VPX_SVC_CONTEXT_H_ | ||
|
||
#include "./vp8cx.h" | ||
#include "./vpx_encoder.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
typedef enum SVC_LOG_LEVEL { | ||
SVC_LOG_ERROR, | ||
SVC_LOG_INFO, | ||
SVC_LOG_DEBUG | ||
} SVC_LOG_LEVEL; | ||
|
||
typedef struct { | ||
// public interface to svc_command options | ||
int spatial_layers; // number of spatial layers | ||
int temporal_layers; // number of temporal layers | ||
int temporal_layering_mode; | ||
SVC_LOG_LEVEL log_level; // amount of information to display | ||
int log_print; // when set, printf log messages instead of returning the | ||
// message with svc_get_message | ||
int output_rc_stat; // for outputting rc stats | ||
int speed; // speed setting for codec | ||
int threads; | ||
int aqmode; // turns on aq-mode=3 (cyclic_refresh): 0=off, 1=on. | ||
// private storage for vpx_svc_encode | ||
void *internal; | ||
} SvcContext; | ||
|
||
#define OPTION_BUFFER_SIZE 1024 | ||
#define COMPONENTS 4 // psnr & sse statistics maintained for total, y, u, v | ||
|
||
typedef struct SvcInternal { | ||
char options[OPTION_BUFFER_SIZE]; // set by vpx_svc_set_options | ||
|
||
// values extracted from option, quantizers | ||
vpx_svc_extra_cfg_t svc_params; | ||
int enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; | ||
int bitrates[VPX_MAX_LAYERS]; | ||
|
||
// accumulated statistics | ||
double psnr_sum[VPX_SS_MAX_LAYERS][COMPONENTS]; // total/Y/U/V | ||
uint64_t sse_sum[VPX_SS_MAX_LAYERS][COMPONENTS]; | ||
uint32_t bytes_sum[VPX_SS_MAX_LAYERS]; | ||
|
||
// codec encoding values | ||
int width; // width of highest layer | ||
int height; // height of highest layer | ||
int kf_dist; // distance between keyframes | ||
|
||
// state variables | ||
int psnr_pkt_received; | ||
int layer; | ||
int use_multiple_frame_contexts; | ||
|
||
char message_buffer[2048]; | ||
vpx_codec_ctx_t *codec_ctx; | ||
} SvcInternal_t; | ||
|
||
/** | ||
* Set SVC options | ||
* options are supplied as a single string separated by spaces | ||
* Format: encoding-mode=<i|ip|alt-ip|gf> | ||
* layers=<layer_count> | ||
* scaling-factors=<n1>/<d1>,<n2>/<d2>,... | ||
* quantizers=<q1>,<q2>,... | ||
*/ | ||
vpx_codec_err_t vpx_svc_set_options(SvcContext *svc_ctx, const char *options); | ||
|
||
/** | ||
* initialize SVC encoding | ||
*/ | ||
vpx_codec_err_t vpx_svc_init(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx, | ||
vpx_codec_iface_t *iface, | ||
vpx_codec_enc_cfg_t *cfg); | ||
/** | ||
* encode a frame of video with multiple layers | ||
*/ | ||
vpx_codec_err_t vpx_svc_encode(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx, | ||
struct vpx_image *rawimg, vpx_codec_pts_t pts, | ||
int64_t duration, int deadline); | ||
|
||
/** | ||
* finished with svc encoding, release allocated resources | ||
*/ | ||
void vpx_svc_release(SvcContext *svc_ctx); | ||
|
||
/** | ||
* dump accumulated statistics and reset accumulated values | ||
*/ | ||
const char *vpx_svc_dump_statistics(SvcContext *svc_ctx); | ||
|
||
/** | ||
* get status message from previous encode | ||
*/ | ||
const char *vpx_svc_get_message(const SvcContext *svc_ctx); | ||
|
||
#ifdef __cplusplus | ||
} // extern "C" | ||
#endif | ||
|
||
#endif // VPX_SVC_CONTEXT_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
/* | ||
* Copyright (c) 2010 The WebM project authors. All Rights Reserved. | ||
* | ||
* Use of this source code is governed by a BSD-style license | ||
* that can be found in the LICENSE file in the root of the source | ||
* tree. An additional intellectual property rights grant can be found | ||
* in the file PATENTS. All contributing project authors may | ||
* be found in the AUTHORS file in the root of the source tree. | ||
*/ | ||
|
||
/*!\defgroup vp8 VP8 | ||
* \ingroup codecs | ||
* VP8 is vpx's newest video compression algorithm that uses motion | ||
* compensated prediction, Discrete Cosine Transform (DCT) coding of the | ||
* prediction error signal and context dependent entropy coding techniques | ||
* based on arithmetic principles. It features: | ||
* - YUV 4:2:0 image format | ||
* - Macro-block based coding (16x16 luma plus two 8x8 chroma) | ||
* - 1/4 (1/8) pixel accuracy motion compensated prediction | ||
* - 4x4 DCT transform | ||
* - 128 level linear quantizer | ||
* - In loop deblocking filter | ||
* - Context-based entropy coding | ||
* | ||
* @{ | ||
*/ | ||
/*!\file | ||
* \brief Provides controls common to both the VP8 encoder and decoder. | ||
*/ | ||
#ifndef VPX_VP8_H_ | ||
#define VPX_VP8_H_ | ||
|
||
#include "./vpx_codec.h" | ||
#include "./vpx_image.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/*!\brief Control functions | ||
* | ||
* The set of macros define the control functions of VP8 interface | ||
*/ | ||
enum vp8_com_control_id { | ||
/*!\brief pass in an external frame into decoder to be used as reference frame | ||
*/ | ||
VP8_SET_REFERENCE = 1, | ||
VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ | ||
VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ | ||
VP8_SET_DBG_COLOR_REF_FRAME = 4, /**< \deprecated */ | ||
VP8_SET_DBG_COLOR_MB_MODES = 5, /**< \deprecated */ | ||
VP8_SET_DBG_COLOR_B_MODES = 6, /**< \deprecated */ | ||
VP8_SET_DBG_DISPLAY_MV = 7, /**< \deprecated */ | ||
|
||
/* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) | ||
* for its control ids. These should be migrated to something like the | ||
* VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. | ||
*/ | ||
VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ | ||
VP8_COMMON_CTRL_ID_MAX, | ||
VP8_DECODER_CTRL_ID_START = 256 | ||
}; | ||
|
||
/*!\brief post process flags | ||
* | ||
* The set of macros define VP8 decoder post processing flags | ||
*/ | ||
enum vp8_postproc_level { | ||
VP8_NOFILTERING = 0, | ||
VP8_DEBLOCK = 1 << 0, | ||
VP8_DEMACROBLOCK = 1 << 1, | ||
VP8_ADDNOISE = 1 << 2, | ||
VP8_DEBUG_TXT_FRAME_INFO = 1 << 3, /**< print frame information */ | ||
VP8_DEBUG_TXT_MBLK_MODES = | ||
1 << 4, /**< print macro block modes over each macro block */ | ||
VP8_DEBUG_TXT_DC_DIFF = 1 << 5, /**< print dc diff for each macro block */ | ||
VP8_DEBUG_TXT_RATE_INFO = 1 << 6, /**< print video rate info (encoder only) */ | ||
VP8_MFQE = 1 << 10 | ||
}; | ||
|
||
/*!\brief post process flags | ||
* | ||
* This define a structure that describe the post processing settings. For | ||
* the best objective measure (using the PSNR metric) set post_proc_flag | ||
* to VP8_DEBLOCK and deblocking_level to 1. | ||
*/ | ||
|
||
typedef struct vp8_postproc_cfg { | ||
/*!\brief the types of post processing to be done, should be combination of | ||
* "vp8_postproc_level" */ | ||
int post_proc_flag; | ||
int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ | ||
int noise_level; /**< the strength of additive noise, valid range [0, 16] */ | ||
} vp8_postproc_cfg_t; | ||
|
||
/*!\brief reference frame type | ||
* | ||
* The set of macros define the type of VP8 reference frames | ||
*/ | ||
typedef enum vpx_ref_frame_type { | ||
VP8_LAST_FRAME = 1, | ||
VP8_GOLD_FRAME = 2, | ||
VP8_ALTR_FRAME = 4 | ||
} vpx_ref_frame_type_t; | ||
|
||
/*!\brief reference frame data struct | ||
* | ||
* Define the data struct to access vp8 reference frames. | ||
*/ | ||
typedef struct vpx_ref_frame { | ||
vpx_ref_frame_type_t frame_type; /**< which reference frame */ | ||
vpx_image_t img; /**< reference frame data in image format */ | ||
} vpx_ref_frame_t; | ||
|
||
/*!\brief VP9 specific reference frame data struct | ||
* | ||
* Define the data struct to access vp9 reference frames. | ||
*/ | ||
typedef struct vp9_ref_frame { | ||
int idx; /**< frame index to get (input) */ | ||
vpx_image_t img; /**< img structure to populate (output) */ | ||
} vp9_ref_frame_t; | ||
|
||
/*!\cond */ | ||
/*!\brief vp8 decoder control function parameter type | ||
* | ||
* defines the data type for each of VP8 decoder control function requires | ||
*/ | ||
VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) | ||
#define VPX_CTRL_VP8_SET_REFERENCE | ||
VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) | ||
#define VPX_CTRL_VP8_COPY_REFERENCE | ||
VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) | ||
#define VPX_CTRL_VP8_SET_POSTPROC | ||
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_REF_FRAME, int) | ||
#define VPX_CTRL_VP8_SET_DBG_COLOR_REF_FRAME | ||
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_MB_MODES, int) | ||
#define VPX_CTRL_VP8_SET_DBG_COLOR_MB_MODES | ||
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_COLOR_B_MODES, int) | ||
#define VPX_CTRL_VP8_SET_DBG_COLOR_B_MODES | ||
VPX_CTRL_USE_TYPE_DEPRECATED(VP8_SET_DBG_DISPLAY_MV, int) | ||
#define VPX_CTRL_VP8_SET_DBG_DISPLAY_MV | ||
VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) | ||
#define VPX_CTRL_VP9_GET_REFERENCE | ||
|
||
/*!\endcond */ | ||
/*! @} - end defgroup vp8 */ | ||
|
||
#ifdef __cplusplus | ||
} // extern "C" | ||
#endif | ||
|
||
#endif // VPX_VP8_H_ |
Oops, something went wrong.