xref: /third_party/ffmpeg/libavcodec/hevcdec.h (revision cabdff1a)
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/mem_internal.h"
30
31#include "avcodec.h"
32#include "bswapdsp.h"
33#include "cabac.h"
34#include "dovi_rpu.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 "h274.h"
43#include "threadframe.h"
44#include "videodsp.h"
45
46#define SHIFT_CTB_WPP 2
47
48#define MAX_TB_SIZE 32
49#define MAX_QP 51
50#define DEFAULT_INTRA_TC_OFFSET 2
51
52#define HEVC_CONTEXTS 199
53#define HEVC_STAT_COEFFS 4
54
55#define MRG_MAX_NUM_CANDS     5
56
57#define L0 0
58#define L1 1
59
60#define EPEL_EXTRA_BEFORE 1
61#define EPEL_EXTRA_AFTER  2
62#define EPEL_EXTRA        3
63#define QPEL_EXTRA_BEFORE 3
64#define QPEL_EXTRA_AFTER  4
65#define QPEL_EXTRA        7
66
67#define EDGE_EMU_BUFFER_STRIDE 80
68
69/**
70 * Value of the luma sample at position (x, y) in the 2D array tab.
71 */
72#define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)])
73#define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
74
75#define IS_IDR(s) ((s)->nal_unit_type == HEVC_NAL_IDR_W_RADL || (s)->nal_unit_type == HEVC_NAL_IDR_N_LP)
76#define IS_BLA(s) ((s)->nal_unit_type == HEVC_NAL_BLA_W_RADL || (s)->nal_unit_type == HEVC_NAL_BLA_W_LP || \
77                   (s)->nal_unit_type == HEVC_NAL_BLA_N_LP)
78#define IS_IRAP(s) ((s)->nal_unit_type >= 16 && (s)->nal_unit_type <= 23)
79
80enum RPSType {
81    ST_CURR_BEF = 0,
82    ST_CURR_AFT,
83    ST_FOLL,
84    LT_CURR,
85    LT_FOLL,
86    NB_RPS_TYPE,
87};
88
89enum SyntaxElement {
90    SAO_MERGE_FLAG = 0,
91    SAO_TYPE_IDX,
92    SAO_EO_CLASS,
93    SAO_BAND_POSITION,
94    SAO_OFFSET_ABS,
95    SAO_OFFSET_SIGN,
96    END_OF_SLICE_FLAG,
97    SPLIT_CODING_UNIT_FLAG,
98    CU_TRANSQUANT_BYPASS_FLAG,
99    SKIP_FLAG,
100    CU_QP_DELTA,
101    PRED_MODE_FLAG,
102    PART_MODE,
103    PCM_FLAG,
104    PREV_INTRA_LUMA_PRED_FLAG,
105    MPM_IDX,
106    REM_INTRA_LUMA_PRED_MODE,
107    INTRA_CHROMA_PRED_MODE,
108    MERGE_FLAG,
109    MERGE_IDX,
110    INTER_PRED_IDC,
111    REF_IDX_L0,
112    REF_IDX_L1,
113    ABS_MVD_GREATER0_FLAG,
114    ABS_MVD_GREATER1_FLAG,
115    ABS_MVD_MINUS2,
116    MVD_SIGN_FLAG,
117    MVP_LX_FLAG,
118    NO_RESIDUAL_DATA_FLAG,
119    SPLIT_TRANSFORM_FLAG,
120    CBF_LUMA,
121    CBF_CB_CR,
122    TRANSFORM_SKIP_FLAG,
123    EXPLICIT_RDPCM_FLAG,
124    EXPLICIT_RDPCM_DIR_FLAG,
125    LAST_SIGNIFICANT_COEFF_X_PREFIX,
126    LAST_SIGNIFICANT_COEFF_Y_PREFIX,
127    LAST_SIGNIFICANT_COEFF_X_SUFFIX,
128    LAST_SIGNIFICANT_COEFF_Y_SUFFIX,
129    SIGNIFICANT_COEFF_GROUP_FLAG,
130    SIGNIFICANT_COEFF_FLAG,
131    COEFF_ABS_LEVEL_GREATER1_FLAG,
132    COEFF_ABS_LEVEL_GREATER2_FLAG,
133    COEFF_ABS_LEVEL_REMAINING,
134    COEFF_SIGN_FLAG,
135    LOG2_RES_SCALE_ABS,
136    RES_SCALE_SIGN_FLAG,
137    CU_CHROMA_QP_OFFSET_FLAG,
138    CU_CHROMA_QP_OFFSET_IDX,
139};
140
141enum PartMode {
142    PART_2Nx2N = 0,
143    PART_2NxN  = 1,
144    PART_Nx2N  = 2,
145    PART_NxN   = 3,
146    PART_2NxnU = 4,
147    PART_2NxnD = 5,
148    PART_nLx2N = 6,
149    PART_nRx2N = 7,
150};
151
152enum PredMode {
153    MODE_INTER = 0,
154    MODE_INTRA,
155    MODE_SKIP,
156};
157
158enum InterPredIdc {
159    PRED_L0 = 0,
160    PRED_L1,
161    PRED_BI,
162};
163
164enum PredFlag {
165    PF_INTRA = 0,
166    PF_L0,
167    PF_L1,
168    PF_BI,
169};
170
171enum IntraPredMode {
172    INTRA_PLANAR = 0,
173    INTRA_DC,
174    INTRA_ANGULAR_2,
175    INTRA_ANGULAR_3,
176    INTRA_ANGULAR_4,
177    INTRA_ANGULAR_5,
178    INTRA_ANGULAR_6,
179    INTRA_ANGULAR_7,
180    INTRA_ANGULAR_8,
181    INTRA_ANGULAR_9,
182    INTRA_ANGULAR_10,
183    INTRA_ANGULAR_11,
184    INTRA_ANGULAR_12,
185    INTRA_ANGULAR_13,
186    INTRA_ANGULAR_14,
187    INTRA_ANGULAR_15,
188    INTRA_ANGULAR_16,
189    INTRA_ANGULAR_17,
190    INTRA_ANGULAR_18,
191    INTRA_ANGULAR_19,
192    INTRA_ANGULAR_20,
193    INTRA_ANGULAR_21,
194    INTRA_ANGULAR_22,
195    INTRA_ANGULAR_23,
196    INTRA_ANGULAR_24,
197    INTRA_ANGULAR_25,
198    INTRA_ANGULAR_26,
199    INTRA_ANGULAR_27,
200    INTRA_ANGULAR_28,
201    INTRA_ANGULAR_29,
202    INTRA_ANGULAR_30,
203    INTRA_ANGULAR_31,
204    INTRA_ANGULAR_32,
205    INTRA_ANGULAR_33,
206    INTRA_ANGULAR_34,
207};
208
209enum SAOType {
210    SAO_NOT_APPLIED = 0,
211    SAO_BAND,
212    SAO_EDGE,
213    SAO_APPLIED
214};
215
216enum SAOEOClass {
217    SAO_EO_HORIZ = 0,
218    SAO_EO_VERT,
219    SAO_EO_135D,
220    SAO_EO_45D,
221};
222
223enum ScanType {
224    SCAN_DIAG = 0,
225    SCAN_HORIZ,
226    SCAN_VERT,
227};
228
229typedef struct LongTermRPS {
230    int     poc[32];
231    uint8_t poc_msb_present[32];
232    uint8_t used[32];
233    uint8_t nb_refs;
234} LongTermRPS;
235
236typedef struct RefPicList {
237    struct HEVCFrame *ref[HEVC_MAX_REFS];
238    int list[HEVC_MAX_REFS];
239    int isLongTerm[HEVC_MAX_REFS];
240    int nb_refs;
241} RefPicList;
242
243typedef struct RefPicListTab {
244    RefPicList refPicList[2];
245} RefPicListTab;
246
247typedef struct SliceHeader {
248    unsigned int pps_id;
249
250    ///< address (in raster order) of the first block in the current slice segment
251    unsigned int   slice_segment_addr;
252    ///< address (in raster order) of the first block in the current slice
253    unsigned int   slice_addr;
254
255    enum HEVCSliceType slice_type;
256
257    int pic_order_cnt_lsb;
258
259    uint8_t first_slice_in_pic_flag;
260    uint8_t dependent_slice_segment_flag;
261    uint8_t pic_output_flag;
262    uint8_t colour_plane_id;
263
264    ///< RPS coded in the slice header itself is stored here
265    int short_term_ref_pic_set_sps_flag;
266    int short_term_ref_pic_set_size;
267    ShortTermRPS slice_rps;
268    const ShortTermRPS *short_term_rps;
269    int long_term_ref_pic_set_size;
270    LongTermRPS long_term_rps;
271    unsigned int list_entry_lx[2][32];
272
273    uint8_t rpl_modification_flag[2];
274    uint8_t no_output_of_prior_pics_flag;
275    uint8_t slice_temporal_mvp_enabled_flag;
276
277    unsigned int nb_refs[2];
278
279    uint8_t slice_sample_adaptive_offset_flag[3];
280    uint8_t mvd_l1_zero_flag;
281
282    uint8_t cabac_init_flag;
283    uint8_t disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag
284    uint8_t slice_loop_filter_across_slices_enabled_flag;
285    uint8_t collocated_list;
286
287    unsigned int collocated_ref_idx;
288
289    int slice_qp_delta;
290    int slice_cb_qp_offset;
291    int slice_cr_qp_offset;
292
293    uint8_t cu_chroma_qp_offset_enabled_flag;
294
295    int beta_offset;    ///< beta_offset_div2 * 2
296    int tc_offset;      ///< tc_offset_div2 * 2
297
298    unsigned int max_num_merge_cand; ///< 5 - 5_minus_max_num_merge_cand
299
300    unsigned *entry_point_offset;
301    int * offset;
302    int * size;
303    int num_entry_point_offsets;
304
305    int8_t slice_qp;
306
307    uint8_t luma_log2_weight_denom;
308    int16_t chroma_log2_weight_denom;
309
310    int16_t luma_weight_l0[16];
311    int16_t chroma_weight_l0[16][2];
312    int16_t chroma_weight_l1[16][2];
313    int16_t luma_weight_l1[16];
314
315    int16_t luma_offset_l0[16];
316    int16_t chroma_offset_l0[16][2];
317
318    int16_t luma_offset_l1[16];
319    int16_t chroma_offset_l1[16][2];
320
321    int slice_ctb_addr_rs;
322} SliceHeader;
323
324typedef struct CodingUnit {
325    int x;
326    int y;
327
328    enum PredMode pred_mode;    ///< PredMode
329    enum PartMode part_mode;    ///< PartMode
330
331    // Inferred parameters
332    uint8_t intra_split_flag;   ///< IntraSplitFlag
333    uint8_t max_trafo_depth;    ///< MaxTrafoDepth
334    uint8_t cu_transquant_bypass_flag;
335} CodingUnit;
336
337typedef struct Mv {
338    int16_t x;  ///< horizontal component of motion vector
339    int16_t y;  ///< vertical component of motion vector
340} Mv;
341
342typedef struct MvField {
343    DECLARE_ALIGNED(4, Mv, mv)[2];
344    int8_t ref_idx[2];
345    int8_t pred_flag;
346} MvField;
347
348typedef struct NeighbourAvailable {
349    int cand_bottom_left;
350    int cand_left;
351    int cand_up;
352    int cand_up_left;
353    int cand_up_right;
354    int cand_up_right_sap;
355} NeighbourAvailable;
356
357typedef struct PredictionUnit {
358    int mpm_idx;
359    int rem_intra_luma_pred_mode;
360    uint8_t intra_pred_mode[4];
361    Mv mvd;
362    uint8_t merge_flag;
363    uint8_t intra_pred_mode_c[4];
364    uint8_t chroma_mode_c[4];
365} PredictionUnit;
366
367typedef struct TransformUnit {
368    int cu_qp_delta;
369
370    int res_scale_val;
371
372    // Inferred parameters;
373    int intra_pred_mode;
374    int intra_pred_mode_c;
375    int chroma_mode_c;
376    uint8_t is_cu_qp_delta_coded;
377    uint8_t is_cu_chroma_qp_offset_coded;
378    int8_t  cu_qp_offset_cb;
379    int8_t  cu_qp_offset_cr;
380    uint8_t cross_pf;
381} TransformUnit;
382
383typedef struct DBParams {
384    int beta_offset;
385    int tc_offset;
386} DBParams;
387
388#define HEVC_FRAME_FLAG_OUTPUT    (1 << 0)
389#define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
390#define HEVC_FRAME_FLAG_LONG_REF  (1 << 2)
391#define HEVC_FRAME_FLAG_BUMPING   (1 << 3)
392
393typedef struct HEVCFrame {
394    AVFrame *frame;
395    AVFrame *frame_grain;
396    ThreadFrame tf;
397    int needs_fg; /* 1 if grain needs to be applied by the decoder */
398    MvField *tab_mvf;
399    RefPicList *refPicList;
400    RefPicListTab **rpl_tab;
401    int ctb_count;
402    int poc;
403    struct HEVCFrame *collocated_ref;
404
405    AVBufferRef *tab_mvf_buf;
406    AVBufferRef *rpl_tab_buf;
407    AVBufferRef *rpl_buf;
408
409    AVBufferRef *hwaccel_priv_buf;
410    void *hwaccel_picture_private;
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     */
421    uint8_t flags;
422} HEVCFrame;
423
424typedef struct HEVCLocalContext {
425    uint8_t cabac_state[HEVC_CONTEXTS];
426
427    uint8_t stat_coeff[HEVC_STAT_COEFFS];
428
429    uint8_t first_qp_group;
430
431    GetBitContext gb;
432    CABACContext cc;
433
434    int8_t qp_y;
435    int8_t curr_qp_y;
436
437    int qPy_pred;
438
439    TransformUnit tu;
440
441    uint8_t ctb_left_flag;
442    uint8_t ctb_up_flag;
443    uint8_t ctb_up_right_flag;
444    uint8_t ctb_up_left_flag;
445    int     end_of_tiles_x;
446    int     end_of_tiles_y;
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];
451    DECLARE_ALIGNED(32, int16_t, tmp)[MAX_PB_SIZE * MAX_PB_SIZE];
452
453    int ct_depth;
454    CodingUnit cu;
455    PredictionUnit pu;
456    NeighbourAvailable na;
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 */
464    int boundary_flags;
465} HEVCLocalContext;
466
467typedef struct HEVCContext {
468    const AVClass *c;  // needed by private avoptions
469    AVCodecContext *avctx;
470
471    struct HEVCContext  **sList;
472
473    HEVCLocalContext    **HEVClcList;
474    HEVCLocalContext    *HEVClc;
475
476    uint8_t             threads_type;
477    uint8_t             threads_number;
478
479    int                 width;
480    int                 height;
481
482    uint8_t *cabac_state;
483    uint8_t stat_coeff[HEVC_STAT_COEFFS];
484
485    /** 1 if the independent slice segment header was successfully parsed */
486    uint8_t slice_initialized;
487
488    AVFrame *frame;
489    AVFrame *output_frame;
490    uint8_t *sao_pixel_buffer_h[3];
491    uint8_t *sao_pixel_buffer_v[3];
492
493    HEVCParamSets ps;
494    HEVCSEI sei;
495    struct AVMD5 *md5_ctx;
496
497    AVBufferPool *tab_mvf_pool;
498    AVBufferPool *rpl_tab_pool;
499
500    ///< candidate references for the current frame
501    RefPicList rps[5];
502
503    SliceHeader sh;
504    SAOParams *sao;
505    DBParams *deblock;
506    enum HEVCNALUnitType nal_unit_type;
507    int temporal_id;  ///< temporal_id_plus1 - 1
508    HEVCFrame *ref;
509    HEVCFrame DPB[32];
510    int poc;
511    int pocTid0;
512    int slice_idx; ///< number of the slice being currently decoded
513    int eos;       ///< current packet contains an EOS/EOB NAL
514    int last_eos;  ///< last packet contains an EOS/EOB NAL
515    int max_ra;
516    int bs_width;
517    int bs_height;
518    int overlap;
519
520    int is_decoded;
521    int no_rasl_output_flag;
522
523    HEVCPredContext hpc;
524    HEVCDSPContext hevcdsp;
525    VideoDSPContext vdsp;
526    BswapDSPContext bdsp;
527    H274FilmGrainDatabase h274db;
528    int8_t *qp_y_tab;
529    uint8_t *horizontal_bs;
530    uint8_t *vertical_bs;
531
532    int32_t *tab_slice_address;
533
534    //  CU
535    uint8_t *skip_flag;
536    uint8_t *tab_ct_depth;
537    // PU
538    uint8_t *tab_ipm;
539
540    uint8_t *cbf_luma; // cbf_luma of colocated TU
541    uint8_t *is_pcm;
542
543    // CTB-level flags affecting loop filter operation
544    uint8_t *filter_slice_edges;
545
546    /** used on BE to byteswap the lines for checksumming */
547    uint8_t *checksum_buf;
548    int      checksum_buf_size;
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
557    int enable_parallel_tiles;
558    atomic_int wpp_err;
559
560    const uint8_t *data;
561
562    H2645Packet pkt;
563    // type of the first VCL NAL of the current frame
564    enum HEVCNALUnitType first_nal_type;
565
566    int is_nalff;           ///< this flag is != 0 if bitstream is encapsulated
567                            ///< as a format defined in 14496-15
568    int apply_defdispwin;
569
570    int nal_length_size;    ///< Number of bytes used for nal length (1, 2 or 4)
571    int nuh_layer_id;
572
573    AVBufferRef *rpu_buf;       ///< 0 or 1 Dolby Vision RPUs.
574    DOVIContext dovi_ctx;       ///< Dolby Vision decoding context
575} HEVCContext;
576
577/**
578 * Mark all frames in DPB as unused for reference.
579 */
580void ff_hevc_clear_refs(HEVCContext *s);
581
582/**
583 * Drop all frames currently in DPB.
584 */
585void ff_hevc_flush_dpb(HEVCContext *s);
586
587const RefPicList *ff_hevc_get_ref_list(const HEVCContext *s, const HEVCFrame *frame,
588                                       int x0, int y0);
589
590/**
591 * Construct the reference picture sets for the current frame.
592 */
593int ff_hevc_frame_rps(HEVCContext *s);
594
595/**
596 * Construct the reference picture list(s) for the current slice.
597 */
598int ff_hevc_slice_rpl(HEVCContext *s);
599
600void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts);
601int ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts, int thread);
602int ff_hevc_sao_merge_flag_decode(HEVCContext *s);
603int ff_hevc_sao_type_idx_decode(HEVCContext *s);
604int ff_hevc_sao_band_position_decode(HEVCContext *s);
605int ff_hevc_sao_offset_abs_decode(HEVCContext *s);
606int ff_hevc_sao_offset_sign_decode(HEVCContext *s);
607int ff_hevc_sao_eo_class_decode(HEVCContext *s);
608int ff_hevc_end_of_slice_flag_decode(HEVCContext *s);
609int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s);
610int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0,
611                             int x_cb, int y_cb);
612int ff_hevc_pred_mode_decode(HEVCContext *s);
613int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth,
614                                          int x0, int y0);
615int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size);
616int ff_hevc_pcm_flag_decode(HEVCContext *s);
617int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s);
618int ff_hevc_mpm_idx_decode(HEVCContext *s);
619int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s);
620int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s);
621int ff_hevc_merge_idx_decode(HEVCContext *s);
622int ff_hevc_merge_flag_decode(HEVCContext *s);
623int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH);
624int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx);
625int ff_hevc_mvp_lx_flag_decode(HEVCContext *s);
626int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s);
627int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size);
628int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth);
629int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth);
630int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx);
631int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx);
632
633/**
634 * Get the number of candidate references for the current frame.
635 */
636int ff_hevc_frame_nb_refs(const HEVCContext *s);
637
638int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc);
639
640static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
641{
642    switch (type) {
643    case HEVC_NAL_TRAIL_N:
644    case HEVC_NAL_TSA_N:
645    case HEVC_NAL_STSA_N:
646    case HEVC_NAL_RADL_N:
647    case HEVC_NAL_RASL_N:
648    case HEVC_NAL_VCL_N10:
649    case HEVC_NAL_VCL_N12:
650    case HEVC_NAL_VCL_N14:
651        return 1;
652    default: break;
653    }
654    return 0;
655}
656
657/**
658 * Find next frame in output order and put a reference to it in frame.
659 * @return 1 if a frame was output, 0 otherwise
660 */
661int ff_hevc_output_frame(HEVCContext *s, AVFrame *frame, int flush);
662
663void ff_hevc_bump_frame(HEVCContext *s);
664
665void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags);
666
667void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0,
668                                     int nPbW, int nPbH);
669void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0,
670                                int nPbW, int nPbH, int log2_cb_size,
671                                int part_idx, int merge_idx, MvField *mv);
672void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0,
673                              int nPbW, int nPbH, int log2_cb_size,
674                              int part_idx, int merge_idx,
675                              MvField *mv, int mvp_lx_flag, int LX);
676void ff_hevc_set_qPy(HEVCContext *s, int xBase, int yBase,
677                     int log2_cb_size);
678void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
679                                           int log2_trafo_size);
680int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s);
681int ff_hevc_cu_qp_delta_abs(HEVCContext *s);
682int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s);
683int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s);
684void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size);
685void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size);
686void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
687                                 int log2_trafo_size, enum ScanType scan_idx,
688                                 int c_idx);
689
690void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size);
691
692extern const uint8_t ff_hevc_qpel_extra_before[4];
693extern const uint8_t ff_hevc_qpel_extra_after[4];
694extern const uint8_t ff_hevc_qpel_extra[4];
695
696#endif /* AVCODEC_HEVCDEC_H */
697