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 RefPicList {
235  int nb_refs;
236 } RefPicList;
237 
238 typedef struct RefPicListTab {
239  RefPicList refPicList[2];
240 } RefPicListTab;
241 
242 typedef struct CodingUnit {
243  int x;
244  int y;
245 
246  enum PredMode pred_mode; ///< PredMode
247  enum PartMode part_mode; ///< PartMode
248 
249  // Inferred parameters
250  uint8_t intra_split_flag; ///< IntraSplitFlag
251  uint8_t max_trafo_depth; ///< MaxTrafoDepth
253 } CodingUnit;
254 
255 typedef struct Mv {
256  int16_t x; ///< horizontal component of motion vector
257  int16_t y; ///< vertical component of motion vector
258 } Mv;
259 
260 typedef struct MvField {
262  int8_t ref_idx[2];
263  int8_t pred_flag;
264 } MvField;
265 
266 typedef struct NeighbourAvailable {
269  int cand_up;
274 
275 typedef struct PredictionUnit {
276  int mpm_idx;
278  uint8_t intra_pred_mode[4];
281  uint8_t intra_pred_mode_c[4];
282  uint8_t chroma_mode_c[4];
284 
285 typedef struct TransformUnit {
287 
289 
290  // Inferred parameters;
299 } TransformUnit;
300 
301 typedef struct DBParams {
304 } DBParams;
305 
306 #define HEVC_FRAME_FLAG_OUTPUT (1 << 0)
307 #define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
308 #define HEVC_FRAME_FLAG_LONG_REF (1 << 2)
309 #define HEVC_FRAME_FLAG_BUMPING (1 << 3)
310 
311 typedef struct HEVCFrame {
318  int poc;
320 
324 
327 
328  /**
329  * A sequence counter, so that old frames are output first
330  * after a POC reset
331  */
332  uint16_t sequence;
333 
334  /**
335  * A combination of HEVC_FRAME_FLAG_*
336  */
338 } HEVCFrame;
339 
340 typedef struct HEVCLocalContext {
341  uint8_t cabac_state[HEVC_CONTEXTS];
342 
343  uint8_t stat_coeff[4];
344 
346 
349 
350  int8_t qp_y;
351  int8_t curr_qp_y;
352 
353  int qPy_pred;
354 
356 
363  /* +7 is for subpixel interpolation, *2 for high bit depths */
364  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
365  /* The extended size between the new edge emu buffer is abused by SAO */
366  DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer2)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
368 
369  int ct_depth;
373 
374 #define BOUNDARY_LEFT_SLICE (1 << 0)
375 #define BOUNDARY_LEFT_TILE (1 << 1)
376 #define BOUNDARY_UPPER_SLICE (1 << 2)
377 #define BOUNDARY_UPPER_TILE (1 << 3)
378  /* properties of the boundary of the current CTB for the purposes
379  * of the deblocking filter */
382 
383 typedef struct HEVCContext {
384  const AVClass *c; // needed by private avoptions
386 
388 
391 
394 
395  int width;
396  int height;
397 
399 
400  /** 1 if the independent slice segment header was successfully parsed */
402 
407 
410  struct AVMD5 *md5_ctx;
411 
414 
415  ///< candidate references for the current frame
416  RefPicList rps[5];
417 
421  enum HEVCNALUnitType nal_unit_type;
422  int temporal_id; ///< temporal_id_plus1 - 1
425  int poc;
426  int pocTid0;
427  int slice_idx; ///< number of the slice being currently decoded
428  int eos; ///< current packet contains an EOS/EOB NAL
429  int last_eos; ///< last packet contains an EOS/EOB NAL
430  int max_ra;
431  int bs_width;
433  int overlap;
434 
437 
442  int8_t *qp_y_tab;
445 
447 
448  // CU
451  // PU
453 
454  uint8_t *cbf_luma; // cbf_luma of colocated TU
456 
457  // CTB-level flags affecting loop filter operation
459 
460  /** used on BE to byteswap the lines for checksumming */
463 
464  /**
465  * Sequence counters for decoded and output frames, so that old
466  * frames are output first after a POC reset
467  */
468  uint16_t seq_decode;
469  uint16_t seq_output;
470 
473 
474  const uint8_t *data;
475 
477  // type of the first VCL NAL of the current frame
478  enum HEVCNALUnitType first_nal_type;
479 
481  int is_nalff; ///< this flag is != 0 if bitstream is encapsulated
482  ///< as a format defined in 14496-15
484 
485  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
487 } HEVCContext;
488 
489 /**
490  * Mark all frames in DPB as unused for reference.
491  */
493 
494 /**
495  * Drop all frames currently in DPB.
496  */
498 
500  int x0, int y0);
501 
502 /**
503  * Construct the reference picture sets for the current frame.
504  */
506 
507 /**
508  * Construct the reference picture list(s) for the current slice.
509  */
511 
512 void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts);
513 int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts);
522 int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0,
523  int x_cb, int y_cb);
526  int x0, int y0);
527 int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size);
535 int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH);
536 int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx);
539 int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size);
540 int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth);
541 int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth);
544 
545 /**
546  * Get the number of candidate references for the current frame.
547  */
549 
550 int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc);
551 
553 {
554  switch (type) {
555  case HEVC_NAL_TRAIL_N:
556  case HEVC_NAL_TSA_N:
557  case HEVC_NAL_STSA_N:
558  case HEVC_NAL_RADL_N:
559  case HEVC_NAL_RASL_N:
560  case HEVC_NAL_VCL_N10:
561  case HEVC_NAL_VCL_N12:
562  case HEVC_NAL_VCL_N14:
563  return 1;
564  break;
565  default: break;
566  }
567  return 0;
568 }
569 
570 /**
571  * Find next frame in output order and put a reference to it in frame.
572  * @return 1 if a frame was output, 0 otherwise
573  */
575 
577 
578 void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags);
579 
580 void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0,
581  int nPbW, int nPbH);
582 void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0,
583  int nPbW, int nPbH, int log2_cb_size,
584  int part_idx, int merge_idx, MvField *mv);
585 void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0,
586  int nPbW, int nPbH, int log2_cb_size,
587  int part_idx, int merge_idx,
588  MvField *mv, int mvp_lx_flag, int LX);
589 void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase,
590  int log2_cb_size);
591 void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
592  int log2_trafo_size);
597 void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size);
598 void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size);
599 void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
600  int log2_trafo_size, enum ScanType scan_idx,
601  int c_idx);
602 
603 void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size);
604 
605 extern const uint8_t ff_hevc_qpel_extra_before[4];
606 extern const uint8_t ff_hevc_qpel_extra_after[4];
607 extern const uint8_t ff_hevc_qpel_extra[4];
608 
609 #endif /* AVCODEC_HEVCDEC_H */
int8_t cu_qp_offset_cr
Definition: hevcdec.h:297
uint8_t ctb_up_flag
Definition: hevcdec.h:358
AVFrame * frame
Definition: hevcdec.h:312
HEVCPredContext hpc
Definition: hevcdec.h:438
NeighbourAvailable na
Definition: hevcdec.h:372
int ff_hevc_slice_rpl(HEVCContext *s)
Construct the reference picture list(s) for the current slice.
Definition: hevc_refs.c:291
This structure describes decoded (raw) audio or video data.
Definition: frame.h:295
HEVCFrame * ref
Definition: hevcdec.h:423
#define HEVC_CONTEXTS
Definition: hevcdec.h:55
uint8_t is_cu_qp_delta_coded
Definition: hevcdec.h:294
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:440
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:256
int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:608
void * hwaccel_picture_private
Definition: hevcdec.h:326
uint8_t * cabac_state
Definition: hevcdec.h:398
InterPredIdc
Definition: hevcdec.h:160
MvField * tab_mvf
Definition: hevcdec.h:314
int bs_width
Definition: hevcdec.h:431
uint8_t intra_split_flag
IntraSplitFlag.
Definition: hevcdec.h:250
int rem_intra_luma_pred_mode
Definition: hevcdec.h:277
void ff_hevc_clear_refs(HEVCContext *s)
Mark all frames in DPB as unused for reference.
Definition: hevc_refs.c:66
int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
Definition: hevc_cabac.c:876
int tc_offset
Definition: hevcdec.h:303
PredictionUnit pu
Definition: hevcdec.h:371
GLint GLenum type
Definition: opengl_enc.c:104
HEVCParamSets ps
Definition: hevcdec.h:408
int nuh_layer_id
Definition: hevcdec.h:486
intptr_t atomic_int
Definition: stdatomic.h:55
int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s)
Definition: hevc_cabac.c:670
CABACContext cc
Definition: hevcdec.h:348
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:468
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:392
int max_ra
Definition: hevcdec.h:430
void ff_hevc_bump_frame(HEVCContext *s)
Definition: hevc_refs.c:233
const uint8_t * data
Definition: hevcdec.h:474
int8_t curr_qp_y
Definition: hevcdec.h:351
AVBufferPool * rpl_tab_pool
candidate references for the current frame
Definition: hevcdec.h:413
int nb_refs
Definition: hevcdec.h:235
int is_nalff
this flag is != 0 if bitstream is encapsulated as a format defined in 14496-15
Definition: hevcdec.h:481
int end_of_tiles_x
Definition: hevcdec.h:361
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:359
struct HEVCFrame * ref[HEVC_MAX_REFS]
Definition: hevcdec.h:232
Multithreading support functions.
void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
Definition: hevc_cabac.c:450
SAOType
Definition: hevcdec.h:211
AVFrame * output_frame
Definition: hevcdec.h:404
int apply_defdispwin
Definition: hevcdec.h:483
SAOParams * sao
Definition: hevcdec.h:419
AVCodecContext * avctx
Definition: hevcdec.h:385
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
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:112
BswapDSPContext bdsp
Definition: hevcdec.h:441
ThreadFrame tf
Definition: hevcdec.h:313
uint8_t ctb_up_left_flag
Definition: hevcdec.h:360
uint8_t threads_number
Definition: hevcdec.h:393
uint8_t is_cu_chroma_qp_offset_coded
Definition: hevcdec.h:295
bitstream reader API header.
int8_t pred_flag
Definition: hevcdec.h:263
int8_t * qp_y_tab
Definition: hevcdec.h:442
uint8_t * tab_ct_depth
Definition: hevcdec.h:450
uint8_t cu_transquant_bypass_flag
Definition: hevcdec.h:252
int ff_hevc_frame_rps(HEVCContext *s)
Construct the reference picture sets for the current frame.
Definition: hevc_refs.c:451
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
The buffer pool.
int temporal_id
temporal_id_plus1 - 1
Definition: hevcdec.h:422
uint8_t first_qp_group
Definition: hevcdec.h:345
HEVCDSPContext hevcdsp
Definition: hevcdec.h:439
int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
Definition: hevc_cabac.c:660
int ctb_count
Definition: hevcdec.h:317
HEVCLocalContext * HEVClcList[MAX_NB_THREADS]
Definition: hevcdec.h:389
int slice_idx
number of the slice being currently decoded
Definition: hevcdec.h:427
uint8_t slice_initialized
1 if the independent slice segment header was successfully parsed
Definition: hevcdec.h:401
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:322
RefPicList * refPicList
Definition: hevcdec.h:315
int bs_height
Definition: hevcdec.h:432
static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
Definition: hevcdec.h:552
uint8_t * sao_pixel_buffer_h[3]
Definition: hevcdec.h:405
int8_t cu_qp_offset_cb
Definition: hevcdec.h:296
uint8_t merge_flag
Definition: hevcdec.h:280
struct AVMD5 * md5_ctx
Definition: hevcdec.h:410
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:251
uint16_t sequence
A sequence counter, so that old frames are output first after a POC reset.
Definition: hevcdec.h:332
Definition: hevcdec.h:169
uint8_t * vertical_bs
Definition: hevcdec.h:444
int chroma_mode_c
Definition: hevcdec.h:293
struct HEVCContext * sList[MAX_NB_THREADS]
Definition: hevcdec.h:387
int intra_pred_mode
Definition: hevcdec.h:291
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:321
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 res_scale_val
Definition: hevcdec.h:288
Definition: hevcdec.h:170
uint8_t * sao_pixel_buffer_v[3]
Definition: hevcdec.h:406
int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc)
Definition: hevc_refs.c:135
uint8_t * tab_ipm
Definition: hevcdec.h:452
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:292
int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s)
Definition: hevc_cabac.c:665
struct HEVCFrame * collocated_ref
Definition: hevcdec.h:319
uint16_t seq_output
Definition: hevcdec.h:469
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
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:316
void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
Definition: hevc_filter.c:842
int overlap
Definition: hevcdec.h:433
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
main external API structure.
Definition: avcodec.h:1565
AVBufferRef * hwaccel_priv_buf
Definition: hevcdec.h:325
atomic_int wpp_err
Definition: hevcdec.h:472
int16_t y
vertical component of motion vector
Definition: hevcdec.h:257
uint8_t cross_pf
Definition: hevcdec.h:298
int height
Definition: hevcdec.h:396
#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:355
uint8_t ctb_left_flag
Definition: hevcdec.h:357
int cu_qp_delta
Definition: hevcdec.h:286
uint8_t * is_pcm
Definition: hevcdec.h:455
uint8_t * checksum_buf
used on BE to byteswap the lines for checksumming
Definition: hevcdec.h:461
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:318
AVFrame * frame
Definition: hevcdec.h:403
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:471
int checksum_buf_size
Definition: hevcdec.h:462
int last_eos
last packet contains an EOS/EOB NAL
Definition: hevcdec.h:429
DBParams * deblock
Definition: hevcdec.h:420
GetBitContext gb
Definition: hevcdec.h:347
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:255
PredFlag
Definition: hevcdec.h:166
int ff_hevc_pcm_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:742
int pocTid0
Definition: hevcdec.h:426
uint8_t flags
A combination of HEVC_FRAME_FLAG_*.
Definition: hevcdec.h:337
HEVCLocalContext * HEVClc
Definition: hevcdec.h:390
#define MAX_PB_SIZE
Definition: hevcdsp.h:30
int list[HEVC_MAX_REFS]
Definition: hevcdec.h:233
#define flags(name, subs,...)
Definition: cbs_av1.c:561
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:511
const uint8_t ff_hevc_qpel_extra_after[4]
int eos
current packet contains an EOS/EOB NAL
Definition: hevcdec.h:428
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:449
int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
Definition: hevc_cabac.c:613
common internal api header.
uint8_t * horizontal_bs
Definition: hevcdec.h:443
int32_t * tab_slice_address
Definition: hevcdec.h:446
const AVClass * c
Definition: hevcdec.h:384
uint8_t * filter_slice_edges
Definition: hevcdec.h:458
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: hevcdec.h:485
AVBufferPool * tab_mvf_pool
Definition: hevcdec.h:412
Core video DSP helper functions.
int ff_hevc_merge_idx_decode(HEVCContext *s)
Definition: hevc_cabac.c:781
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
Decoded Picture Buffer (DPB).
Definition: vaapi_h264.c:82
CodingUnit cu
Definition: hevcdec.h:370
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:302
HEVCSEI sei
Definition: hevcdec.h:409
H2645Packet pkt
Definition: hevcdec.h:476
int boundary_flags
Definition: hevcdec.h:380
Public header for MD5 hash function implementation.
#define av_always_inline
Definition: attributes.h:39
uint8_t context_initialized
Definition: hevcdec.h:480
AVBufferRef * rpl_buf
Definition: hevcdec.h:323
int is_decoded
Definition: hevcdec.h:435
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:454
void ff_hevc_flush_dpb(HEVCContext *s)
Drop all frames currently in DPB.
Definition: hevc_refs.c:75
SliceHeader sh
Definition: hevcdec.h:418
int no_rasl_output_flag
Definition: hevcdec.h:436
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:395
int end_of_tiles_y
Definition: hevcdec.h:362
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
int isLongTerm[HEVC_MAX_REFS]
Definition: hevcdec.h:234