FFmpeg
hevcdec.h
Go to the documentation of this file.
1 /*
2  * HEVC video decoder
3  *
4  * Copyright (C) 2012 - 2013 Guillaume Martres
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef AVCODEC_HEVCDEC_H
24 #define AVCODEC_HEVCDEC_H
25 
26 #include <stdatomic.h>
27 
28 #include "libavutil/buffer.h"
29 #include "libavutil/md5.h"
30 #include "libavutil/mem_internal.h"
31 
32 #include "avcodec.h"
33 #include "bswapdsp.h"
34 #include "cabac.h"
35 #include "get_bits.h"
36 #include "hevcpred.h"
37 #include "h2645_parse.h"
38 #include "hevc.h"
39 #include "hevc_ps.h"
40 #include "hevc_sei.h"
41 #include "hevcdsp.h"
42 #include "internal.h"
43 #include "thread.h"
44 #include "videodsp.h"
45 
46 #define SHIFT_CTB_WPP 2
47 
48 //TODO: check if this is really the maximum
49 #define MAX_TRANSFORM_DEPTH 5
50 
51 #define MAX_TB_SIZE 32
52 #define MAX_QP 51
53 #define DEFAULT_INTRA_TC_OFFSET 2
54 
55 #define HEVC_CONTEXTS 199
56 #define HEVC_STAT_COEFFS 4
57 
58 #define MRG_MAX_NUM_CANDS 5
59 
60 #define L0 0
61 #define L1 1
62 
63 #define EPEL_EXTRA_BEFORE 1
64 #define EPEL_EXTRA_AFTER 2
65 #define EPEL_EXTRA 3
66 #define QPEL_EXTRA_BEFORE 3
67 #define QPEL_EXTRA_AFTER 4
68 #define QPEL_EXTRA 7
69 
70 #define EDGE_EMU_BUFFER_STRIDE 80
71 
72 /**
73  * Value of the luma sample at position (x, y) in the 2D array tab.
74  */
75 #define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)])
76 #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
77 
78 #define IS_IDR(s) ((s)->nal_unit_type == HEVC_NAL_IDR_W_RADL || (s)->nal_unit_type == HEVC_NAL_IDR_N_LP)
79 #define IS_BLA(s) ((s)->nal_unit_type == HEVC_NAL_BLA_W_RADL || (s)->nal_unit_type == HEVC_NAL_BLA_W_LP || \
80  (s)->nal_unit_type == HEVC_NAL_BLA_N_LP)
81 #define IS_IRAP(s) ((s)->nal_unit_type >= 16 && (s)->nal_unit_type <= 23)
82 
83 enum RPSType {
90 };
91 
142 };
143 
144 enum PartMode {
148  PART_NxN = 3,
153 };
154 
155 enum PredMode {
159 };
160 
162  PRED_L0 = 0,
165 };
166 
167 enum PredFlag {
168  PF_INTRA = 0,
172 };
173 
210 };
211 
212 enum SAOType {
217 };
218 
224 };
225 
226 enum ScanType {
230 };
231 
232 typedef struct LongTermRPS {
233  int poc[32];
237 } LongTermRPS;
238 
239 typedef struct RefPicList {
242  int isLongTerm[HEVC_MAX_REFS];
243  int nb_refs;
244 } RefPicList;
245 
246 typedef struct RefPicListTab {
247  RefPicList refPicList[2];
248 } RefPicListTab;
249 
250 typedef struct SliceHeader {
251  unsigned int pps_id;
252 
253  ///< address (in raster order) of the first block in the current slice segment
254  unsigned int slice_segment_addr;
255  ///< address (in raster order) of the first block in the current slice
256  unsigned int slice_addr;
257 
258  enum HEVCSliceType slice_type;
259 
261 
266 
267  ///< RPS coded in the slice header itself is stored here
274  unsigned int list_entry_lx[2][32];
275 
276  uint8_t rpl_modification_flag[2];
279 
280  unsigned int nb_refs[2];
281 
282  uint8_t slice_sample_adaptive_offset_flag[3];
284 
286  uint8_t disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag
289 
290  unsigned int collocated_ref_idx;
291 
295 
297 
298  int beta_offset; ///< beta_offset_div2 * 2
299  int tc_offset; ///< tc_offset_div2 * 2
300 
301  unsigned int max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand
302 
304  int * offset;
305  int * size;
307 
308  int8_t slice_qp;
309 
312 
313  int16_t luma_weight_l0[16];
314  int16_t chroma_weight_l0[16][2];
315  int16_t chroma_weight_l1[16][2];
316  int16_t luma_weight_l1[16];
317 
318  int16_t luma_offset_l0[16];
319  int16_t chroma_offset_l0[16][2];
320 
321  int16_t luma_offset_l1[16];
322  int16_t chroma_offset_l1[16][2];
323 
325 } SliceHeader;
326 
327 typedef struct CodingUnit {
328  int x;
329  int y;
330 
331  enum PredMode pred_mode; ///< PredMode
332  enum PartMode part_mode; ///< PartMode
333 
334  // Inferred parameters
335  uint8_t intra_split_flag; ///< IntraSplitFlag
336  uint8_t max_trafo_depth; ///< MaxTrafoDepth
338 } CodingUnit;
339 
340 typedef struct Mv {
341  int16_t x; ///< horizontal component of motion vector
342  int16_t y; ///< vertical component of motion vector
343 } Mv;
344 
345 typedef struct MvField {
347  int8_t ref_idx[2];
348  int8_t pred_flag;
349 } MvField;
350 
351 typedef struct NeighbourAvailable {
354  int cand_up;
359 
360 typedef struct PredictionUnit {
361  int mpm_idx;
363  uint8_t intra_pred_mode[4];
366  uint8_t intra_pred_mode_c[4];
367  uint8_t chroma_mode_c[4];
369 
370 typedef struct TransformUnit {
372 
374 
375  // Inferred parameters;
384 } TransformUnit;
385 
386 typedef struct DBParams {
389 } DBParams;
390 
391 #define HEVC_FRAME_FLAG_OUTPUT (1 << 0)
392 #define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
393 #define HEVC_FRAME_FLAG_LONG_REF (1 << 2)
394 #define HEVC_FRAME_FLAG_BUMPING (1 << 3)
395 
396 typedef struct HEVCFrame {
403  int poc;
405 
409 
412 
413  /**
414  * A sequence counter, so that old frames are output first
415  * after a POC reset
416  */
417  uint16_t sequence;
418 
419  /**
420  * A combination of HEVC_FRAME_FLAG_*
421  */
423 } HEVCFrame;
424 
425 typedef struct HEVCLocalContext {
426  uint8_t cabac_state[HEVC_CONTEXTS];
427 
429 
431 
434 
435  int8_t qp_y;
436  int8_t curr_qp_y;
437 
438  int qPy_pred;
439 
441 
448  /* +7 is for subpixel interpolation, *2 for high bit depths */
449  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
450  /* The extended size between the new edge emu buffer is abused by SAO */
451  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer2)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
453 
454  int ct_depth;
458 
459 #define BOUNDARY_LEFT_SLICE (1 << 0)
460 #define BOUNDARY_LEFT_TILE (1 << 1)
461 #define BOUNDARY_UPPER_SLICE (1 << 2)
462 #define BOUNDARY_UPPER_TILE (1 << 3)
463  /* properties of the boundary of the current CTB for the purposes
464  * of the deblocking filter */
467 
468 typedef struct HEVCContext {
469  const AVClass *c; // needed by private avoptions
471 
472  struct HEVCContext **sList;
473 
476 
479 
480  int width;
481  int height;
482 
485 
486  /** 1 if the independent slice segment header was successfully parsed */
488 
493 
496  struct AVMD5 *md5_ctx;
497 
500 
501  ///< candidate references for the current frame
502  RefPicList rps[5];
503 
507  enum HEVCNALUnitType nal_unit_type;
508  int temporal_id; ///< temporal_id_plus1 - 1
511  int poc;
512  int pocTid0;
513  int slice_idx; ///< number of the slice being currently decoded
514  int eos; ///< current packet contains an EOS/EOB NAL
515  int last_eos; ///< last packet contains an EOS/EOB NAL
516  int max_ra;
517  int bs_width;
519  int overlap;
520 
523 
528  int8_t *qp_y_tab;
531 
533 
534  // CU
537  // PU
539 
540  uint8_t *cbf_luma; // cbf_luma of colocated TU
542 
543  // CTB-level flags affecting loop filter operation
545 
546  /** used on BE to byteswap the lines for checksumming */
549 
550  /**
551  * Sequence counters for decoded and output frames, so that old
552  * frames are output first after a POC reset
553  */
554  uint16_t seq_decode;
555  uint16_t seq_output;
556 
559 
560  const uint8_t *data;
561 
563  // type of the first VCL NAL of the current frame
564  enum HEVCNALUnitType first_nal_type;
565 
567  int is_nalff; ///< this flag is != 0 if bitstream is encapsulated
568  ///< as a format defined in 14496-15
570 
571  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
573 } HEVCContext;
574 
575 /**
576  * Mark all frames in DPB as unused for reference.
577  */
579 
580 /**
581  * Drop all frames currently in DPB.
582  */
584 
586  int x0, int y0);
587 
588 /**
589  * Construct the reference picture sets for the current frame.
590  */
592 
593 /**
594  * Construct the reference picture list(s) for the current slice.
595  */
597 
598 void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts);
599 int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread);
608 int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0,
609  int x_cb, int y_cb);
612  int x0, int y0);
613 int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size);
621 int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH);
622 int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx);
625 int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size);
626 int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth);
627 int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth);
630 
631 /**
632  * Get the number of candidate references for the current frame.
633  */
635 
637 
639 {
640  switch (type) {
641  case HEVC_NAL_TRAIL_N:
642  case HEVC_NAL_TSA_N:
643  case HEVC_NAL_STSA_N:
644  case HEVC_NAL_RADL_N:
645  case HEVC_NAL_RASL_N:
646  case HEVC_NAL_VCL_N10:
647  case HEVC_NAL_VCL_N12:
648  case HEVC_NAL_VCL_N14:
649  return 1;
650  default: break;
651  }
652  return 0;
653 }
654 
655 /**
656  * Find next frame in output order and put a reference to it in frame.
657  * @return 1 if a frame was output, 0 otherwise
658  */
660 
662 
663 void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags);
664 
665 void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0,
666  int nPbW, int nPbH);
667 void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0,
668  int nPbW, int nPbH, int log2_cb_size,
669  int part_idx, int merge_idx, MvField *mv);
670 void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0,
671  int nPbW, int nPbH, int log2_cb_size,
672  int part_idx, int merge_idx,
673  MvField *mv, int mvp_lx_flag, int LX);
674 void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase,
675  int log2_cb_size);
676 void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
677  int log2_trafo_size);
682 void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size);
683 void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size);
684 void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
685  int log2_trafo_size, enum ScanType scan_idx,
686  int c_idx);
687 
688 void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size);
689 
690 extern const uint8_t ff_hevc_qpel_extra_before[4];
691 extern const uint8_t ff_hevc_qpel_extra_after[4];
692 extern const uint8_t ff_hevc_qpel_extra[4];
693 
694 #endif /* AVCODEC_HEVCDEC_H */
int8_t cu_qp_offset_cr
Definition: hevcdec.h:382
uint8_t ctb_up_flag
Definition: hevcdec.h:443
AVFrame * frame
Definition: hevcdec.h:397
HEVCPredContext hpc
Definition: hevcdec.h:524
NeighbourAvailable na
Definition: hevcdec.h:457
int ff_hevc_slice_rpl(HEVCContext *s)
Construct the reference picture list(s) for the current slice.
Definition: hevc_refs.c:291
int pic_order_cnt_lsb
Definition: hevcdec.h:260
int short_term_ref_pic_set_sps_flag
Definition: hevcdec.h:268
This structure describes decoded (raw) audio or video data.
Definition: frame.h:318
HEVCFrame * ref
Definition: hevcdec.h:509
#define HEVC_CONTEXTS
Definition: hevcdec.h:55
uint8_t is_cu_qp_delta_coded
Definition: hevcdec.h:379
int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH)
Definition: hevc_cabac.c:804
static void flush(AVCodecContext *avctx)
int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
Definition: hevc_cabac.c:603
void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase, int log2_cb_size)
Definition: hevc_filter.c:121
VideoDSPContext vdsp
Definition: hevcdec.h:526
const uint8_t ff_hevc_qpel_extra_before[4]
int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx)
Definition: hevc_cabac.c:912
int16_t x
horizontal component of motion vector
Definition: hevcdec.h:341
int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:615
void * hwaccel_picture_private
Definition: hevcdec.h:411
uint8_t * cabac_state
Definition: hevcdec.h:483
InterPredIdc
Definition: hevcdec.h:161
uint8_t nb_refs
Definition: hevcdec.h:236
MvField * tab_mvf
Definition: hevcdec.h:399
int bs_width
Definition: hevcdec.h:517
uint8_t intra_split_flag
IntraSplitFlag.
Definition: hevcdec.h:335
int rem_intra_luma_pred_mode
Definition: hevcdec.h:362
void ff_hevc_clear_refs(HEVCContext *s)
Mark all frames in DPB as unused for reference.
Definition: hevc_refs.c:66
unsigned int slice_addr
Definition: hevcdec.h:256
int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
Definition: hevc_cabac.c:883
int tc_offset
Definition: hevcdec.h:388
PredictionUnit pu
Definition: hevcdec.h:456
GLint GLenum type
Definition: opengl_enc.c:104
HEVCParamSets ps
Definition: hevcdec.h:494
int nuh_layer_id
Definition: hevcdec.h:572
intptr_t atomic_int
Definition: stdatomic.h:55
uint8_t dependent_slice_segment_flag
Definition: hevcdec.h:263
int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s)
Definition: hevc_cabac.c:677
CABACContext cc
Definition: hevcdec.h:433
ShortTermRPS slice_rps
Definition: hevcdec.h:270
int ff_hevc_mpm_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:759
uint16_t seq_decode
Sequence counters for decoded and output frames, so that old frames are output first after a POC rese...
Definition: hevcdec.h:554
HEVCNALUnitType
Table 7-1 – NAL unit type codes and NAL unit type classes in T-REC-H.265-201802. ...
Definition: hevc.h:28
uint8_t threads_type
Definition: hevcdec.h:477
int max_ra
Definition: hevcdec.h:516
void ff_hevc_bump_frame(HEVCContext *s)
Definition: hevc_refs.c:233
const uint8_t * data
Definition: hevcdec.h:560
int8_t curr_qp_y
Definition: hevcdec.h:436
AVBufferPool * rpl_tab_pool
candidate references for the current frame
Definition: hevcdec.h:499
int nb_refs
Definition: hevcdec.h:243
unsigned int slice_segment_addr
address (in raster order) of the first block in the current slice
Definition: hevcdec.h:254
int is_nalff
this flag is != 0 if bitstream is encapsulated as a format defined in 14496-15
Definition: hevcdec.h:567
int end_of_tiles_x
Definition: hevcdec.h:446
uint8_t
int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx)
Definition: hevc_cabac.c:903
int ff_hevc_output_frame(HEVCContext *s, AVFrame *frame, int flush)
Find next frame in output order and put a reference to it in frame.
Definition: hevc_refs.c:174
uint8_t ctb_up_right_flag
Definition: hevcdec.h:444
LongTermRPS long_term_rps
Definition: hevcdec.h:273
int poc[32]
Definition: hevcdec.h:233
Multithreading support functions.
void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
Definition: hevc_cabac.c:450
int num_entry_point_offsets
Definition: hevcdec.h:306
SAOType
Definition: hevcdec.h:212
AVFrame * output_frame
Definition: hevcdec.h:490
int apply_defdispwin
Definition: hevcdec.h:569
SAOParams * sao
Definition: hevcdec.h:505
AVCodecContext * avctx
Definition: hevcdec.h:470
int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size)
Definition: hevc_cabac.c:712
int ff_hevc_sao_band_position_decode(HEVCContext *s)
Definition: hevc_cabac.c:583
uint8_t poc_msb_present[32]
Definition: hevcdec.h:234
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:117
BswapDSPContext bdsp
Definition: hevcdec.h:527
ThreadFrame tf
Definition: hevcdec.h:398
uint8_t first_slice_in_pic_flag
Definition: hevcdec.h:262
uint8_t ctb_up_left_flag
Definition: hevcdec.h:445
uint8_t threads_number
Definition: hevcdec.h:478
uint8_t is_cu_chroma_qp_offset_coded
Definition: hevcdec.h:380
bitstream reader API header.
int8_t pred_flag
Definition: hevcdec.h:348
int8_t * qp_y_tab
Definition: hevcdec.h:528
uint8_t pic_output_flag
Definition: hevcdec.h:264
uint8_t * tab_ct_depth
Definition: hevcdec.h:536
uint8_t cu_transquant_bypass_flag
Definition: hevcdec.h:337
int ff_hevc_frame_rps(HEVCContext *s)
Construct the reference picture sets for the current frame.
Definition: hevc_refs.c:443
Definition: md5.c:40
int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s)
Definition: hevc_cabac.c:767
RPSType
Definition: hevcdec.h:83
uint8_t used[32]
Definition: hevcdec.h:235
The buffer pool.
int temporal_id
temporal_id_plus1 - 1
Definition: hevcdec.h:508
uint8_t first_qp_group
Definition: hevcdec.h:430
HEVCDSPContext hevcdsp
Definition: hevcdec.h:525
int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
Definition: hevc_cabac.c:667
int ctb_count
Definition: hevcdec.h:402
uint8_t no_output_of_prior_pics_flag
Definition: hevcdec.h:277
int slice_idx
number of the slice being currently decoded
Definition: hevcdec.h:513
uint8_t colour_plane_id
RPS coded in the slice header itself is stored here.
Definition: hevcdec.h:265
uint8_t cu_chroma_qp_offset_enabled_flag
Definition: hevcdec.h:296
uint8_t slice_initialized
1 if the independent slice segment header was successfully parsed
Definition: hevcdec.h:487
RefPicList * ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *frame, int x0, int y0)
Definition: hevc_refs.c:57
AVBufferRef * rpl_tab_buf
Definition: hevcdec.h:407
int * size
Definition: hevcdec.h:305
RefPicList * refPicList
Definition: hevcdec.h:400
int bs_height
Definition: hevcdec.h:518
static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
Definition: hevcdec.h:638
uint8_t * sao_pixel_buffer_h[3]
Definition: hevcdec.h:491
int8_t cu_qp_offset_cb
Definition: hevcdec.h:381
int tc_offset
tc_offset_div2 * 2
Definition: hevcdec.h:299
const ShortTermRPS * short_term_rps
Definition: hevcdec.h:271
uint8_t merge_flag
Definition: hevcdec.h:365
struct AVMD5 * md5_ctx
Definition: hevcdec.h:496
unsigned * entry_point_offset
Definition: hevcdec.h:303
int8_t slice_qp
Definition: hevcdec.h:308
void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
Definition: hevc_cabac.c:1541
uint8_t max_trafo_depth
MaxTrafoDepth.
Definition: hevcdec.h:336
HEVCLocalContext ** HEVClcList
Definition: hevcdec.h:474
uint16_t sequence
A sequence counter, so that old frames are output first after a POC reset.
Definition: hevcdec.h:417
uint8_t slice_temporal_mvp_enabled_flag
Definition: hevcdec.h:278
Definition: hevcdec.h:170
uint8_t * vertical_bs
Definition: hevcdec.h:530
int chroma_mode_c
Definition: hevcdec.h:378
int slice_qp_delta
Definition: hevcdec.h:292
int intra_pred_mode
Definition: hevcdec.h:376
int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
Definition: hevc_cabac.c:873
AVBufferRef * tab_mvf_buf
Definition: hevcdec.h:406
void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv)
Definition: hevc_mvs.c:479
int beta_offset
beta_offset_div2 * 2
Definition: hevcdec.h:298
int res_scale_val
Definition: hevcdec.h:373
Definition: hevcdec.h:171
uint8_t * sao_pixel_buffer_v[3]
Definition: hevcdec.h:492
int slice_cr_qp_offset
Definition: hevcdec.h:294
int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc)
Definition: hevc_refs.c:135
uint8_t * tab_ipm
Definition: hevcdec.h:538
int ff_hevc_mvp_lx_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:830
int ff_hevc_sao_offset_abs_decode(HEVCContext *s)
Definition: hevc_cabac.c:593
const uint8_t ff_hevc_qpel_extra[4]
int32_t
PartMode
Definition: hevcdec.h:144
int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
Definition: hevc_cabac.c:693
SyntaxElement
Definition: hevcdec.h:92
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
void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX)
Definition: hevc_mvs.c:582
#define s(width, name)
Definition: cbs_vp9.c:257
int intra_pred_mode_c
Definition: hevcdec.h:377
int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s)
Definition: hevc_cabac.c:672
struct HEVCFrame * collocated_ref
Definition: hevcdec.h:404
uint16_t seq_output
Definition: hevcdec.h:555
void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, int log2_trafo_size)
Definition: hevc_filter.c:714
int ff_hevc_sao_eo_class_decode(HEVCContext *s)
Definition: hevc_cabac.c:608
void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags)
Definition: hevc_refs.c:32
SAOEOClass
Definition: hevcdec.h:219
int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:754
unsigned int pps_id
address (in raster order) of the first block in the current slice segment
Definition: hevcdec.h:251
int ff_hevc_merge_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:799
static const int8_t mv[256][2]
Definition: 4xm.c:78
IntraPredMode
Definition: hevcdec.h:174
RefPicListTab ** rpl_tab
Definition: hevcdec.h:401
int slice_cb_qp_offset
Definition: hevcdec.h:293
void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
Definition: hevc_filter.c:842
int overlap
Definition: hevcdec.h:519
int short_term_ref_pic_set_size
Definition: hevcdec.h:269
Libavcodec external API header.
int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth)
Definition: hevc_cabac.c:878
PredMode
Definition: hevcdec.h:155
int long_term_ref_pic_set_size
Definition: hevcdec.h:272
main external API structure.
Definition: avcodec.h:536
AVBufferRef * hwaccel_priv_buf
Definition: hevcdec.h:410
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 list
atomic_int wpp_err
Definition: hevcdec.h:558
int16_t y
vertical component of motion vector
Definition: hevcdec.h:342
uint8_t cross_pf
Definition: hevcdec.h:383
int height
Definition: hevcdec.h:481
#define EDGE_EMU_BUFFER_STRIDE
Definition: hevcdec.h:70
int ff_hevc_pred_mode_decode(HEVCContext *s)
Definition: hevc_cabac.c:688
TransformUnit tu
Definition: hevcdec.h:440
uint8_t ctb_left_flag
Definition: hevcdec.h:442
int cu_qp_delta
Definition: hevcdec.h:371
uint8_t * is_pcm
Definition: hevcdec.h:541
uint8_t * checksum_buf
used on BE to byteswap the lines for checksumming
Definition: hevcdec.h:547
uint8_t cabac_init_flag
Definition: hevcdec.h:285
Describe the class of an AVClass context structure.
Definition: log.h:67
int ff_hevc_sao_type_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:573
int poc
Definition: hevcdec.h:403
AVFrame * frame
Definition: hevcdec.h:489
struct HEVCContext ** sList
Definition: hevcdec.h:472
void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0, int nPbW, int nPbH)
Definition: hevc_mvs.c:42
int enable_parallel_tiles
Definition: hevcdec.h:557
unsigned int max_num_merge_cand
5 - 5_minus_max_num_merge_cand
Definition: hevcdec.h:301
int checksum_buf_size
Definition: hevcdec.h:548
int last_eos
last packet contains an EOS/EOB NAL
Definition: hevcdec.h:515
DBParams * deblock
Definition: hevcdec.h:506
GetBitContext gb
Definition: hevcdec.h:432
refcounted data buffer API
int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:835
int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread)
Definition: hevc_cabac.c:511
Definition: hevcdec.h:169
Definition: hevcdec.h:340
PredFlag
Definition: hevcdec.h:167
int ff_hevc_pcm_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:749
int16_t chroma_log2_weight_denom
Definition: hevcdec.h:311
int pocTid0
Definition: hevcdec.h:512
uint8_t flags
A combination of HEVC_FRAME_FLAG_*.
Definition: hevcdec.h:422
HEVCLocalContext * HEVClc
Definition: hevcdec.h:475
#define MAX_PB_SIZE
Definition: hevcdsp.h:32
#define flags(name, subs,...)
Definition: cbs_av1.c:561
int ff_hevc_cu_qp_delta_abs(HEVCContext *s)
Definition: hevc_cabac.c:640
int ff_hevc_frame_nb_refs(const HEVCContext *s)
Get the number of candidate references for the current frame.
Definition: hevc_refs.c:503
uint8_t stat_coeff[HEVC_STAT_COEFFS]
Definition: hevcdec.h:484
#define HEVC_STAT_COEFFS
Definition: hevcdec.h:56
const uint8_t ff_hevc_qpel_extra_after[4]
int eos
current packet contains an EOS/EOB NAL
Definition: hevcdec.h:514
HEVCSliceType
Definition: hevc.h:95
A reference to a data buffer.
Definition: buffer.h:84
int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:568
uint8_t * skip_flag
Definition: hevcdec.h:535
int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:620
common internal api header.
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
uint8_t * horizontal_bs
Definition: hevcdec.h:529
int32_t * tab_slice_address
Definition: hevcdec.h:532
uint8_t disable_deblocking_filter_flag
slice_header_disable_deblocking_filter_flag
Definition: hevcdec.h:286
const AVClass * c
Definition: hevcdec.h:469
uint8_t * filter_slice_edges
Definition: hevcdec.h:544
uint8_t collocated_list
Definition: hevcdec.h:288
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: hevcdec.h:571
int slice_ctb_addr_rs
Definition: hevcdec.h:324
AVBufferPool * tab_mvf_pool
Definition: hevcdec.h:498
Core video DSP helper functions.
int ff_hevc_merge_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:788
uint8_t slice_loop_filter_across_slices_enabled_flag
Definition: hevcdec.h:287
void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx)
Definition: hevc_cabac.c:1031
void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size)
Definition: hevc_filter.c:878
unsigned int collocated_ref_idx
Definition: hevcdec.h:290
Decoded Picture Buffer (DPB).
Definition: vaapi_h264.c:82
CodingUnit cu
Definition: hevcdec.h:455
int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
Definition: hevc_cabac.c:625
int beta_offset
Definition: hevcdec.h:387
uint8_t luma_log2_weight_denom
Definition: hevcdec.h:310
HEVCSEI sei
Definition: hevcdec.h:495
H2645Packet pkt
Definition: hevcdec.h:562
int boundary_flags
Definition: hevcdec.h:465
Public header for MD5 hash function implementation.
#define av_always_inline
Definition: attributes.h:45
uint8_t context_initialized
Definition: hevcdec.h:566
AVBufferRef * rpl_buf
Definition: hevcdec.h:408
int is_decoded
Definition: hevcdec.h:521
int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx)
Definition: hevc_cabac.c:814
uint8_t * cbf_luma
Definition: hevcdec.h:540
void ff_hevc_flush_dpb(HEVCContext *s)
Drop all frames currently in DPB.
Definition: hevc_refs.c:75
SliceHeader sh
Definition: hevcdec.h:504
int no_rasl_output_flag
Definition: hevcdec.h:522
ScanType
Definition: hevcdec.h:226
int width
Definition: hevcdec.h:480
int * offset
Definition: hevcdec.h:304
uint8_t mvd_l1_zero_flag
Definition: hevcdec.h:283
int end_of_tiles_y
Definition: hevcdec.h:447
int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s)
Definition: hevc_cabac.c:777
Context Adaptive Binary Arithmetic Coder.
static uint8_t tmp[11]
Definition: aes_ctr.c:27