Go to the documentation of this file.
35 #define INSTR_INDENT 8
36 #define COMMENT_COL 56
39 static
int pos_fprintf(FILE *fp,
int64_t *
pos, const
char *fmt, ...)
44 ret = vfprintf(fp, fmt, args);
53 int cur_col = *
pos - line_start;
54 pos_fprintf(fp,
pos,
"%*s",
FFMAX(col - cur_col, 1),
"");
75 pos_fprintf(fp,
pos,
"%s", rctx->
labels[
id]);
77 int local_id = local_labels[
id];
79 pos_fprintf(fp,
pos,
"%db", -local_id);
81 pos_fprintf(fp,
pos,
"%df", local_id);
95 pos_fprintf(fp,
pos,
"%s",
size ==
sizeof(uint32_t) ?
"wsp" :
"sp");
100 case sizeof(uint32_t): pos_fprintf(fp,
pos,
"w%d", n);
break;
101 case sizeof(uint64_t): pos_fprintf(fp,
pos,
"x%d", n);
break;
124 uint8_t n, uint8_t el_count, uint8_t el_size, uint8_t idx_p1)
127 pos_fprintf(fp,
pos,
"v%u", n);
128 }
else if (el_count != 0) {
145 pos_fprintf(fp,
pos,
"{");
146 for (
int i = 0;
i < num_regs;
i++) {
148 pos_fprintf(fp,
pos,
", ");
151 pos_fprintf(fp,
pos,
"}");
164 pos_fprintf(fp,
pos,
"sp");
166 pos_fprintf(fp,
pos,
"x%d", n);
177 pos_fprintf(fp,
pos,
"[");
180 pos_fprintf(fp,
pos,
", #%d]", imm);
182 pos_fprintf(fp,
pos,
"]");
186 pos_fprintf(fp,
pos,
"[");
188 pos_fprintf(fp,
pos,
", #%d]!", imm);
191 pos_fprintf(fp,
pos,
"[");
193 pos_fprintf(fp,
pos,
"], #%d", imm);
340 const int *local_labels)
354 for (
int j = op_start; j < 4; j++) {
359 pos_fprintf(fp,
pos,
", ");
385 pos_fprintf(fp,
pos,
"%s:", rctx->
labels[
id]);
388 int local_id = local_labels[
id];
390 pos_fprintf(fp,
pos,
"%d:", -local_id);
392 pos_fprintf(fp,
pos,
"%d:", local_id);
393 local_labels[
id] = -local_id;
415 pos_fprintf(fp,
pos,
"endfunc");
435 int *local_labels =
NULL;
449 memset(local_labels, 0x00, rctx->
num_labels *
sizeof(*local_labels));
452 int id = node->label.id;
454 local_labels[
id] = local_label++;
462 switch (node->type) {
485 if (node->inline_comment) {
487 pos_fprintf(fp, &
pos,
"// %s", node->inline_comment);
489 pos_fprintf(fp, &
pos,
"\n");
493 pos_fprintf(fp, &
pos,
"\n");
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static char elem_type_char(uint8_t elem_size)
static void print_node_function(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node)
static void print_op(const RasmContext *rctx, FILE *fp, int64_t *pos, const int *local_labels, RasmOp op)
static uint8_t a64op_vec_idx_p1(RasmOp op)
#define INSTR_INDENT
Static file backend for the runtime assembler.
static uint8_t rasm_op_type(RasmOp op)
static void print_op_imm(FILE *fp, int64_t *pos, RasmOp op)
static uint8_t a64op_vec_n(RasmOp op)
static const char * cond_name(uint8_t cond)
Runtime assembler for AArch64.
#define AARCH64_BASE_POST
static int32_t rasm_op_imm_val(RasmOp op)
static void print_node_label(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node, int *local_labels)
static void print_op_label(const RasmContext *rctx, FILE *fp, int64_t *pos, RasmOp op, const int *local_labels)
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static void print_node_comment(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node)
static void print_node_insn(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node, const int *local_labels)
static const char insn_names[AARCH64_INSN_NB][8]
static void print_base_reg(FILE *fp, int64_t *pos, uint8_t n)
static int16_t a64op_base_imm(RasmOp op)
static void print_node_endfunc(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node)
static void print_op_gpr(FILE *fp, int64_t *pos, RasmOp op)
static const char * insn_name(int id)
static void print_op_base(FILE *fp, int64_t *pos, RasmOp op)
#define i(width, name, range_min, range_max)
static uint8_t a64op_base_n(RasmOp op)
static void print_node_directive(const RasmContext *rctx, FILE *fp, int64_t *pos, int64_t line_start, const RasmNode *node)
static uint8_t a64op_vec_num_regs(RasmOp op)
static uint8_t a64op_vec_el_count(RasmOp op)
static uint8_t a64op_gpr_size(RasmOp op)
static uint8_t a64op_cond_val(RasmOp op)
static uint8_t a64op_base_mode(RasmOp op)
static void indent_to(FILE *fp, int64_t *pos, int64_t line_start, int col)
static uint8_t a64op_vec_el_size(RasmOp op)
static const char cond_names[16][4]
static void print_op_cond(FILE *fp, int64_t *pos, RasmOp op)
static void print_vec_reg(FILE *fp, int64_t *pos, uint8_t n, uint8_t el_count, uint8_t el_size, uint8_t idx_p1)
RasmNodeDirective directive
int rasm_print(RasmContext *rctx, FILE *fp)
#define AARCH64_BASE_OFFSET
static int rasm_op_label_id(RasmOp op)
static void print_op_vec(FILE *fp, int64_t *pos, RasmOp op)
int(* cond)(enum AVPixelFormat pix_fmt)
static uint8_t a64op_gpr_n(RasmOp op)