| /* |
| * Copyright (c) 2019, Alliance for Open Media. All rights reserved |
| * |
| * This source code is subject to the terms of the BSD 2 Clause License and |
| * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License |
| * was not distributed with this source code in the LICENSE file, you can |
| * obtain it at www.aomedia.org/license/software. If the Alliance for Open |
| * Media Patent License 1.0 was not distributed with this source code in the |
| * PATENTS file, you can obtain it at www.aomedia.org/license/patent. |
| */ |
| |
| #ifndef AOM_AV1_ENCODER_LEVEL_H_ |
| #define AOM_AV1_ENCODER_LEVEL_H_ |
| |
| #include "av1/common/enums.h" |
| |
| struct AV1_COMP; |
| |
| // AV1 Level Specifications |
| typedef struct { |
| AV1_LEVEL level; |
| int max_picture_size; |
| int max_h_size; |
| int max_v_size; |
| int max_header_rate; |
| int max_tiles; |
| int max_tile_cols; |
| int64_t max_display_rate; |
| int64_t max_decode_rate; |
| double main_mbps; |
| double high_mbps; |
| double main_cr; |
| double high_cr; |
| } AV1LevelSpec; |
| |
| typedef struct { |
| int64_t ts_start; |
| int64_t ts_end; |
| int pic_size; |
| int frame_header_count; |
| int show_frame; |
| int show_existing_frame; |
| } FrameRecord; |
| |
| // Record frame info. in a rolling window. |
| #define FRAME_WINDOW_SIZE 256 |
| typedef struct { |
| FrameRecord buf[FRAME_WINDOW_SIZE]; |
| int num; // Number of FrameRecord stored in the buffer. |
| int start; // Buffer index of the first FrameRecord. |
| } FrameWindowBuffer; |
| |
| // Used to keep track of AV1 Level Stats. Currently unimplemented. |
| typedef struct { |
| uint64_t total_compressed_size; |
| int max_tile_size; |
| int min_cropped_tile_width; |
| int min_cropped_tile_height; |
| int tile_width_is_valid; |
| double total_time_encoded; |
| double min_cr; |
| } AV1LevelStats; |
| |
| typedef struct { |
| AV1LevelStats level_stats; |
| AV1LevelSpec level_spec; |
| } AV1LevelInfo; |
| |
| void av1_update_level_info(struct AV1_COMP *cpi, size_t size, int64_t ts_start, |
| int64_t ts_end); |
| |
| // Return sequence level indices in seq_level_idx[MAX_NUM_OPERATING_POINTS]. |
| aom_codec_err_t av1_get_seq_level_idx(const struct AV1_COMP *cpi, |
| int *seq_level_idx); |
| |
| #endif // AOM_AV1_ENCODER_LEVEL_H_ |