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;
47  uint8_t *sei;
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  pkt->pts = pic_out.i_pts;
169  if (avctx->has_b_frames) {
170  if (!x4->out_frame_count)
171  pkt->dts = pkt->pts - (x4->pts_buffer[1] - x4->pts_buffer[0]);
172  else
173  pkt->dts = x4->pts_buffer[(x4->out_frame_count-1)%(avctx->max_b_frames+1)];
174  } else
175  pkt->dts = pkt->pts;
176 
177  switch (pic_out.i_type) {
178  case XAVS_TYPE_IDR:
179  case XAVS_TYPE_I:
180  pict_type = AV_PICTURE_TYPE_I;
181  break;
182  case XAVS_TYPE_P:
183  pict_type = AV_PICTURE_TYPE_P;
184  break;
185  case XAVS_TYPE_B:
186  case XAVS_TYPE_BREF:
187  pict_type = AV_PICTURE_TYPE_B;
188  break;
189  default:
190  pict_type = AV_PICTURE_TYPE_NONE;
191  }
192 
193  /* There is no IDR frame in AVS JiZhun */
194  /* Sequence header is used as a flag */
195  if (pic_out.i_type == XAVS_TYPE_I) {
197  }
198 
199  ff_side_data_set_encoder_stats(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
200 
201  x4->out_frame_count++;
202  *got_packet = ret;
203  return 0;
204 }
205 
207 {
208  XavsContext *x4 = avctx->priv_data;
209 
210  av_freep(&x4->sei);
211  av_freep(&x4->pts_buffer);
212 
213  if (x4->enc)
214  xavs_encoder_close(x4->enc);
215 
216  return 0;
217 }
218 
219 static av_cold int XAVS_init(AVCodecContext *avctx)
220 {
221  XavsContext *x4 = avctx->priv_data;
222 
223  x4->sei_size = 0;
224  xavs_param_default(&x4->params);
225 
226  x4->params.pf_log = XAVS_log;
227  x4->params.p_log_private = avctx;
228  x4->params.i_keyint_max = avctx->gop_size;
229  if (avctx->bit_rate) {
230  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
231  x4->params.rc.i_rc_method = XAVS_RC_ABR;
232  }
233  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
234  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
235  x4->params.rc.b_stat_write = avctx->flags & AV_CODEC_FLAG_PASS1;
236  if (avctx->flags & AV_CODEC_FLAG_PASS2) {
237  x4->params.rc.b_stat_read = 1;
238  } else {
239  if (x4->crf >= 0) {
240  x4->params.rc.i_rc_method = XAVS_RC_CRF;
241  x4->params.rc.f_rf_constant = x4->crf;
242  } else if (x4->cqp >= 0) {
243  x4->params.rc.i_rc_method = XAVS_RC_CQP;
244  x4->params.rc.i_qp_constant = x4->cqp;
245  }
246  }
247 
248  if (x4->aud >= 0)
249  x4->params.b_aud = x4->aud;
250  if (x4->mbtree >= 0)
251  x4->params.rc.b_mb_tree = x4->mbtree;
252  if (x4->direct_pred >= 0)
253  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
254  if (x4->fast_pskip >= 0)
255  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
256  if (x4->motion_est >= 0)
257  x4->params.analyse.i_me_method = x4->motion_est;
258  if (x4->mixed_refs >= 0)
259  x4->params.analyse.b_mixed_references = x4->mixed_refs;
260  if (x4->b_bias != INT_MIN)
261  x4->params.i_bframe_bias = x4->b_bias;
262  if (x4->cplxblur >= 0)
263  x4->params.rc.f_complexity_blur = x4->cplxblur;
264 
265  x4->params.i_bframe = avctx->max_b_frames;
266  /* cabac is not included in AVS JiZhun Profile */
267  x4->params.b_cabac = 0;
268 
269  x4->params.i_bframe_adaptive = x4->b_frame_strategy;
270 
271  avctx->has_b_frames = !!avctx->max_b_frames;
272 
273  /* AVS doesn't allow B picture as reference */
274  /* The max allowed reference frame number of B is 2 */
275  x4->params.i_keyint_min = avctx->keyint_min;
276  if (x4->params.i_keyint_min > x4->params.i_keyint_max)
277  x4->params.i_keyint_min = x4->params.i_keyint_max;
278 
279  x4->params.i_scenecut_threshold = x4->scenechange_threshold;
280 
281  // x4->params.b_deblocking_filter = avctx->flags & AV_CODEC_FLAG_LOOP_FILTER;
282 
283  x4->params.rc.i_qp_min = avctx->qmin;
284  x4->params.rc.i_qp_max = avctx->qmax;
285  x4->params.rc.i_qp_step = avctx->max_qdiff;
286 
287  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
288  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
289 
290  x4->params.i_frame_reference = avctx->refs;
291 
292  x4->params.i_width = avctx->width;
293  x4->params.i_height = avctx->height;
294  x4->params.vui.i_sar_width = avctx->sample_aspect_ratio.num;
295  x4->params.vui.i_sar_height = avctx->sample_aspect_ratio.den;
296  /* This is only used for counting the fps */
297  x4->params.i_fps_num = avctx->time_base.den;
298  x4->params.i_fps_den = avctx->time_base.num;
299  x4->params.analyse.inter = XAVS_ANALYSE_I8x8 |XAVS_ANALYSE_PSUB16x16| XAVS_ANALYSE_BSUB16x16;
300 
301  x4->params.analyse.i_me_range = avctx->me_range;
302  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
303 
304  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
305  /* AVS P2 only enables 8x8 transform */
306  x4->params.analyse.b_transform_8x8 = 1; //avctx->flags2 & AV_CODEC_FLAG2_8X8DCT;
307 
308  x4->params.analyse.i_trellis = avctx->trellis;
309 
310  x4->params.analyse.i_noise_reduction = x4->noise_reduction;
311 
312  if (avctx->level > 0)
313  x4->params.i_level_idc = avctx->level;
314 
315  if (avctx->bit_rate > 0)
316  x4->params.rc.f_rate_tolerance =
317  (float)avctx->bit_rate_tolerance / avctx->bit_rate;
318 
319  if ((avctx->rc_buffer_size) &&
320  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
321  x4->params.rc.f_vbv_buffer_init =
322  (float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
323  } else
324  x4->params.rc.f_vbv_buffer_init = 0.9;
325 
326  /* TAG:do we have MB tree RC method */
327  /* what is the RC method we are now using? Default NO */
328  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
329  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
330 
331  x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset;
332 
333  x4->params.analyse.b_psnr = avctx->flags & AV_CODEC_FLAG_PSNR;
334  x4->params.i_log_level = XAVS_LOG_DEBUG;
335  x4->params.i_threads = avctx->thread_count;
336  x4->params.b_interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT;
337 
338  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
339  x4->params.b_repeat_headers = 0;
340 
341  x4->enc = xavs_encoder_open(&x4->params);
342  if (!x4->enc)
343  return -1;
344 
345  if (!(x4->pts_buffer = av_mallocz_array((avctx->max_b_frames+1), sizeof(*x4->pts_buffer))))
346  return AVERROR(ENOMEM);
347 
348  /* TAG: Do we have GLOBAL HEADER in AVS */
349  /* We Have PPS and SPS in AVS */
350  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER && 0) {
351  xavs_nal_t *nal;
352  int nnal, s, i, size;
353  uint8_t *p;
354 
355  s = xavs_encoder_headers(x4->enc, &nal, &nnal);
356 
357  avctx->extradata = p = av_malloc(s);
358  for (i = 0; i < nnal; i++) {
359  /* Don't put the SEI in extradata. */
360  if (nal[i].i_type == NAL_SEI) {
361  x4->sei = av_malloc( 5 + nal[i].i_payload * 4 / 3 );
362  if (xavs_nal_encode(x4->sei, &x4->sei_size, 1, nal + i) < 0)
363  return -1;
364 
365  continue;
366  }
367  size = xavs_nal_encode(p, &s, 1, nal + i);
368  if (size < 0)
369  return -1;
370  p += size;
371  }
372  avctx->extradata_size = p - avctx->extradata;
373  }
374  return 0;
375 }
376 
377 #define OFFSET(x) offsetof(XavsContext, x)
378 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
379 static const AVOption options[] = {
380  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
381  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE },
382  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, {.i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
383  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
384  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE, "direct-pred" },
385  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_NONE }, 0, 0, VE, "direct-pred" },
386  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_SPATIAL }, 0, 0, VE, "direct-pred" },
387  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_TEMPORAL }, 0, 0, VE, "direct-pred" },
388  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_AUTO }, 0, 0, VE, "direct-pred" },
389  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
390  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
391  { "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 },
392  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
393  { "motion-est", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = XAVS_ME_DIA }, -1, XAVS_ME_TESA, VE, "motion-est"},
394  { "dia", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_DIA }, INT_MIN, INT_MAX, VE, "motion-est" },
395  { "hex", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_HEX }, INT_MIN, INT_MAX, VE, "motion-est" },
396  { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_UMH }, INT_MIN, INT_MAX, VE, "motion-est" },
397  { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_ESA }, INT_MIN, INT_MAX, VE, "motion-est" },
398  { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_TESA }, INT_MIN, INT_MAX, VE, "motion-est" },
399  { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, VE},
400  { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE},
401  { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
402  { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
403 
404  { NULL },
405 };
406 
407 static const AVClass xavs_class = {
408  .class_name = "libxavs",
409  .item_name = av_default_item_name,
410  .option = options,
411  .version = LIBAVUTIL_VERSION_INT,
412 };
413 
414 static const AVCodecDefault xavs_defaults[] = {
415  { "b", "0" },
416  { NULL },
417 };
418 
420  .name = "libxavs",
421  .long_name = NULL_IF_CONFIG_SMALL("libxavs Chinese AVS (Audio Video Standard)"),
422  .type = AVMEDIA_TYPE_VIDEO,
423  .id = AV_CODEC_ID_CAVS,
424  .priv_data_size = sizeof(XavsContext),
425  .init = XAVS_init,
426  .encode2 = XAVS_frame,
427  .close = XAVS_close,
429  .caps_internal = FF_CODEC_CAP_AUTO_THREADS,
431  .priv_class = &xavs_class,
432  .defaults = xavs_defaults,
433  .wrapper_name = "libxavs",
434 };
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:197
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:187
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
level
uint8_t level
Definition: svq3.c:204
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:1031
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:31
options
static const AVOption options[]
Definition: libxavs.c:379
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:586
VE
#define VE
Definition: libxavs.c:378
OFFSET
#define OFFSET(x)
Definition: libxavs.c:377
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:303
internal.h
XavsContext::sei
uint8_t * sei
Definition: libxavs.c:47
AVPacket::data
uint8_t * data
Definition: packet.h:365
AVOption
AVOption.
Definition: opt.h:248
av_mallocz_array
void * av_mallocz_array(size_t nmemb, size_t size)
Definition: mem.c:196
float.h
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:289
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1271
AVCodecContext::me_subpel_quality
int me_subpel_quality
subpel ME quality
Definition: avcodec.h:936
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:396
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:306
XAVS_init
static av_cold int XAVS_init(AVCodecContext *avctx)
Definition: libxavs.c:219
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:794
XAVS_close
static av_cold int XAVS_close(AVCodecContext *avctx)
Definition: libxavs.c:206
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:1546
XavsContext::aud
int aud
Definition: libxavs.c:55
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:1038
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:581
FF_CMP_CHROMA
#define FF_CMP_CHROMA
Definition: avcodec.h:901
AVCodecContext::bit_rate_tolerance
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
Definition: avcodec.h:559
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:298
XavsContext::params
xavs_param_t params
Definition: libxavs.c:44
END_OF_STREAM
#define END_OF_STREAM
Definition: libxavs.c:36
pkt
AVPacket * pkt
Definition: movenc.c:59
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:181
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:1328
XavsContext::motion_est
int motion_est
Definition: libxavs.c:57
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:603
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:785
s
#define s(width, name)
Definition: cbs_vp9.c:257
AV_CODEC_CAP_OTHER_THREADS
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
Definition: codec.h:122
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:289
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:202
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:199
ff_libxavs_encoder
const AVCodec ff_libxavs_encoder
Definition: libxavs.c:419
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:1300
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:207
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1285
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
fabs
static __device__ float fabs(float a)
Definition: cuda_runtime.h:182
NULL
#define NULL
Definition: coverity.c:32
AVCodecContext::qblur
float qblur
amount of qscale smoothing over time (0.0-1.0)
Definition: avcodec.h:1257
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:551
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::me_cmp
int me_cmp
motion estimation comparison function
Definition: avcodec.h:866
AVCodecContext::trellis
int trellis
trellis RD quantization
Definition: avcodec.h:1335
XavsContext::b_bias
int b_bias
Definition: libxavs.c:52
AVCodecContext::level
int level
level
Definition: avcodec.h:1757
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:1256
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:624
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:759
FF_CODEC_CAP_AUTO_THREADS
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
Definition: internal.h:80
xavs_defaults
static const AVCodecDefault xavs_defaults[]
Definition: libxavs.c:414
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:366
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:117
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:696
size
int size
Definition: twinvq_data.h:10344
xavs_class
static const AVClass xavs_class
Definition: libxavs.c:407
AVCodecContext::me_range
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
Definition: avcodec.h:945
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:364
AV_CODEC_FLAG_PASS2
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:277
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:371
XavsContext::mixed_refs
int mixed_refs
Definition: libxavs.c:59
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:192
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:770
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Definition: opt.h:228
i
int i
Definition: input.c:407
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:358
AVCodecContext::extradata
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:602
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
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:204
AVCodecContext::height
int height
Definition: avcodec.h:674
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::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1278
AVCodecContext
main external API structure.
Definition: avcodec.h:501
XavsContext::scenechange_threshold
int scenechange_threshold
Definition: libxavs.c:62
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:1264
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:225
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:77
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:761
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:1129
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:528
AVPacket
This structure stores compressed data.
Definition: packet.h:342
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:242
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:674
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:33
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1134
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:859
AV_CODEC_FLAG_PASS1
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:273