Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/aom/av1/encoder/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 7 kB image not shown  

Quelle  thirdpass.h   Sprache: C

 
/*
 * Copyright (c) 2021, 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_THIRDPASS_H_
#define AOM_AV1_ENCODER_THIRDPASS_H_

#include "av1/common/enums.h"
#ifdef __cplusplus
extern "C" {
#endif

#include "av1/encoder/firstpass.h"
#include "av1/encoder/ratectrl.h"
#include "av1/encoder/tpl_model.h"

struct AV1_COMP;

// TODO(bohanli): optimize this number
#define MAX_THIRD_PASS_BUF \
  (AOMMAX((2 * MAX_GF_INTERVAL + 1), MAX_STATIC_GF_GROUP_LENGTH))

// Struct to store useful information related to a GOP, in addition to what is
// available in the bitstream
typedef struct {
  int gf_length;
  int num_frames;
  int use_arf;
} THIRD_PASS_GOP_INFO;

#if CONFIG_BITRATE_ACCURACY
typedef struct TPL_INFO {
  int gf_length;
  int tpl_ready;
  TplTxfmStats txfm_stats_list[MAX_LENGTH_TPL_FRAME_STATS];
  double qstep_ratio_ls[MAX_LENGTH_TPL_FRAME_STATS];
  FRAME_UPDATE_TYPE update_type_list[MAX_LENGTH_TPL_FRAME_STATS];
} TPL_INFO;
#endif  // CONFIG_BITRATE_ACCURACY

typedef struct {
  BLOCK_SIZE bsize;
  PARTITION_TYPE partition;
  int mi_row_start;
  int mi_col_start;
  int_mv mv[2];
  MV_REFERENCE_FRAME ref_frame[2];
  PREDICTION_MODE pred_mode;
} THIRD_PASS_MI_INFO;

// Struct to store useful information about a frame for the third pass.
// The members are extracted from the decoder by function get_frame_info.
typedef struct {
  int width;
  int height;
  int mi_stride;
  int mi_rows;
  int mi_cols;
  int base_q_idx;
  int is_show_existing_frame;
  int is_show_frame;
  int bits_allocated;
  int actual_bits;
  uint64_t sse;
  double bpm_factor;
  FRAME_TYPE frame_type;
  unsigned int order_hint;
  THIRD_PASS_MI_INFO *mi_info;
} THIRD_PASS_FRAME_INFO;

typedef struct {
  /* --- Input and decoding related members --- */
  // the input file
  const char *input_file_name;
#if CONFIG_THREE_PASS
  // input context
  struct AvxInputContext *input_ctx;
#endif
  // decoder codec context
  aom_codec_ctx_t decoder;
  // start of the frame in buf
  const unsigned char *frame;
  // end of the frame(s) in buf
  const unsigned char *end_frame;
  // whether we still have following frames in buf
  int have_frame;
  // pointer to buffer for the read frames
  uint8_t *buf;
  // size of data in buffer
  size_t bytes_in_buffer;
  // current buffer size
  size_t buffer_size;
  // error info pointer
  struct aom_internal_error_info *err_info;

  int this_frame_bits;

  /* --- Members for third pass encoding --- */
  // Array to store info about each frame.
  // frame_info[0] should point to the current frame.
  THIRD_PASS_FRAME_INFO frame_info[MAX_THIRD_PASS_BUF];
  // number of frames available in frame_info
  int frame_info_count;
  // the end of the previous GOP (order hint)
  int prev_gop_end;
  THIRD_PASS_GOP_INFO gop_info;
} THIRD_PASS_DEC_CTX;

void av1_init_thirdpass_ctx(AV1_COMMON *cm, THIRD_PASS_DEC_CTX **ctx,
                            const char *file);
void av1_free_thirdpass_ctx(THIRD_PASS_DEC_CTX *ctx);

