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 
31 #include "avcodec.h"
32 #include "bswapdsp.h"
33 #include "cabac.h"
34 #include "get_bits.h"
35 #include "hevcpred.h"
36 #include "h2645_parse.h"
37 #include "hevc.h"
38 #include "hevc_ps.h"
39 #include "hevc_sei.h"
40 #include "hevcdsp.h"
41 #include "internal.h"
42 #include "thread.h"
43 #include "videodsp.h"
44 
45 #define MAX_NB_THREADS 16
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 
57 #define MRG_MAX_NUM_CANDS 5
58 
59 #define L0 0
60 #define L1 1
61 
62 #define EPEL_EXTRA_BEFORE 1
63 #define EPEL_EXTRA_AFTER 2
64 #define EPEL_EXTRA 3
65 #define QPEL_EXTRA_BEFORE 3
66 #define QPEL_EXTRA_AFTER 4
67 #define QPEL_EXTRA 7
68 
69 #define EDGE_EMU_BUFFER_STRIDE 80
70 
71 /**
72  * Value of the luma sample at position (x, y) in the 2D array tab.
73  */
74 #define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)])
75 #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
76 
77 #define IS_IDR(s) ((s)->nal_unit_type == HEVC_NAL_IDR_W_RADL || (s)->nal_unit_type == HEVC_NAL_IDR_N_LP)
78 #define IS_BLA(s) ((s)->nal_unit_type == HEVC_NAL_BLA_W_RADL || (s)->nal_unit_type == HEVC_NAL_BLA_W_LP || \
79  (s)->nal_unit_type == HEVC_NAL_BLA_N_LP)
80 #define IS_IRAP(s) ((s)->nal_unit_type >= 16 && (s)->nal_unit_type <= 23)
81 
82 enum RPSType {
89 };
90 
141 };
142 
143 enum PartMode {
147  PART_NxN = 3,
152 };
153 
154 enum PredMode {
158 };
159 
161  PRED_L0 = 0,
164 };
165 
166 enum PredFlag {
167  PF_INTRA = 0,
171 };
172 
209 };
210 
211 enum SAOType {
216 };
217 
223 };
224 
225 enum ScanType {
229 };
230 
231 typedef struct LongTermRPS {
232  int poc[32];
236 } LongTermRPS;
237 
238 typedef struct RefPicList {
241  int isLongTerm[HEVC_MAX_REFS];
242  int nb_refs;
243 } RefPicList;
244 
245 typedef struct RefPicListTab {
246  RefPicList refPicList[2];
247 } RefPicListTab;
248 
249 typedef struct SliceHeader {
250  unsigned int pps_id;
251 
252  ///< address (in raster order) of the first block in the current slice segment
253  unsigned int slice_segment_addr;
254  ///< address (in raster order) of the first block in the current slice
255  unsigned int slice_addr;
256 
257  enum HEVCSliceType slice_type;
258 
260 
265 
266  ///< RPS coded in the slice header itself is stored here
273  unsigned int list_entry_lx[2][32];
274 
275  uint8_t rpl_modification_flag[2];
278 
279  unsigned int nb_refs[2];
280 
281  uint8_t slice_sample_adaptive_offset_flag[3];
283 
285  uint8_t disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag
288 
289  unsigned int collocated_ref_idx;
290 
294 
296 
297  int beta_offset; ///< beta_offset_div2 * 2
298  int tc_offset; ///< tc_offset_div2 * 2
299 
300  unsigned int max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand
301 
303  int * offset;
304  int * size;
306 
307  int8_t slice_qp;
308 
311 
312  int16_t luma_weight_l0[16];
313  int16_t chroma_weight_l0[16][2];
314  int16_t chroma_weight_l1[16][2];
315  int16_t luma_weight_l1[16];
316 
317  int16_t luma_offset_l0[16];
318  int16_t chroma_offset_l0[16][2];
319 
320  int16_t luma_offset_l1[16];
321  int16_t chroma_offset_l1[16][2];
322 
324 } SliceHeader;
325 
326 typedef struct CodingUnit {
327  int x;
328  int y;
329 
330  enum PredMode pred_mode; ///< PredMode
331  enum PartMode part_mode; ///< PartMode
332 
333  // Inferred parameters
334  uint8_t intra_split_flag; ///< IntraSplitFlag
335  uint8_t max_trafo_depth; ///< MaxTrafoDepth
337 } CodingUnit;
338 
339 typedef struct Mv {
340  int16_t x; ///< horizontal component of motion vector
341  int16_t y; ///< vertical component of motion vector
342 } Mv;
343 
344 typedef struct MvField {
346  int8_t ref_idx[2];
347  int8_t pred_flag;
348 } MvField;
349 
350 typedef struct NeighbourAvailable {
353  int cand_up;
358 
359 typedef struct PredictionUnit {
360  int mpm_idx;
362  uint8_t intra_pred_mode[4];
365  uint8_t intra_pred_mode_c[4];
366  uint8_t chroma_mode_c[4];
368 
369 typedef struct TransformUnit {
371 
373 
374  // Inferred parameters;
383 } TransformUnit;
384 
385 typedef struct DBParams {
388 } DBParams;
389 
390 #define HEVC_FRAME_FLAG_OUTPUT (1 << 0)
391 #define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
392 #define HEVC_FRAME_FLAG_LONG_REF (1 << 2)
393 #define HEVC_FRAME_FLAG_BUMPING (1 << 3)
394 
395 typedef struct HEVCFrame {
402  int poc;
404 
408 
411 
412  /**
413  * A sequence counter, so that old frames are output first
414  * after a POC reset
415  */
416  uint16_t sequence;
417 
418  /**
419  * A combination of HEVC_FRAME_FLAG_*
420  */
422 } HEVCFrame;
423 
424 typedef struct HEVCLocalContext {
425  uint8_t cabac_state[HEVC_CONTEXTS];
426 
427  uint8_t stat_coeff[4];
428 
430 
433 
434  int8_t qp_y;
435  int8_t curr_qp_y;
436 
437  int qPy_pred;
438 
440 
447  /* +7 is for subpixel interpolation, *2 for high bit depths */
448  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
449  /* The extended size between the new edge emu buffer is abused by SAO */
450  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer2)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
452 
453  int ct_depth;
457 
458 #define BOUNDARY_LEFT_SLICE (1 << 0)
459 #define BOUNDARY_LEFT_TILE (1 << 1)
460 #define BOUNDARY_UPPER_SLICE (1 << 2)
461 #define BOUNDARY_UPPER_TILE (1 << 3)
462  /* properties of the boundary of the current CTB for the purposes
463  * of the deblocking filter */
466 
467 typedef struct HEVCContext {
468  const AVClass *c; // needed by private avoptions
470 
472 
475 
478 
479  int width;
480  int height;
481 
483 
484  /** 1 if the independent slice segment header was successfully parsed */
486 
491 
494  struct AVMD5 *md5_ctx;
495 
498 
499  ///< candidate references for the current frame
500  RefPicList rps[5];
501 
505  enum HEVCNALUnitType nal_unit_type;
506  int temporal_id; ///< temporal_id_plus1 - 1
509  int poc;
510  int pocTid0;
511  int slice_idx; ///< number of the slice being currently decoded
512  int eos; ///< current packet contains an EOS/EOB NAL
513  int last_eos; ///< last packet contains an EOS/EOB NAL
514  int max_ra;
515  int bs_width;
517  int overlap;
518 
521 
526  int8_t *qp_y_tab;
529 
531 
532  // CU
535  // PU
537 
538  uint8_t *cbf_luma; // cbf_luma of colocated TU
540 
541  // CTB-level flags affecting loop filter operation
543 
544  /** used on BE to byteswap the lines for checksumming */
547 
548  /**
549  * Sequence counters for decoded and output frames, so that old
550  * frames are output first after a POC reset
551  */
552  uint16_t seq_decode;
553  uint16_t seq_output;
554 
557 
558  const uint8_t *data;
559 
561  // type of the first VCL NAL of the current frame
562  enum HEVCNALUnitType first_nal_type;
563 
565  int is_nalff; ///< this flag is != 0 if bitstream is encapsulated
566  ///< as a format defined in 14496-15
568 
569  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
571 } HEVCContext;
572 
573 /**
574  * Mark all frames in DPB as unused for reference.
575  */
577 
578 /**
579  * Drop all frames currently in DPB.
580  */
582 
584  int x0, int y0);
585 
586 /**
587  * Construct the reference picture sets for the current frame.
588  */
590 
591 /**
592  * Construct the reference picture list(s) for the current slice.
593  */
595 
596 void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts);
597 int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts);
606 int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0,
607  int x_cb, int y_cb);
610  int x0, int y0);
611 int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size);
619 int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH);
620 int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx);
623 int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size);
624 int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth);
625 int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth);
628 
629 /**
630  * Get the number of candidate references for the current frame.
631  */
633 
635 
637 {
638  switch (type) {
639  case HEVC_NAL_TRAIL_N:
640  case HEVC_NAL_TSA_N:
641  case HEVC_NAL_STSA_N:
642  case HEVC_NAL_RADL_N:
643  case HEVC_NAL_RASL_N:
644  case HEVC_NAL_VCL_N10:
645  case HEVC_NAL_VCL_N12:
646  case HEVC_NAL_VCL_N14:
647  return 1;
648  default: break;
649  }
650  return 0;
651 }
652 
653 /**
654  * Find next frame in output order and put a reference to it in frame.
655  * @return 1 if a frame was output, 0 otherwise
656  */
658 
660 
661 void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags);
662 
663 void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0,
664  int nPbW, int nPbH);
665 void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0,
666  int nPbW, int nPbH, int log2_cb_size,
667  int part_idx, int merge_idx, MvField *mv);
668 void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0,
669  int nPbW, int nPbH, int log2_cb_size,
670  int part_idx, int merge_idx,
671  MvField *mv, int mvp_lx_flag, int LX);
672 void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase,
673  int log2_cb_size);
674 void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
675  int log2_trafo_size);
680 void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size);
681 void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size);
682 void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
683  int log2_trafo_size, enum ScanType scan_idx,
684  int c_idx);
685 
686 void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size);
687 
688 extern const uint8_t ff_hevc_qpel_extra_before[4];
689 extern const uint8_t ff_hevc_qpel_extra_after[4];
690 extern const uint8_t ff_hevc_qpel_extra[4];
691 
692 #endif /* AVCODEC_HEVCDEC_H */
int8_t cu_qp_offset_cr
Definition: hevcdec.h:381
uint8_t ctb_up_flag
Definition: hevcdec.h:442
AVFrame * frame
Definition: hevcdec.h:396
HEVCPredContext hpc
Definition: hevcdec.h:522
NeighbourAvailable na
Definition: hevcdec.h:456
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:259
int short_term_ref_pic_set_sps_flag
Definition: hevcdec.h:267
This structure describes decoded (raw) audio or video data.
Definition: frame.h:308
HEVCFrame * ref
Definition: hevcdec.h:507
#define HEVC_CONTEXTS
Definition: hevcdec.h:55
uint8_t is_cu_qp_delta_coded
Definition: hevcdec.h:378
int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH)
Definition: hevc_cabac.c:797
static void flush(AVCodecContext *avctx)
int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
Definition: hevc_cabac.c:596
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:524
const uint8_t ff_hevc_qpel_extra_before[4]
int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx)
Definition: hevc_cabac.c:905
int16_t x
horizontal component of motion vector
Definition: hevcdec.h:340
int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:608
void * hwaccel_picture_private
Definition: hevcdec.h:410
uint8_t * cabac_state
Definition: hevcdec.h:482
InterPredIdc
Definition: hevcdec.h:160
uint8_t nb_refs
Definition: hevcdec.h:235
MvField * tab_mvf
Definition: hevcdec.h:398
int bs_width
Definition: hevcdec.h:515
uint8_t intra_split_flag
IntraSplitFlag.
Definition: hevcdec.h:334
int rem_intra_luma_pred_mode
Definition: hevcdec.h:361
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:255
int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
Definition: hevc_cabac.c:876
int tc_offset
Definition: hevcdec.h:387
PredictionUnit pu
Definition: hevcdec.h:455
GLint GLenum type
Definition: opengl_enc.c:104
HEVCParamSets ps
Definition: hevcdec.h:492
int nuh_layer_id
Definition: hevcdec.h:570
intptr_t atomic_int
Definition: stdatomic.h:55
uint8_t dependent_slice_segment_flag
Definition: hevcdec.h:262
int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s)
Definition: hevc_cabac.c:670
CABACContext cc
Definition: hevcdec.h:432
ShortTermRPS slice_rps
Definition: hevcdec.h:269
int ff_hevc_mpm_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:752
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:552
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:476
int max_ra
Definition: hevcdec.h:514
void ff_hevc_bump_frame(HEVCContext *s)
Definition: hevc_refs.c:233
const uint8_t * data
Definition: hevcdec.h:558
int8_t curr_qp_y
Definition: hevcdec.h:435
AVBufferPool * rpl_tab_pool
candidate references for the current frame
Definition: hevcdec.h:497
int nb_refs
Definition: hevcdec.h:242
unsigned int slice_segment_addr
address (in raster order) of the first block in the current slice
Definition: hevcdec.h:253
int is_nalff
this flag is != 0 if bitstream is encapsulated as a format defined in 14496-15
Definition: hevcdec.h:565
int end_of_tiles_x
Definition: hevcdec.h:445
uint8_t
int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx)
Definition: hevc_cabac.c:896
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:443
LongTermRPS long_term_rps
Definition: hevcdec.h:272
int poc[32]
Definition: hevcdec.h:232
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:305
SAOType
Definition: hevcdec.h:211
AVFrame * output_frame
Definition: hevcdec.h:488
int apply_defdispwin
Definition: hevcdec.h:567
SAOParams * sao
Definition: hevcdec.h:503
AVCodecContext * avctx
Definition: hevcdec.h:469
int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size)
Definition: hevc_cabac.c:705
int ff_hevc_sao_band_position_decode(HEVCContext *s)
Definition: hevc_cabac.c:576
uint8_t poc_msb_present[32]
Definition: hevcdec.h:233
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:112
BswapDSPContext bdsp
Definition: hevcdec.h:525
ThreadFrame tf
Definition: hevcdec.h:397
uint8_t first_slice_in_pic_flag
Definition: hevcdec.h:261
uint8_t ctb_up_left_flag
Definition: hevcdec.h:444
uint8_t threads_number
Definition: hevcdec.h:477
uint8_t is_cu_chroma_qp_offset_coded
Definition: hevcdec.h:379
bitstream reader API header.
int8_t pred_flag
Definition: hevcdec.h:347
int8_t * qp_y_tab
Definition: hevcdec.h:526
uint8_t pic_output_flag
Definition: hevcdec.h:263
uint8_t * tab_ct_depth
Definition: hevcdec.h:534
uint8_t cu_transquant_bypass_flag
Definition: hevcdec.h:336
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:760
RPSType
Definition: hevcdec.h:82
uint8_t used[32]
Definition: hevcdec.h:234
The buffer pool.
int temporal_id
temporal_id_plus1 - 1
Definition: hevcdec.h:506
uint8_t first_qp_group
Definition: hevcdec.h:429
HEVCDSPContext hevcdsp
Definition: hevcdec.h:523
int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
Definition: hevc_cabac.c:660
int ctb_count
Definition: hevcdec.h:401
uint8_t no_output_of_prior_pics_flag
Definition: hevcdec.h:276
HEVCLocalContext * HEVClcList[MAX_NB_THREADS]
Definition: hevcdec.h:473
int slice_idx
number of the slice being currently decoded
Definition: hevcdec.h:511
uint8_t colour_plane_id
RPS coded in the slice header itself is stored here.
Definition: hevcdec.h:264
uint8_t cu_chroma_qp_offset_enabled_flag
Definition: hevcdec.h:295
uint8_t slice_initialized
1 if the independent slice segment header was successfully parsed
Definition: hevcdec.h:485
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:406
int * size
Definition: hevcdec.h:304
RefPicList * refPicList
Definition: hevcdec.h:399
int bs_height
Definition: hevcdec.h:516
static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
Definition: hevcdec.h:636
uint8_t * sao_pixel_buffer_h[3]
Definition: hevcdec.h:489
int8_t cu_qp_offset_cb
Definition: hevcdec.h:380
int tc_offset
tc_offset_div2 * 2
Definition: hevcdec.h:298
const ShortTermRPS * short_term_rps
Definition: hevcdec.h:270
uint8_t merge_flag
Definition: hevcdec.h:364
struct AVMD5 * md5_ctx
Definition: hevcdec.h:494
unsigned * entry_point_offset
Definition: hevcdec.h:302
int8_t slice_qp
Definition: hevcdec.h:307
void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
Definition: hevc_cabac.c:1534
uint8_t max_trafo_depth
MaxTrafoDepth.
Definition: hevcdec.h:335
uint16_t sequence
A sequence counter, so that old frames are output first after a POC reset.
Definition: hevcdec.h:416
uint8_t slice_temporal_mvp_enabled_flag
Definition: hevcdec.h:277
Definition: hevcdec.h:169
uint8_t * vertical_bs
Definition: hevcdec.h:528
int chroma_mode_c
Definition: hevcdec.h:377
struct HEVCContext * sList[MAX_NB_THREADS]
Definition: hevcdec.h:471
int slice_qp_delta
Definition: hevcdec.h:291
int intra_pred_mode
Definition: hevcdec.h:375
int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
Definition: hevc_cabac.c:866
AVBufferRef * tab_mvf_buf
Definition: hevcdec.h:405
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:297
int res_scale_val
Definition: hevcdec.h:372
Definition: hevcdec.h:170
uint8_t * sao_pixel_buffer_v[3]
Definition: hevcdec.h:490
int slice_cr_qp_offset
Definition: hevcdec.h:293
int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc)
Definition: hevc_refs.c:135
uint8_t * tab_ipm
Definition: hevcdec.h:536
int ff_hevc_mvp_lx_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:823
int ff_hevc_sao_offset_abs_decode(HEVCContext *s)
Definition: hevc_cabac.c:586
const uint8_t ff_hevc_qpel_extra[4]
int32_t
PartMode
Definition: hevcdec.h:143
int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
Definition: hevc_cabac.c:686
SyntaxElement
Definition: hevcdec.h:91
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:376
int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s)
Definition: hevc_cabac.c:665
struct HEVCFrame * collocated_ref
Definition: hevcdec.h:403
uint16_t seq_output
Definition: hevcdec.h:553
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:601
void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags)
Definition: hevc_refs.c:32
SAOEOClass
Definition: hevcdec.h:218
int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:747
unsigned int pps_id
address (in raster order) of the first block in the current slice segment
Definition: hevcdec.h:250
int ff_hevc_merge_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:792
static const int8_t mv[256][2]
Definition: 4xm.c:77
IntraPredMode
Definition: hevcdec.h:173
RefPicListTab ** rpl_tab
Definition: hevcdec.h:400
int slice_cb_qp_offset
Definition: hevcdec.h:292
void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
Definition: hevc_filter.c:842
int overlap
Definition: hevcdec.h:517
int short_term_ref_pic_set_size
Definition: hevcdec.h:268
Libavcodec external API header.
int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth)
Definition: hevc_cabac.c:871
PredMode
Definition: hevcdec.h:154
int long_term_ref_pic_set_size
Definition: hevcdec.h:271
main external API structure.
Definition: avcodec.h:526
AVBufferRef * hwaccel_priv_buf
Definition: hevcdec.h:409
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:556
int16_t y
vertical component of motion vector
Definition: hevcdec.h:341
uint8_t cross_pf
Definition: hevcdec.h:382
int height
Definition: hevcdec.h:480
#define EDGE_EMU_BUFFER_STRIDE
Definition: hevcdec.h:69
int ff_hevc_pred_mode_decode(HEVCContext *s)
Definition: hevc_cabac.c:681
TransformUnit tu
Definition: hevcdec.h:439
uint8_t ctb_left_flag
Definition: hevcdec.h:441
int cu_qp_delta
Definition: hevcdec.h:370
uint8_t * is_pcm
Definition: hevcdec.h:539
uint8_t * checksum_buf
used on BE to byteswap the lines for checksumming
Definition: hevcdec.h:545
uint8_t cabac_init_flag
Definition: hevcdec.h:284
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:566
int poc
Definition: hevcdec.h:402
AVFrame * frame
Definition: hevcdec.h:487
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:555
unsigned int max_num_merge_cand
5 - 5_minus_max_num_merge_cand
Definition: hevcdec.h:300
int checksum_buf_size
Definition: hevcdec.h:546
int last_eos
last packet contains an EOS/EOB NAL
Definition: hevcdec.h:513
DBParams * deblock
Definition: hevcdec.h:504
GetBitContext gb
Definition: hevcdec.h:431
refcounted data buffer API
int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:828
Definition: hevcdec.h:168
Definition: hevcdec.h:339
PredFlag
Definition: hevcdec.h:166
int ff_hevc_pcm_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:742
int16_t chroma_log2_weight_denom
Definition: hevcdec.h:310
int pocTid0
Definition: hevcdec.h:510
uint8_t flags
A combination of HEVC_FRAME_FLAG_*.
Definition: hevcdec.h:421
HEVCLocalContext * HEVClc
Definition: hevcdec.h:474
#define MAX_PB_SIZE
Definition: hevcdsp.h:30
#define flags(name, subs,...)
Definition: cbs_av1.c:560
int ff_hevc_cu_qp_delta_abs(HEVCContext *s)
Definition: hevc_cabac.c:633
int ff_hevc_frame_nb_refs(const HEVCContext *s)
Get the number of candidate references for the current frame.
Definition: hevc_refs.c:503
const uint8_t ff_hevc_qpel_extra_after[4]
int eos
current packet contains an EOS/EOB NAL
Definition: hevcdec.h:512
HEVCSliceType
Definition: hevc.h:95
A reference to a data buffer.
Definition: buffer.h:81
int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:561
uint8_t * skip_flag
Definition: hevcdec.h:533
int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:613
common internal api header.
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
uint8_t * horizontal_bs
Definition: hevcdec.h:527
int32_t * tab_slice_address
Definition: hevcdec.h:530
uint8_t disable_deblocking_filter_flag
slice_header_disable_deblocking_filter_flag
Definition: hevcdec.h:285
const AVClass * c
Definition: hevcdec.h:468
uint8_t * filter_slice_edges
Definition: hevcdec.h:542
uint8_t collocated_list
Definition: hevcdec.h:287
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: hevcdec.h:569
int slice_ctb_addr_rs
Definition: hevcdec.h:323
AVBufferPool * tab_mvf_pool
Definition: hevcdec.h:496
Core video DSP helper functions.
int ff_hevc_merge_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:781
uint8_t slice_loop_filter_across_slices_enabled_flag
Definition: hevcdec.h:286
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:1024
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:289
Decoded Picture Buffer (DPB).
Definition: vaapi_h264.c:82
CodingUnit cu
Definition: hevcdec.h:454
int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
Definition: hevc_cabac.c:618
int beta_offset
Definition: hevcdec.h:386
uint8_t luma_log2_weight_denom
Definition: hevcdec.h:309
HEVCSEI sei
Definition: hevcdec.h:493
H2645Packet pkt
Definition: hevcdec.h:560
int boundary_flags
Definition: hevcdec.h:464
Public header for MD5 hash function implementation.
#define av_always_inline
Definition: attributes.h:45
uint8_t context_initialized
Definition: hevcdec.h:564
AVBufferRef * rpl_buf
Definition: hevcdec.h:407
int is_decoded
Definition: hevcdec.h:519
int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx)
Definition: hevc_cabac.c:807
uint8_t * cbf_luma
Definition: hevcdec.h:538
void ff_hevc_flush_dpb(HEVCContext *s)
Drop all frames currently in DPB.
Definition: hevc_refs.c:75
SliceHeader sh
Definition: hevcdec.h:502
int no_rasl_output_flag
Definition: hevcdec.h:520
int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts)
Definition: hevc_cabac.c:504
ScanType
Definition: hevcdec.h:225
int width
Definition: hevcdec.h:479
int * offset
Definition: hevcdec.h:303
uint8_t mvd_l1_zero_flag
Definition: hevcdec.h:282
int end_of_tiles_y
Definition: hevcdec.h:446
int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s)
Definition: hevc_cabac.c:770
Context Adaptive Binary Arithmetic Coder.
#define MAX_NB_THREADS
Definition: hevcdec.h:45
static uint8_t tmp[11]
Definition: aes_ctr.c:26