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 <string.h>
24 #include <math.h>
25 #include <stdint.h>
26 #include <float.h>
27 #include <xavs.h>
28 #include "avcodec.h"
29 #include "codec_internal.h"
30 #include "encode.h"
31 #include "libavutil/internal.h"
32 #include "libavutil/mem.h"
33 #include "libavutil/opt.h"
34 
35 #define END_OF_STREAM 0x001
36 
37 #define XAVS_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
38 #define XAVS_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
39 #define XAVS_PART_B8X8 0x100 /* Analyze b16x8, b*/
40 
41 typedef struct XavsContext {
42  AVClass *class;
43  xavs_param_t params;
44  xavs_t *enc;
45  xavs_picture_t pic;
46  uint8_t *sei;
47  int sei_size;
49  float crf;
50  int cqp;
51  int b_bias;
52  float cplxblur;
54  int aud;
57  int mbtree;
63 
66 } XavsContext;
67 
68 static void XAVS_log(void *p, int level, const char *fmt, va_list args)
69 {
70  static const int level_map[] = {
71  [XAVS_LOG_ERROR] = AV_LOG_ERROR,
72  [XAVS_LOG_WARNING] = AV_LOG_WARNING,
73  [XAVS_LOG_INFO] = AV_LOG_INFO,
74  [XAVS_LOG_DEBUG] = AV_LOG_DEBUG
75  };
76 
77  if (level < 0 || level > XAVS_LOG_DEBUG)
78  return;
79 
80  av_vlog(p, level_map[level], fmt, args);
81 }
82 
84  xavs_nal_t *nals, int nnal)
85 {
86  XavsContext *x4 = ctx->priv_data;
87  int64_t size = x4->sei_size;
88  uint8_t *p, *p_end;
89  int i, s, ret;
90 
91  if (!nnal)
92  return 0;
93 
94  for (i = 0; i < nnal; i++)
95  size += 3U + nals[i].i_payload;
96 
97  if ((ret = ff_get_encode_buffer(ctx, pkt, size, 0)) < 0)
98  return ret;
99  p = pkt->data;
100  p_end = pkt->data + size;
101 
102  /* Write the SEI as part of the first frame. */
103  if (x4->sei_size > 0 && nnal > 0) {
104  memcpy(p, x4->sei, x4->sei_size);
105  p += x4->sei_size;
106  x4->sei_size = 0;
107  }
108 
109  for (i = 0; i < nnal; i++) {
110  int size = p_end - p;
111  s = xavs_nal_encode(p, &size, 1, nals + i);
112  if (s < 0)
113  return AVERROR_EXTERNAL;
114  if (s != 3U + nals[i].i_payload)
115  return AVERROR_EXTERNAL;
116  p += s;
117  }
118 
119  return 1;
120 }
121 
122 static int XAVS_frame(AVCodecContext *avctx, AVPacket *pkt,
123  const AVFrame *frame, int *got_packet)
124 {
125  XavsContext *x4 = avctx->priv_data;
126  xavs_nal_t *nal;
127  int nnal, i, ret;
128  xavs_picture_t pic_out;
129 
130  x4->pic.img.i_csp = XAVS_CSP_I420;
131  x4->pic.img.i_plane = 3;
132 
133  if (frame) {
134  for (i = 0; i < 3; i++) {
135  x4->pic.img.plane[i] = frame->data[i];
136  x4->pic.img.i_stride[i] = frame->linesize[i];
137  }
138 
139  x4->pic.i_pts = frame->pts;
140  x4->pic.i_type = XAVS_TYPE_AUTO;
141  x4->pts_buffer[avctx->frame_num % (avctx->max_b_frames+1)] = frame->pts;
142  }
143 
144  if (xavs_encoder_encode(x4->enc, &nal, &nnal,
145  frame? &x4->pic: NULL, &pic_out) < 0)
146  return AVERROR_EXTERNAL;
147 
148  ret = encode_nals(avctx, pkt, nal, nnal);
149 
150  if (ret < 0)
151  return ret;
152 
153  if (!ret) {
154  if (!frame && !(x4->end_of_stream)) {
155  if ((ret = ff_get_encode_buffer(avctx, pkt, 4, 0)) < 0)
156  return ret;
157 
158  pkt->data[0] = 0x0;
159  pkt->data[1] = 0x0;
160  pkt->data[2] = 0x01;
161  pkt->data[3] = 0xb1;
162  pkt->dts = 2*x4->pts_buffer[(x4->out_frame_count-1)%(avctx->max_b_frames+1)] -
163  x4->pts_buffer[(x4->out_frame_count-2)%(avctx->max_b_frames+1)];
165  *got_packet = 1;
166  }
167  return 0;
168  }
169 
170  pkt->pts = pic_out.i_pts;
171  if (avctx->has_b_frames) {
172  if (!x4->out_frame_count)
173  pkt->dts = pkt->pts - (x4->pts_buffer[1] - x4->pts_buffer[0]);
174  else
175  pkt->dts = x4->pts_buffer[(x4->out_frame_count-1)%(avctx->max_b_frames+1)];
176  } else
177  pkt->dts = pkt->pts;
178 
179  enum AVPictureType pict_type;
180  switch (pic_out.i_type) {
181  case XAVS_TYPE_IDR:
182  case XAVS_TYPE_I:
183  pict_type = AV_PICTURE_TYPE_I;
184  break;
185  case XAVS_TYPE_P:
186  pict_type = AV_PICTURE_TYPE_P;
187  break;
188  case XAVS_TYPE_B:
189  case XAVS_TYPE_BREF:
190  pict_type = AV_PICTURE_TYPE_B;
191  break;
192  default:
193  pict_type = AV_PICTURE_TYPE_NONE;
194  }
195 
196  /* There is no IDR frame in AVS JiZhun */
197  /* Sequence header is used as a flag */
198  if (pic_out.i_type == XAVS_TYPE_I) {
200  }
201 
202  ff_encode_add_stats_side_data(pkt, (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA, NULL, 0, pict_type);
203 
204  x4->out_frame_count++;
205  *got_packet = ret;
206  return 0;
207 }
208 
210 {
211  XavsContext *x4 = avctx->priv_data;
212 
213  av_freep(&x4->sei);
214  av_freep(&x4->pts_buffer);
215 
216  if (x4->enc)
217  xavs_encoder_close(x4->enc);
218 
219  return 0;
220 }
221 
222 static av_cold int XAVS_init(AVCodecContext *avctx)
223 {
224  XavsContext *x4 = avctx->priv_data;
225 
226  x4->sei_size = 0;
227  xavs_param_default(&x4->params);
228 
229  x4->params.pf_log = XAVS_log;
230  x4->params.p_log_private = avctx;
231  x4->params.i_keyint_max = avctx->gop_size;
232  if (avctx->bit_rate) {
233  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
234  x4->params.rc.i_rc_method = XAVS_RC_ABR;
235  }
236  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
237  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
238  x4->params.rc.b_stat_write = avctx->flags & AV_CODEC_FLAG_PASS1;
239  if (avctx->flags & AV_CODEC_FLAG_PASS2) {
240  x4->params.rc.b_stat_read = 1;
241  } else {
242  if (x4->crf >= 0) {
243  x4->params.rc.i_rc_method = XAVS_RC_CRF;
244  x4->params.rc.f_rf_constant = x4->crf;
245  } else if (x4->cqp >= 0) {
246  x4->params.rc.i_rc_method = XAVS_RC_CQP;
247  x4->params.rc.i_qp_constant = x4->cqp;
248  }
249  }
250 
251  if (x4->aud >= 0)
252  x4->params.b_aud = x4->aud;
253  if (x4->mbtree >= 0)
254  x4->params.rc.b_mb_tree = x4->mbtree;
255  if (x4->direct_pred >= 0)
256  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
257  if (x4->fast_pskip >= 0)
258  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
259  if (x4->motion_est >= 0)
260  x4->params.analyse.i_me_method = x4->motion_est;
261  if (x4->mixed_refs >= 0)
262  x4->params.analyse.b_mixed_references = x4->mixed_refs;
263  if (x4->b_bias != INT_MIN)
264  x4->params.i_bframe_bias = x4->b_bias;
265  if (x4->cplxblur >= 0)
266  x4->params.rc.f_complexity_blur = x4->cplxblur;
267 
268  x4->params.i_bframe = avctx->max_b_frames;
269  /* cabac is not included in AVS JiZhun Profile */
270  x4->params.b_cabac = 0;
271 
272  x4->params.i_bframe_adaptive = x4->b_frame_strategy;
273 
274  avctx->has_b_frames = !!avctx->max_b_frames;
275 
276  /* AVS doesn't allow B picture as reference */
277  /* The max allowed reference frame number of B is 2 */
278  x4->params.i_keyint_min = avctx->keyint_min;
279  if (x4->params.i_keyint_min > x4->params.i_keyint_max)
280  x4->params.i_keyint_min = x4->params.i_keyint_max;
281 
282  x4->params.i_scenecut_threshold = x4->scenechange_threshold;
283 
284  // x4->params.b_deblocking_filter = avctx->flags & AV_CODEC_FLAG_LOOP_FILTER;
285 
286  x4->params.rc.i_qp_min = avctx->qmin;
287  x4->params.rc.i_qp_max = avctx->qmax;
288  x4->params.rc.i_qp_step = avctx->max_qdiff;
289 
290  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
291  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
292 
293  x4->params.i_frame_reference = avctx->refs;
294 
295  x4->params.i_width = avctx->width;
296  x4->params.i_height = avctx->height;
297  x4->params.vui.i_sar_width = avctx->sample_aspect_ratio.num;
298  x4->params.vui.i_sar_height = avctx->sample_aspect_ratio.den;
299  /* This is only used for counting the fps */
300  x4->params.i_fps_num = avctx->time_base.den;
301  x4->params.i_fps_den = avctx->time_base.num;
302  x4->params.analyse.inter = XAVS_ANALYSE_I8x8 |XAVS_ANALYSE_PSUB16x16| XAVS_ANALYSE_BSUB16x16;
303 
304  x4->params.analyse.i_me_range = avctx->me_range;
305  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
306 
307  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
308  /* AVS P2 only enables 8x8 transform */
309  x4->params.analyse.b_transform_8x8 = 1; //avctx->flags2 & AV_CODEC_FLAG2_8X8DCT;
310 
311  x4->params.analyse.i_trellis = avctx->trellis;
312 
313  x4->params.analyse.i_noise_reduction = x4->noise_reduction;
314 
315  if (avctx->level > 0)
316  x4->params.i_level_idc = avctx->level;
317 
318  if (avctx->bit_rate > 0)
319  x4->params.rc.f_rate_tolerance =
320  (float)avctx->bit_rate_tolerance / avctx->bit_rate;
321 
322  if ((avctx->rc_buffer_size) &&
323  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
324  x4->params.rc.f_vbv_buffer_init =
326  } else
327  x4->params.rc.f_vbv_buffer_init = 0.9;
328 
329  /* TAG:do we have MB tree RC method */
330  /* what is the RC method we are now using? Default NO */
331  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
332  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
333 
334  x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset;
335 
336  x4->params.analyse.b_psnr = avctx->flags & AV_CODEC_FLAG_PSNR;
337  x4->params.i_log_level = XAVS_LOG_DEBUG;
338  x4->params.i_threads = avctx->thread_count;
339  x4->params.b_interlaced = avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT;
340 
341  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
342  x4->params.b_repeat_headers = 0;
343 
344  x4->enc = xavs_encoder_open(&x4->params);
345  if (!x4->enc)
346  return AVERROR_EXTERNAL;
347 
348  if (!FF_ALLOCZ_TYPED_ARRAY(x4->pts_buffer, avctx->max_b_frames + 1))
349  return AVERROR(ENOMEM);
350 
351  /* TAG: Do we have GLOBAL HEADER in AVS */
352  /* We Have PPS and SPS in AVS */
353  if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER && 0) {
354  xavs_nal_t *nal;
355  int nnal, s, i, size;
356  uint8_t *p;
357 
358  s = xavs_encoder_headers(x4->enc, &nal, &nnal);
359 
360  avctx->extradata = p = av_malloc(s);
361  for (i = 0; i < nnal; i++) {
362  /* Don't put the SEI in extradata. */
363  if (nal[i].i_type == NAL_SEI) {
364  x4->sei = av_malloc( 5 + nal[i].i_payload * 4 / 3 );
365  if (xavs_nal_encode(x4->sei, &x4->sei_size, 1, nal + i) < 0)
366  return -1;
367 
368  continue;
369  }
370  size = xavs_nal_encode(p, &s, 1, nal + i);
371  if (size < 0)
372  return -1;
373  p += size;
374  }
375  avctx->extradata_size = p - avctx->extradata;
376  }
377  return 0;
378 }
379 
380 #define OFFSET(x) offsetof(XavsContext, x)
381 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
382 static const AVOption options[] = {
383  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
384  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE },
385  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, {.i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
386  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
387  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, INT_MAX, VE, .unit = "direct-pred" },
388  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_NONE }, 0, 0, VE, .unit = "direct-pred" },
389  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_SPATIAL }, 0, 0, VE, .unit = "direct-pred" },
390  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_TEMPORAL }, 0, 0, VE, .unit = "direct-pred" },
391  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_DIRECT_PRED_AUTO }, 0, 0, VE, .unit = "direct-pred" },
392  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
393  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
394  { "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 },
395  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE},
396  { "motion-est", "Set motion estimation method", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = XAVS_ME_DIA }, -1, XAVS_ME_TESA, VE, .unit = "motion-est"},
397  { "dia", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_DIA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
398  { "hex", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_HEX }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
399  { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_UMH }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
400  { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_ESA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
401  { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = XAVS_ME_TESA }, INT_MIN, INT_MAX, VE, .unit = "motion-est" },
402  { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, VE},
403  { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE},
404  { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
405  { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
406 
407  { NULL },
408 };
409 
410 static const AVClass xavs_class = {
411  .class_name = "libxavs",
412  .item_name = av_default_item_name,
413  .option = options,
414  .version = LIBAVUTIL_VERSION_INT,
415 };
416 
417 static const FFCodecDefault xavs_defaults[] = {
418  { "b", "0" },
419  { NULL },
420 };
421 
423  .p.name = "libxavs",
424  CODEC_LONG_NAME("libxavs Chinese AVS (Audio Video Standard)"),
425  .p.type = AVMEDIA_TYPE_VIDEO,
426  .p.id = AV_CODEC_ID_CAVS,
427  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
429  .priv_data_size = sizeof(XavsContext),
430  .init = XAVS_init,
432  .close = XAVS_close,
433  .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
436  .color_ranges = AVCOL_RANGE_MPEG,
437  .p.priv_class = &xavs_class,
438  .defaults = xavs_defaults,
439  .p.wrapper_name = "libxavs",
440 };
FF_ALLOCZ_TYPED_ARRAY
#define FF_ALLOCZ_TYPED_ARRAY(p, nelem)
Definition: internal.h:78
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:459
CODEC_PIXFMTS
#define CODEC_PIXFMTS(...)
Definition: codec_internal.h:392
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
level
uint8_t level
Definition: svq3.c:208
AVCodecContext::keyint_min
int keyint_min
minimum GOP size
Definition: avcodec.h:998
options
static const AVOption options[]
Definition: libxavs.c:382
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:47
opt.h
XavsContext
Definition: libxavs.c:41
AVPictureType
AVPictureType
Definition: avutil.h:276
int64_t
long long int64_t
Definition: coverity.c:34
VE
#define VE
Definition: libxavs.c:381
OFFSET
#define OFFSET(x)
Definition: libxavs.c:380
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
XavsContext::sei
uint8_t * sei
Definition: libxavs.c:46
AVPacket::data
uint8_t * data
Definition: packet.h:588
AVOption
AVOption.
Definition: opt.h:429
encode.h
FF_CODEC_CAP_NOT_INIT_THREADSAFE
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
Definition: codec_internal.h:34
FFCodec
Definition: codec_internal.h:127
float.h
AV_CODEC_FLAG_PSNR
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:306
AVCodecContext::qmax
int qmax
maximum quantizer
Definition: avcodec.h:1241
AVCodecContext::me_subpel_quality
int me_subpel_quality
subpel ME quality
Definition: avcodec.h:920
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:643
XAVS_log
static void XAVS_log(void *p, int level, const char *fmt, va_list args)
Definition: libxavs.c:68
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:318
XAVS_init
static av_cold int XAVS_init(AVCodecContext *avctx)
Definition: libxavs.c:222
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:209
FFCodecDefault
Definition: codec_internal.h:96
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
XavsContext::noise_reduction
int noise_reduction
Definition: libxavs.c:62
XavsContext::end_of_stream
int end_of_stream
Definition: libxavs.c:48
AVCodecContext::thread_count
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition: avcodec.h:1561
XavsContext::aud
int aud
Definition: libxavs.c:54
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:689
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:488
FF_CMP_CHROMA
#define FF_CMP_CHROMA
Definition: avcodec.h:885
AVCodecContext::bit_rate_tolerance
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
Definition: avcodec.h:1209
ff_encode_add_stats_side_data
int ff_encode_add_stats_side_data(AVPacket *pkt, int quality, const int64_t error[], int error_count, enum AVPictureType pict_type)
Definition: encode.c:918
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:359
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:310
XavsContext::params
xavs_param_t params
Definition: libxavs.c:43
END_OF_STREAM
#define END_OF_STREAM
Definition: libxavs.c:35
pkt
AVPacket * pkt
Definition: movenc.c:60
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
av_cold
#define av_cold
Definition: attributes.h:106
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:1298
XavsContext::motion_est
int motion_est
Definition: libxavs.c:56
float
float
Definition: af_crystalizer.c:122
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:697
s
#define s(width, name)
Definition: cbs_vp9.c:198
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:109
xavs_defaults
static const FFCodecDefault xavs_defaults[]
Definition: libxavs.c:417
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
ctx
AVFormatContext * ctx
Definition: movenc.c:49
XavsContext::chroma_offset
int chroma_offset
Definition: libxavs.c:60
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:73
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1270
encode_nals
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, xavs_nal_t *nals, int nnal)
Definition: libxavs.c:83
XavsContext::pic
xavs_picture_t pic
Definition: libxavs.c:45
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
if
if(ret)
Definition: filter_design.txt:179
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1255
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
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:1227
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:481
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:241
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
options
Definition: swscale.c:43
AVCodecContext::me_cmp
int me_cmp
motion estimation comparison function
Definition: avcodec.h:850
AVCodecContext::trellis
int trellis
trellis RD quantization
Definition: avcodec.h:1305
XavsContext::b_bias
int b_bias
Definition: libxavs.c:51
AVCodecContext::level
int level
Encoding level descriptor.
Definition: avcodec.h:1628
XavsContext::out_frame_count
int out_frame_count
Definition: libxavs.c:65
AVCodecContext::qcompress
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
Definition: avcodec.h:1226
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:535
aud
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
Definition: cbs_h264_syntax_template.c:875
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:550
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
XAVS_frame
static int XAVS_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: libxavs.c:122
AVCodecContext::gop_size
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:1005
codec_internal.h
size
int size
Definition: twinvq_data.h:10344
xavs_class
static const AVClass xavs_class
Definition: libxavs.c:410
AVCodecContext::me_range
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
Definition: avcodec.h:929
AV_PICTURE_TYPE_NONE
@ AV_PICTURE_TYPE_NONE
Undefined.
Definition: avutil.h:277
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:587
AV_CODEC_FLAG_PASS2
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:294
AVERROR_EXTERNAL
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition: error.h:59
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:594
ff_libxavs_encoder
const FFCodec ff_libxavs_encoder
Definition: libxavs.c:422
XavsContext::mixed_refs
int mixed_refs
Definition: libxavs.c:58
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
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:778
AV_OPT_TYPE_FLOAT
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
Definition: opt.h:271
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:581
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
internal.h
AV_CODEC_ID_CAVS
@ AV_CODEC_ID_CAVS
Definition: codec_id.h:139
XavsContext::direct_pred
int direct_pred
Definition: libxavs.c:53
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
AVCodecContext::height
int height
Definition: avcodec.h:592
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:760
avcodec.h
AVCodecContext::frame_num
int64_t frame_num
Frame counter, set by libavcodec.
Definition: avcodec.h:1878
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:81
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:265
XavsContext::b_frame_strategy
int b_frame_strategy
Definition: libxavs.c:59
XavsContext::enc
xavs_t * enc
Definition: libxavs.c:44
U
#define U(x)
Definition: vpx_arith.h:37
AVCodecContext::max_qdiff
int max_qdiff
maximum quantizer difference between frames
Definition: avcodec.h:1248
AVCodecContext
main external API structure.
Definition: avcodec.h:431
XavsContext::scenechange_threshold
int scenechange_threshold
Definition: libxavs.c:61
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:280
XavsContext::fast_pskip
int fast_pskip
Definition: libxavs.c:55
ff_get_encode_buffer
int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags)
Get a buffer for a packet.
Definition: encode.c:105
XavsContext::cqp
int cqp
Definition: libxavs.c:50
AVCodecContext::qmin
int qmin
minimum quantizer
Definition: avcodec.h:1234
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
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:76
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
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:769
FF_CODEC_CAP_AUTO_THREADS
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
Definition: codec_internal.h:72
XavsContext::mbtree
int mbtree
Definition: libxavs.c:57
XavsContext::cplxblur
float cplxblur
Definition: libxavs.c:52
XavsContext::crf
float crf
Definition: libxavs.c:49
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:458
AVPacket
This structure stores compressed data.
Definition: packet.h:565
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition: opt.h:327
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
XavsContext::pts_buffer
int64_t * pts_buffer
Definition: libxavs.c:64
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:592
FF_QP2LAMBDA
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:226
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1292
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:616
AV_CODEC_FLAG_PASS1
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:290