// Set the GOP structure from the twopass bitstream.
// TODO(bohanli): this is currently a skeleton and we only return the gop
// length. This function also saves all frame information in the array
// ctx->frame_info for this GOP.
void av1_set_gop_third_pass(THIRD_PASS_DEC_CTX *ctx);

// Pop one frame out of the array ctx->frame_info. This function is used to make
// sure that frame_info[0] always corresponds to the current frame.
void av1_pop_third_pass_info(THIRD_PASS_DEC_CTX *ctx);

void av1_open_second_pass_log(struct AV1_COMP *cpi, int is_read);
void av1_close_second_pass_log(struct AV1_COMP *cpi);

// Write the current GOP information into the second pass log file.
void av1_write_second_pass_gop_info(struct AV1_COMP *cpi);
// Write the information of the frames in this GOP into the second pass log
// file.
void av1_write_second_pass_per_frame_info(struct AV1_COMP *cpi, int gf_index);

// Read the next GOP information from the second pass log file.
void av1_read_second_pass_gop_info(FILE *second_pass_log_stream,
                                   THIRD_PASS_GOP_INFO *gop_info,
                                   struct aom_internal_error_info *error);
// read the information of the frames in next GOP from the second pass log file.
void av1_read_second_pass_per_frame_info(FILE *second_pass_log_stream,
                                         THIRD_PASS_FRAME_INFO *frame_info_arr,
                                         int frame_info_count,
                                         struct aom_internal_error_info *error);

int av1_check_use_arf(THIRD_PASS_DEC_CTX *ctx);

// Calculate the ratio of third pass frame dimensions over second pass frame
// dimensions. Return them in ratio_h and ratio_w.
void av1_get_third_pass_ratio(THIRD_PASS_DEC_CTX *ctx, int fidx, int fheight,
                              int fwidth, double *ratio_h, double *ratio_w);

// Get the pointer to a second pass mi info, where mi_row and mi_col are the mi
// location in the thirdpass frame.
THIRD_PASS_MI_INFO *av1_get_third_pass_mi(THIRD_PASS_DEC_CTX *ctx, int fidx,
                                          int mi_row, int mi_col,
                                          double ratio_h, double ratio_w);

// Get the adjusted MVs of this_mi, associated with the reference frame. If no
// MV is found with the reference frame, INVALID_MV is returned.
int_mv av1_get_third_pass_adjusted_mv(THIRD_PASS_MI_INFO *this_mi,
                                      double ratio_h, double ratio_w,
                                      MV_REFERENCE_FRAME frame);

// Get the adjusted block size of this_mi.
BLOCK_SIZE av1_get_third_pass_adjusted_blk_size(THIRD_PASS_MI_INFO *this_mi,
                                                double ratio_h, double ratio_w);

// Get the adjusted mi position in the third pass frame, of a given
// third_pass_mi. Location is returned in mi_row and mi_col.
void av1_third_pass_get_adjusted_mi(THIRD_PASS_MI_INFO *third_pass_mi,
                                    double ratio_h, double ratio_w, int *mi_row,
                                    int *mi_col);

PARTITION_TYPE av1_third_pass_get_sb_part_type(THIRD_PASS_DEC_CTX *ctx,
                                               THIRD_PASS_MI_INFO *this_mi);

#if CONFIG_BITRATE_ACCURACY

void av1_pack_tpl_info(TPL_INFO *tpl_info, const GF_GROUP *gf_group,
                       const TplParams *tpl_data);

void av1_write_tpl_info(const TPL_INFO *tpl_info, FILE *log_stream,
                        struct aom_internal_error_info *error);

void av1_read_tpl_info(TPL_INFO *tpl_info, FILE *log_stream,
                       struct aom_internal_error_info *error);

#endif  // CONFIG_BITRATE_ACCURACY
#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // AOM_AV1_ENCODER_THIRDPASS_H_

Messung V0.5
C=95 H=91 G=92

¤ Dauer der Verarbeitung: 0.29 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.