Add codec control to disable loopfilter for vp9
Change-Id: I6d693e84570c353d20ec314acea43363956c0590
This commit is contained in:
@@ -1054,6 +1054,7 @@ int main(int argc, const char **argv) {
|
|||||||
vpx_codec_control(&encoder, VP9E_SET_TUNE_CONTENT, app_input.tune_content);
|
vpx_codec_control(&encoder, VP9E_SET_TUNE_CONTENT, app_input.tune_content);
|
||||||
|
|
||||||
vpx_codec_control(&encoder, VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR, 0);
|
vpx_codec_control(&encoder, VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR, 0);
|
||||||
|
vpx_codec_control(&encoder, VP9E_SET_DISABLE_LOOPFILTER, 0);
|
||||||
|
|
||||||
svc_drop_frame.framedrop_mode = FULL_SUPERFRAME_DROP;
|
svc_drop_frame.framedrop_mode = FULL_SUPERFRAME_DROP;
|
||||||
for (sl = 0; sl < (unsigned int)svc_ctx.spatial_layers; ++sl)
|
for (sl = 0; sl < (unsigned int)svc_ctx.spatial_layers; ++sl)
|
||||||
|
|||||||
@@ -841,6 +841,7 @@ int main(int argc, char **argv) {
|
|||||||
vpx_codec_control(&codec, VP8E_SET_STATIC_THRESHOLD, 1);
|
vpx_codec_control(&codec, VP8E_SET_STATIC_THRESHOLD, 1);
|
||||||
vpx_codec_control(&codec, VP9E_SET_TUNE_CONTENT, 0);
|
vpx_codec_control(&codec, VP9E_SET_TUNE_CONTENT, 0);
|
||||||
vpx_codec_control(&codec, VP9E_SET_TILE_COLUMNS, get_msb(cfg.g_threads));
|
vpx_codec_control(&codec, VP9E_SET_TILE_COLUMNS, get_msb(cfg.g_threads));
|
||||||
|
vpx_codec_control(&codec, VP9E_SET_DISABLE_LOOPFILTER, 0);
|
||||||
#if ROI_MAP
|
#if ROI_MAP
|
||||||
set_roi_map(encoder->name, &cfg, &roi);
|
set_roi_map(encoder->name, &cfg, &roi);
|
||||||
if (vpx_codec_control(&codec, VP9E_SET_ROI_MAP, &roi))
|
if (vpx_codec_control(&codec, VP9E_SET_ROI_MAP, &roi))
|
||||||
|
|||||||
@@ -3316,6 +3316,12 @@ static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cpi->loopfilter_ctrl == NO_LOOPFILTER ||
|
||||||
|
(!is_reference_frame && cpi->loopfilter_ctrl == LOOPFILTER_REFERENCE)) {
|
||||||
|
lf->filter_level = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (xd->lossless) {
|
if (xd->lossless) {
|
||||||
lf->filter_level = 0;
|
lf->filter_level = 0;
|
||||||
lf->last_filt_level = 0;
|
lf->last_filt_level = 0;
|
||||||
|
|||||||
@@ -147,6 +147,12 @@ typedef enum {
|
|||||||
kVeryHighSad = 6,
|
kVeryHighSad = 6,
|
||||||
} CONTENT_STATE_SB;
|
} CONTENT_STATE_SB;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
LOOPFILTER_ALL = 0,
|
||||||
|
LOOPFILTER_REFERENCE = 1, // Disable loopfilter on non reference frames.
|
||||||
|
NO_LOOPFILTER = 2, // Disable loopfilter on all frames.
|
||||||
|
} LOOPFILTER_CONTROL;
|
||||||
|
|
||||||
typedef struct VP9EncoderConfig {
|
typedef struct VP9EncoderConfig {
|
||||||
BITSTREAM_PROFILE profile;
|
BITSTREAM_PROFILE profile;
|
||||||
vpx_bit_depth_t bit_depth; // Codec bit-depth.
|
vpx_bit_depth_t bit_depth; // Codec bit-depth.
|
||||||
@@ -958,6 +964,8 @@ typedef struct VP9_COMP {
|
|||||||
|
|
||||||
int multi_layer_arf;
|
int multi_layer_arf;
|
||||||
vpx_roi_map_t roi;
|
vpx_roi_map_t roi;
|
||||||
|
|
||||||
|
LOOPFILTER_CONTROL loopfilter_ctrl;
|
||||||
#if CONFIG_RATE_CTRL
|
#if CONFIG_RATE_CTRL
|
||||||
ENCODE_COMMAND encode_command;
|
ENCODE_COMMAND encode_command;
|
||||||
PARTITION_INFO *partition_info;
|
PARTITION_INFO *partition_info;
|
||||||
|
|||||||
@@ -1724,6 +1724,14 @@ static vpx_codec_err_t ctrl_set_disable_overshoot_maxq_cbr(
|
|||||||
return VPX_CODEC_OK;
|
return VPX_CODEC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static vpx_codec_err_t ctrl_set_disable_loopfilter(vpx_codec_alg_priv_t *ctx,
|
||||||
|
va_list args) {
|
||||||
|
VP9_COMP *const cpi = ctx->cpi;
|
||||||
|
const unsigned int data = va_arg(args, unsigned int);
|
||||||
|
cpi->loopfilter_ctrl = data;
|
||||||
|
return VPX_CODEC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
|
static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
|
||||||
{ VP8_COPY_REFERENCE, ctrl_copy_reference },
|
{ VP8_COPY_REFERENCE, ctrl_copy_reference },
|
||||||
|
|
||||||
@@ -1775,6 +1783,7 @@ static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
|
|||||||
{ VP9E_SET_SVC_GF_TEMPORAL_REF, ctrl_set_svc_gf_temporal_ref },
|
{ VP9E_SET_SVC_GF_TEMPORAL_REF, ctrl_set_svc_gf_temporal_ref },
|
||||||
{ VP9E_SET_SVC_SPATIAL_LAYER_SYNC, ctrl_set_svc_spatial_layer_sync },
|
{ VP9E_SET_SVC_SPATIAL_LAYER_SYNC, ctrl_set_svc_spatial_layer_sync },
|
||||||
{ VP9E_SET_DELTA_Q_UV, ctrl_set_delta_q_uv },
|
{ VP9E_SET_DELTA_Q_UV, ctrl_set_delta_q_uv },
|
||||||
|
{ VP9E_SET_DISABLE_LOOPFILTER, ctrl_set_disable_loopfilter },
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
{ VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer },
|
{ VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer },
|
||||||
|
|||||||
12
vpx/vp8cx.h
12
vpx/vp8cx.h
@@ -692,6 +692,15 @@ enum vp8e_enc_control_id {
|
|||||||
* Supported in codecs: VP9
|
* Supported in codecs: VP9
|
||||||
*/
|
*/
|
||||||
VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR,
|
VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR,
|
||||||
|
|
||||||
|
/*!\brief Codec control function to disable loopfilter.
|
||||||
|
*
|
||||||
|
* 0: Loopfilter on all frames, 1: Disable on non reference frames.
|
||||||
|
* 2: Disable on all frames.
|
||||||
|
*
|
||||||
|
* Supported in codecs: VP9
|
||||||
|
*/
|
||||||
|
VP9E_SET_DISABLE_LOOPFILTER,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!\brief vpx 1-D scaling mode
|
/*!\brief vpx 1-D scaling mode
|
||||||
@@ -1044,6 +1053,9 @@ VPX_CTRL_USE_TYPE(VP9E_SET_DELTA_Q_UV, int)
|
|||||||
|
|
||||||
VPX_CTRL_USE_TYPE(VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR, int)
|
VPX_CTRL_USE_TYPE(VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR, int)
|
||||||
#define VPX_CTRL_VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR
|
#define VPX_CTRL_VP9E_SET_DISABLE_OVERSHOOT_MAXQ_CBR
|
||||||
|
|
||||||
|
VPX_CTRL_USE_TYPE(VP9E_SET_DISABLE_LOOPFILTER, int)
|
||||||
|
#define VPX_CTRL_VP9E_SET_DISABLE_LOOPFILTER
|
||||||
/*!\endcond */
|
/*!\endcond */
|
||||||
/*! @} - end defgroup vp8_encoder */
|
/*! @} - end defgroup vp8_encoder */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
Reference in New Issue
Block a user