FFmpeg
libxavs.c
Go to the documentation of this file.
1 /*
2  * AVS encoding using the xavs library
3  * Copyright (C) 2010 Amanda, Y.N. Wu <amanda11192003@gmail.com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <math.h>
26 #include <stdint.h>
27 #include <float.h>
28 #include <xavs.h>
29 #include "avcodec.h"
30 #include "internal.h"
31 #include "packet_internal.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/mem.h"
34 #include "libavutil/opt.h"
35 
36 #define END_OF_STREAM 0x001
37 
38 #define XAVS_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
39 #define XAVS_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
40 #define XAVS_PART_B8X8 0x100 /* Analyze b16x8, b*/
41 
42 typedef struct XavsContext {
43  AVClass *class;
44  xavs_param_t params;
45  xavs_t *enc;
46  xavs_picture_t pic;
48  int sei_size;
50  float crf;
51  int cqp;
52  int b_bias;
53  float cplxblur;
55  int aud;
58  int mbtree;
64 
65  int64_t *pts_buffer;
67 } XavsContext;
68 
69 static void XAVS_log(void *p, int level, const char *fmt, va_list args)
70 {
71  static const int level_map[] = {
72  [XAVS_LOG_ERROR] = AV_LOG_ERROR,
73  [XAVS_LOG_WARNING] = AV_LOG_WARNING,
74  [XAVS_LOG_INFO] = AV_LOG_INFO,
75  [XAVS_LOG_DEBUG] = AV_LOG_DEBUG
76  };
77 
78  if (level < 0 || level > XAVS_LOG_DEBUG)
79  return;
80 
81  av_vlog(p, level_map[level], fmt, args);
82 }
83 
85  xavs_nal_t *nals, int nnal)
86 {
87  XavsContext *x4 = ctx->priv_data;
88  uint8_t *p;
90 
91  if (!nnal)
92  return 0;
93 
94  for (i = 0; i < nnal; i++)
95  size += nals[i].i_payload;
96 
97  if ((ret = ff_alloc_packet2(ctx, pkt, size, 0)) < 0)
98  return ret;
99  p = pkt->data;
100 
101  /* Write the SEI as part of the first frame. */
102  if (x4->sei_size > 0 && nnal > 0) {
103  memcpy(p, x4->sei, x4->sei_size);
104  p += x4->sei_size;
105  x4->sei_size = 0;
106  }
107 
108  for (i = 0; i < nnal; i++) {
109  s = xavs_nal_encode(p, &size, 1, nals + i);
110  if (s < 0)
111  return -1;
112  p += s;
113  }
114  pkt->size = p - pkt->data;
115 
116  return 1;
117 }
118 
119 static int XAVS_frame(AVCodecContext *avctx, AVPacket *pkt,
120  const AVFrame *frame, int *got_packet)
121 {
122  XavsContext *x4 = avctx->priv_data;
123  xavs_nal_t *nal;
124  int nnal, i, ret;
125  xavs_picture_t pic_out;
126  int pict_type;
127 
128  x4->pic.img.i_csp = XAVS_CSP_I420;
129  x4->pic.img.i_plane = 3;
130 
131  if (frame) {
132  for (i = 0; i < 3; i++) {
133  x4->pic.img.plane[i] = frame->data[i];
134  x4->pic.img.i_stride[i] = frame->linesize[i];
135  }
136 
137  x4->pic.i_pts = frame->pts;
138  x4->pic.i_type = XAVS_TYPE_AUTO;
139  x4->pts_buffer[avctx->frame_number % (avctx->max_b_frames+1)] = frame->pts;
140  }
141 
142  if (xavs_encoder_encode(x4->enc, &nal, &nnal,
143  frame? &x4->pic: NULL, &pic_out) < 0)
144  return -1;
145 
146  ret = encode_nals(avctx, pkt, nal, nnal);
147 
148  if (ret < 0)
149  return -1;
150 
151  if (!ret) {
152  if (!frame && !(x4->end_of_stream)) {
153  if ((ret = ff_alloc_packet2(avctx, pkt, 4, 0)) < 0)
154  return ret;
155 
156  pkt->data[0] = 0x0;
157  pkt->data[1] = 0x0;
158  pkt->data[2] = 0x01;
159  pkt->data[3] = 0xb1;
160  pkt->dts = 2*x4->pts_buffer[(x4->out_frame_count-1)%(avctx->max_b_frames+1)] -
161  x4->pts_buffer[(x4->out_frame_count-2)%(avctx->max_b_frames+1)];
163  *got_packet = 1;
164  }
165  return 0;
166  }
167 
168 #if FF_API_CODED_FRAME
170  avctx->coded_frame->pts = pic_out.i_pts;
172 #endif
173  pkt->pts = pic_out.i_pts;
174  if (avctx->has_b_frames) {
175  if (!x4->out_frame_count)
176  pkt->dts = pkt->pts - (x4->pts_buffer[1] - x4->pts_buffer[0]);
177  else
178  pkt->dts = x4->pts_buffer[(x4->out_frame_count-1)%(avctx->max_b_frames+1)];
179  } else
180  pkt->dts = pkt->pts;
181 
182  switch (pic_out.i_type) {
183  case XAVS_TYPE_IDR:
184  case XAVS_TYPE_I:
185  pict_type = AV_PICTURE_TYPE_I;
186  break;
187  case XAVS_TYPE_P:
188  pict_type = AV_PICTURE_TYPE_P;
189  break;
190  case XAVS_TYPE_B:
191  case XAVS_TYPE_BREF:
192  pict_type = AV_PICTURE_TYPE_B;
193  break;
194  default:
195  pict_type = AV_PICTURE_TYPE_NONE;
196  }
197 #if FF_API_CODED_FRAME
199  avctx->coded_frame->pict_type = pict_type;
201 #endif
202 
203  /* There is no IDR frame in AVS JiZhun */
204  /* Sequence header is used as a flag */
205  if (pic_out.i_type == XAVS_TYPE_I) {
206 #if FF_API_CODED_FRAME
208  avctx->coded_frame->key_frame = 1;
210 #endif
212  }
213 
214 #if FF_API_CODED_FRAME
216  avctx->coded_frame->quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA;
218 #endif
219 
220  ff_side_data_set_encoder_stats(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
221 
222  x4->out_frame_count++;
223  *got_packet = ret;
224  return 0;
225 }
226 
228 {
229  XavsContext *x4 = avctx->priv_data;
230 
231  av_freep(&avctx->extradata);
232  av_freep(&x4->sei);
233  av_freep(&x4->pts_buffer);
234 
235  if (x4->enc)
236  xavs_encoder_close(x4->enc);
237 
238  return 0;
239 }
240 
241 static av_cold int XAVS_init(AVCodecContext *avctx)
242 {
243  XavsContext *x4 = avctx->priv_data;
244 
245  x4->sei_size = 0;
246  xavs_param_default(&x4->params);
247 
248  x4->params.pf_log = XAVS_log;
249  x4->params.p_log_private = avctx;
250  x4->params.i_keyint_max = avctx->gop_size;
251  if (avctx->bit_rate) {
252  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
253  x4->params.rc.i_rc_method = XAVS_RC_ABR;
254  }
255  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
256  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
257  x4->params.rc.b_stat_write = avctx->flags & AV_CODEC_FLAG_PASS1;
258  if (avctx->flags & AV_CODEC_FLAG_PASS2) {
259  x4->params.rc.b_stat_read = 1;
260  } else {
261  if (x4->crf >= 0) {
262  x4->params.rc.i_rc_method = XAVS_RC_CRF;
263  x4->params.rc.f_rf_constant = x4->crf;
264  } else if (x4->cqp >= 0) {
265  x4->params.rc.i_rc_method = XAVS_RC_CQP;
266  x4->params.rc.i_qp_constant = x4->cqp;
267  }
268  }
269 
270  if (x4->aud >= 0)
271  x4->params.b_aud = x4->aud;
272  if (x4->mbtree >= 0)
273  x4->params.rc.b_mb_tree = x4->mbtree;
274  if (x4->direct_pred >= 0)
275  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
276  if (x4->fast_pskip >= 0)
277  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
278  if (x4->motion_est >= 0)
279  x4->params.analyse.i_me_method = x4->motion_est;
280  if (x4->mixed_refs >= 0)
281  x4->params.analyse.b_mixed_references = x4->mixed_refs;
282  if (x4->b_bias != INT_MIN)
283  x4->params.i_bframe_bias = x4->b_bias;
284  if (x4->cplxblur >= 0)
285  x4->params.rc.f_complexity_blur = x4->cplxblur;
286 
287  x4->params.i_bframe = avctx->max_b_frames;
288  /* cabac is not included in AVS JiZhun Profile */
289  x4->params.b_cabac = 0;
290 
291 #if FF_API_PRIVATE_OPT
293  if (avctx->b_frame_strategy)
294  x4->b_frame_strategy = avctx->b_frame_strategy;
296 #endif
297 
298  x4->params.i_bframe_adaptive = x4->b_frame_strategy;
299 
300  avctx->has_b_frames = !!avctx->max_b_frames;
301 
302  /* AVS doesn't allow B picture as reference */
303  /* The max allowed reference frame number of B is 2 */
304  x4->params.i_keyint_min = avctx->keyint_min;
305  if (x4->params.i_keyint_min > x4->params.i_keyint_max)
306  x4->params.i_keyint_min = x4->params.i_keyint_max;
307 
308 #if FF_API_PRIVATE_OPT
310  if (avctx->scenechange_threshold)
313 #endif
314 
315  x4->params.i_scenecut_threshold = x4->scenechange_threshold;
316 
317  // x4->params.b_deblocking_filter = avctx->flags & AV_CODEC_FLAG_LOOP_FILTER;
318 
319  x4->params.rc.i_qp_min = avctx->qmin;
320  x4->params.rc.i_qp_max = avctx->qmax;
321  x4->params.rc.i_qp_step = avctx->max_qdiff;
322 
323  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
324  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
325 
326  x4->params.i_frame_reference = avctx->refs;
327 
328  x4->params.i_width = avctx->width;
329  x4->params.i_height = avctx->height;
330  x4->params.vui.i_sar_width = avctx->sample_aspect_ratio.num;
331  x4->params.vui.i_sar_height = avctx->sample_aspect_ratio.den;
332  /* This is only used for counting the fps */
333  x4->params.i_fps_num = avctx->time_base.den;
334  x4->params.i_fps_den = avctx->time_base.num;
335  x4->params.analyse.inter = XAVS_ANALYSE_I8x8 |XAVS_ANALYSE_PSUB16x16| XAVS_ANALYSE_BSUB16x16;
336 
337  x4->params.analyse.i_me_range = avctx->me_range;
338  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
339 
340  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
341  /* AVS P2 only enables 8x8 transform */
342  x4->params.analyse.b_transform_8x8 = 1; //avctx->flags2 & AV_CODEC_FLAG2_8X8DCT;
343 
344  x4->params.analyse.i_trellis = avctx->trellis;
345 
346 #if FF_API_PRIVATE_OPT
348  if (avctx->noise_reduction >= 0)
349  x4->noise_reduction = avctx->noise_reduction;
351 #endif
352 
353  x4->params.analyse.i_noise_reduction = x4->noise_reduction;
354 
355  if (avctx->level > 0)
356  x4->params.i_level_idc = avctx->level;
357 
358  if (avctx->bit_rate > 0)
359  x4->params.rc.f_rate_tolerance =
360  (float)avctx->bit_rate_tolerance / avctx->bit_rate;
361 
362  if ((avctx->rc_buffer_size) &&
363  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
364  x4->params.rc.f_vbv_buffer_init =
365  (float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
366  } else
367  x4->params.rc.f_vbv_buffer_init = 0.9;
368 
369  /* TAG:do we have MB tree RC method */
370  /* what is the RC method we are now using? Default NO */
371  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
372  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
373 
374 #if FF_API_PRIVATE_OPT
376  if (avctx->chromaoffset)
377  x4->chroma_offset = avctx->chromaoffset;
379 #endif
380 
381  x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset;
382 
383  x4->params.analyse.b_psnr = avctx->flags & AV_CODEC_FLAG_PSNR;
384  x4->params.i_log_level = XAVS_LOG_DEBUG;
385  x4->params.i_threads = avctx->thread_count;
386  x4->params.b_interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT;
387 
388  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
389  x4->params.b_repeat_headers = 0;
390 
391  x4->enc = xavs_encoder_open(&x4->params);
392  if (!x4->enc)
393  return -1;
394 
395  if (!(x4->pts_buffer = av_mallocz_array((avctx->max_b_frames+1), sizeof(*x4->pts_buffer))))
396  return AVERROR(ENOMEM);
397 
398  /* TAG: Do we have GLOBAL HEADER in AVS */
399  /* We Have PPS and SPS in AVS */
400  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER && 0) {
401  xavs_nal_t *nal;
402  int nnal, s, i, size;
403  uint8_t *p;
404 
405  s = xavs_encoder_headers(x4->enc, &nal, &nnal);
406 
407  avctx->extradata = p = av_malloc(s);
408  for (i = 0; i < nnal; i++) {
409  /* Don't put the SEI in extradata. */
410  if (nal[i].i_type == NAL_SEI) {
411  x4->sei = av_malloc( 5 + nal[i].i_payload * 4 / 3 );
412  if (xavs_nal_encode(x4->sei, &x4->sei_size, 1, nal + i) < 0)
413  return -1;
414 
415  continue;
416  }
417  size = xavs_nal_encode(p, &s, 1, nal + i);
418  if (size < 0)
419  return -1;
420  p += size;
421  }
422  avctx->extradata_size = p - avctx->extradata;
423  }
424  return 0;
425 }
426 
427 #define OFFSET(x) offsetof(XavsContext, x)
428 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
429 static const AVOption options[] = {
430  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
431  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE },
432  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, {.i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
433  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
434  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE, "direct-pred" },
435  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_NONE }, 0, 0, VE, "direct-pred" },
436  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_SPATIAL }, 0, 0, VE, "direct-pred" },
437  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_TEMPORAL }, 0, 0, VE, "direct-pred" },
438  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_AUTO }, 0, 0, VE, "direct-pred" },
439  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
440  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
441  { "mixed-refs", "One reference per partition, as opposed to one reference per macroblock", OFFSET(mixed_refs), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE },
442  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
443  { "motion-est", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = XAVS_ME_DIA }, -1, XAVS_ME_TESA, VE, "motion-est"},
444  { "dia", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_DIA }, INT_MIN, INT_MAX, VE, "motion-est" },
445  { "hex", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_HEX }, INT_MIN, INT_MAX, VE, "motion-est" },
446  { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_UMH }, INT_MIN, INT_MAX, VE, "motion-est" },
447  { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_ESA }, INT_MIN, INT_MAX, VE, "motion-est" },
448  { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_TESA }, INT_MIN, INT_MAX, VE, "motion-est" },
449  { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, VE},
450  { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE},
451  { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
452  { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
453 
454  { NULL },
455 };
456 
457 static const AVClass xavs_class = {
458  .class_name = "libxavs",
459  .item_name = av_default_item_name,
460  .option = options,
461  .version = LIBAVUTIL_VERSION_INT,
462 };
463 
464 static const AVCodecDefault xavs_defaults[] = {
465  { "b", "0" },
466  { NULL },
467 };
468 
470  .name = "libxavs",
471  .long_name = NULL_IF_CONFIG_SMALL("libxavs Chinese AVS (Audio Video Standard)"),
472  .type = AVMEDIA_TYPE_VIDEO,
473  .id = AV_CODEC_ID_CAVS,
474  .priv_data_size = sizeof(XavsContext),
475  .init = XAVS_init,
476  .encode2 = XAVS_frame,
477  .close = XAVS_close,
480  .priv_class = &xavs_class,
481  .defaults = xavs_defaults,
482  .wrapper_name = "libxavs",
483 };
av_vlog
void av_vlog(void *avcl, int level, const char *fmt, va_list vl)
Send the specified message to the log if the level is less than or equal to the current av_log_level.
Definition: log.c:424
AVCodec
AVCodec.
Definition: codec.h:190
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:85
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
level
uint8_t level
Definition: svq3.c:210
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:1107
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
options
static const AVOption options[]
Definition: libxavs.c:429
AVERROR
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
XavsContext::sei_size
int sei_size
Definition: libxavs.c:48
opt.h
XavsContext
Definition: libxavs.c:42
ff_side_data_set_encoder_stats
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: avpacket.c:728
VE
#define VE
Definition: libxavs.c:428
OFFSET
#define OFFSET(x)
Definition: libxavs.c:427
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:300
AVFrame::pts
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:393
internal.h
XavsContext::sei
uint8_t * sei
Definition: libxavs.c:47
AVPacket::data
uint8_t * data
Definition: packet.h:355
AVOption
AVOption.
Definition: opt.h:246
av_mallocz_array
void * av_mallocz_array(size_t nmemb, size_t size)
Definition: mem.c:190
float.h
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:312
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1375
AVCodecContext::me_subpel_quality
int me_subpel_quality
subpel ME quality
Definition: avcodec.h:988
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:388
XAVS_log
static void XAVS_log(void *p, int level, const char *fmt, va_list args)
Definition: libxavs.c:69
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
AV_CODEC_FLAG_GLOBAL_HEADER
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
Definition: avcodec.h:329
XAVS_init
static av_cold int XAVS_init(AVCodecContext *avctx)
Definition: libxavs.c:241
AVCodecContext::i_quant_factor
float i_quant_factor
qscale factor between P- and I-frames If > 0 then the last P-frame quantizer will be used (q = lastp_...
Definition: avcodec.h:831
XAVS_close
static av_cold int XAVS_close(AVCodecContext *avctx)
Definition: libxavs.c:227
XavsContext::noise_reduction
int noise_reduction
Definition: libxavs.c:63
XavsContext::end_of_stream
int end_of_stream
Definition: libxavs.c:49
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1785
XavsContext::aud
int aud
Definition: libxavs.c:55
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:1114
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:606
AVFrame::key_frame
int key_frame
1 -> keyframe, 0-> not
Definition: frame.h:378
FF_CMP_CHROMA
#define FF_CMP_CHROMA
Definition: avcodec.h:947
AVCodecContext::bit_rate_tolerance
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
Definition: avcodec.h:584
AVRational::num
int num
Numerator.
Definition: rational.h:59
AV_CODEC_FLAG_INTERLACED_DCT
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
Definition: avcodec.h:321
XavsContext::params
xavs_param_t params
Definition: libxavs.c:44
END_OF_STREAM
#define END_OF_STREAM
Definition: libxavs.c:36
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
av_cold
#define av_cold
Definition: attributes.h:90
AVCodecContext::rc_initial_buffer_occupancy
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
Definition: avcodec.h:1432
XavsContext::motion_est
int motion_est
Definition: libxavs.c:57
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:628
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:816
s
#define s(width, name)
Definition: cbs_vp9.c:257
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:275
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
ctx
AVFormatContext * ctx
Definition: movenc.c:48
XavsContext::chroma_offset
int chroma_offset
Definition: libxavs.c:61
AV_INPUT_BUFFER_MIN_SIZE
#define AV_INPUT_BUFFER_MIN_SIZE
Definition: avcodec.h:222
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1404
encode_nals
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, xavs_nal_t *nals, int nnal)
Definition: libxavs.c:84
XavsContext::pic
xavs_picture_t pic
Definition: libxavs.c:46
if
if(ret)
Definition: filter_design.txt:179
AVCodecDefault
Definition: internal.h:201
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1389
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
NULL
#define NULL
Definition: coverity.c:32
AVCodecContext::qblur
float qblur
amount of qscale smoothing over time (0.0-1.0)
Definition: avcodec.h:1361
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:576
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:274
AVCodecContext::b_frame_strategy
attribute_deprecated int b_frame_strategy
Definition: avcodec.h:800
AVCodecContext::noise_reduction
attribute_deprecated int noise_reduction
Definition: avcodec.h:1044
AVCodecContext::me_cmp
int me_cmp
motion estimation comparison function
Definition: avcodec.h:912
AVCodecContext::trellis
int trellis
trellis RD quantization
Definition: avcodec.h:1475
XavsContext::b_bias
int b_bias
Definition: libxavs.c:52
AVCodecContext::level
int level
level
Definition: avcodec.h:1982
XavsContext::out_frame_count
int out_frame_count
Definition: libxavs.c:66
AVCodecContext::qcompress
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
Definition: avcodec.h:1360
AVCodecContext::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avcodec.h:649
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:1006
xavs_defaults
static const AVCodecDefault xavs_defaults[]
Definition: libxavs.c:464
AV_CODEC_CAP_AUTO_THREADS
#define AV_CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
Definition: codec.h:118
AVFrame::pict_type
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:383
XAVS_frame
static int XAVS_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: libxavs.c:119
AVPacket::size
int size
Definition: packet.h:356
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:721
AVFrame::quality
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
Definition: frame.h:423
size
int size
Definition: twinvq_data.h:11134
xavs_class
static const AVClass xavs_class
Definition: libxavs.c:457
AVCodecContext::me_range
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
Definition: avcodec.h:997
AV_PICTURE_TYPE_NONE
@ AV_PICTURE_TYPE_NONE
Undefined.
Definition: avutil.h:273
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:354
AV_CODEC_FLAG_PASS2
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:300
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:361
XavsContext::mixed_refs
int mixed_refs
Definition: libxavs.c:59
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
AVCodecContext::b_quant_factor
float b_quant_factor
qscale factor between IP and B-frames If > 0 then the last P-frame quantizer will be used (q= lastp_q...
Definition: avcodec.h:795
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Definition: opt.h:226
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:348
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:627
internal.h
AV_CODEC_ID_CAVS
@ AV_CODEC_ID_CAVS
Definition: codec_id.h:136
XavsContext::direct_pred
int direct_pred
Definition: libxavs.c:54
uint8_t
uint8_t
Definition: audio_convert.c:194
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:197
AVCodecContext::height
int height
Definition: avcodec.h:699
avcodec.h
ret
ret
Definition: filter_design.txt:187
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
XavsContext::b_frame_strategy
int b_frame_strategy
Definition: libxavs.c:60
XavsContext::enc
xavs_t * enc
Definition: libxavs.c:45
AVCodecContext::scenechange_threshold
attribute_deprecated int scenechange_threshold
Definition: avcodec.h:1040
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1382
AVCodecContext::coded_frame
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream
Definition: avcodec.h:1776
AVCodecContext
main external API structure.
Definition: avcodec.h:526
XavsContext::scenechange_threshold
int scenechange_threshold
Definition: libxavs.c:62
pkt
static AVPacket pkt
Definition: demuxing_decoding.c:54
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
XavsContext::fast_pskip
int fast_pskip
Definition: libxavs.c:56
XavsContext::cqp
int cqp
Definition: libxavs.c:51
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1368
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:65
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
ff_libxavs_encoder
AVCodec ff_libxavs_encoder
Definition: libxavs.c:469
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:75
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:84
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:275
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
mem.h
AVCodecContext::max_b_frames
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
Definition: avcodec.h:786
packet_internal.h
XavsContext::mbtree
int mbtree
Definition: libxavs.c:58
AVCodecContext::frame_number
int frame_number
Frame counter, set by libavcodec.
Definition: avcodec.h:1217
AVCodecContext::chromaoffset
attribute_deprecated int chromaoffset
Definition: avcodec.h:1119
XavsContext::cplxblur
float cplxblur
Definition: libxavs.c:53
XavsContext::crf
float crf
Definition: libxavs.c:50
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:553
AVPacket
This structure stores compressed data.
Definition: packet.h:332
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
XavsContext::pts_buffer
int64_t * pts_buffer
Definition: libxavs.c:65
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:699
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:227
ff_alloc_packet2
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
Definition: encode.c:32
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:232
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1363
AVCodecContext::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition: avcodec.h:905
AV_CODEC_FLAG_PASS1
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:296