#ifndef ENCODER_H_ #define ENCODER_H_ /***************************************************************************** * This file is part of uvg266 VVC encoder. * * Copyright (c) 2021, Tampere University, ITU/ISO/IEC, project contributors * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, this * list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * * * Neither the name of the Tampere University or ITU/ISO/IEC nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS ****************************************************************************/ /** * \ingroup Control * \file * Initialization of encoder_control_t. */ #include "global.h" // IWYU pragma: keep #include "uvg266.h" #include "scalinglist.h" #include "threadqueue.h" #include "fast_coeff_cost.h" /* Encoder control options, the main struct */ typedef struct encoder_control_t { /** * \brief Configuration. * * NOTE: The following fields are not copied from the config passed to * uvg_encoder_control_init and must not be accessed: * - cqmfile * - tiles_width_split * - tiles_height_split * - slice_addresses_in_ts * Use appropriate fields in encoder_control_t instead. */ uvg_config cfg; /* Input */ struct { int32_t width; int32_t height; int32_t width_in_lcu; int32_t height_in_lcu; int32_t real_width; /*!< \brief real input picture width */ int32_t real_height; /*!< \brief real input picture height */ int64_t pixels_per_pic; int8_t source_scan_type; } in; /* TODO: add ME data */ struct { void(*IME)(); void(*FME)(); int range; } me; int8_t bitdepth; enum uvg_chroma_format chroma_format; /* VUI */ struct { /* Timing info */ int32_t num_units_in_tick; /*!< \brief Timing scale numerator */ int32_t time_scale; /*!< \brief Timing scale denominator */ int8_t field_seq_flag; int8_t frame_field_info_present_flag; int8_t timing_info_present_flag; } vui; //scaling list scaling_list_t scaling_list; //spec: references to variables defined in Rec. ITU-T H.265 (04/2013) int8_t tiles_enable; /*!