| /* |
| * Copyright (c) 2016 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. |
| */ |
| |
| /* |
| * \file vp9_alt_ref_aq.h |
| * |
| * This file contains public interface for setting up adaptive segmentation |
| * for altref frames. Go to alt_ref_aq_private.h for implmentation details. |
| */ |
| |
| #ifndef VPX_VP9_ENCODER_VP9_ALT_REF_AQ_H_ |
| #define VPX_VP9_ENCODER_VP9_ALT_REF_AQ_H_ |
| |
| #include "vpx/vpx_integer.h" |
| |
| // Where to disable segmentation |
| #define ALT_REF_AQ_LOW_BITRATE_BOUNDARY 150 |
| |
| // Last frame always has overall quality = 0, |
| // so it is questionable if I can process it |
| #define ALT_REF_AQ_APPLY_TO_LAST_FRAME 1 |
| |
| // If I should try to compare gain |
| // against segmentation overhead |
| #define ALT_REF_AQ_PROTECT_GAIN 0 |
| |
| // Threshold to disable segmentation |
| #define ALT_REF_AQ_PROTECT_GAIN_THRESH 0.5 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Simple structure for storing images |
| struct MATX_8U { |
| int rows; |
| int cols; |
| int stride; |
| |
| uint8_t *data; |
| }; |
| |
| struct VP9_COMP; |
| struct ALT_REF_AQ; |
| |
| /*!\brief Constructor |
| * |
| * \return Instance of the class |
| */ |
| struct ALT_REF_AQ *vp9_alt_ref_aq_create(void); |
| |
| /*!\brief Upload segmentation_map to self object |
| * |
| * \param self Instance of the class |
| * \param segmentation_map Segmentation map to upload |
| */ |
| void vp9_alt_ref_aq_upload_map(struct ALT_REF_AQ *const self, |
| const struct MATX_8U *segmentation_map); |
| |
| /*!\brief Return pointer to the altref segmentation map |
| * |
| * \param self Instance of the class |
| * \param segmentation_overhead Segmentation overhead in bytes |
| * \param bandwidth Current frame bandwidth in bytes |
| * |
| * \return Boolean value to disable segmentation |
| */ |
| int vp9_alt_ref_aq_disable_if(const struct ALT_REF_AQ *self, |
| int segmentation_overhead, int bandwidth); |
| |
| /*!\brief Set number of segments |
| * |
| * It is used for delta quantizer computations |
| * and thus it can be larger than |
| * maximum value of the segmentation map |
| * |
| * \param self Instance of the class |
| * \param nsegments Maximum number of segments |
| */ |
| void vp9_alt_ref_aq_set_nsegments(struct ALT_REF_AQ *const self, int nsegments); |
| |
| /*!\brief Set up LOOKAHEAD_AQ segmentation mode |
| * |
| * Set up segmentation mode to LOOKAHEAD_AQ |
| * (expected future frames prediction |
| * quality refering to the current frame). |
| * |
| * \param self Instance of the class |
| * \param cpi Encoder context |
| */ |
| void vp9_alt_ref_aq_setup_mode(struct ALT_REF_AQ *const self, |
| struct VP9_COMP *const cpi); |
| |
| /*!\brief Set up LOOKAHEAD_AQ segmentation map and delta quantizers |
| * |
| * \param self Instance of the class |
| * \param cpi Encoder context |
| */ |
| void vp9_alt_ref_aq_setup_map(struct ALT_REF_AQ *const self, |
| struct VP9_COMP *const cpi); |
| |
| /*!\brief Restore main segmentation map mode and reset the class variables |
| * |
| * \param self Instance of the class |
| * \param cpi Encoder context |
| */ |
| void vp9_alt_ref_aq_unset_all(struct ALT_REF_AQ *const self, |
| struct VP9_COMP *const cpi); |
| |
| /*!\brief Destructor |
| * |
| * \param self Instance of the class |
| */ |
| void vp9_alt_ref_aq_destroy(struct ALT_REF_AQ *const self); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // VPX_VP9_ENCODER_VP9_ALT_REF_AQ_H_ |