123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- * 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 VP9_ENCODER_VP9_ALT_REF_AQ_H_
- #define 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();
- /*!\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 // VP9_ENCODER_VP9_ALT_REF_AQ_H_
|