GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/hevcdec.h Lines: 4 6 66.7 %
Date: 2020-09-21 17:35:45 Branches: 1 2 50.0 %

Line Branch Exec Source
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 {
83
    ST_CURR_BEF = 0,
84
    ST_CURR_AFT,
85
    ST_FOLL,
86
    LT_CURR,
87
    LT_FOLL,
88
    NB_RPS_TYPE,
89
};
90
91
enum SyntaxElement {
92
    SAO_MERGE_FLAG = 0,
93
    SAO_TYPE_IDX,
94
    SAO_EO_CLASS,
95
    SAO_BAND_POSITION,
96
    SAO_OFFSET_ABS,
97
    SAO_OFFSET_SIGN,
98
    END_OF_SLICE_FLAG,
99
    SPLIT_CODING_UNIT_FLAG,
100
    CU_TRANSQUANT_BYPASS_FLAG,
101
    SKIP_FLAG,
102
    CU_QP_DELTA,
103
    PRED_MODE_FLAG,
104
    PART_MODE,
105
    PCM_FLAG,
106
    PREV_INTRA_LUMA_PRED_FLAG,
107
    MPM_IDX,
108
    REM_INTRA_LUMA_PRED_MODE,
109
    INTRA_CHROMA_PRED_MODE,
110
    MERGE_FLAG,
111
    MERGE_IDX,
112
    INTER_PRED_IDC,
113
    REF_IDX_L0,
114
    REF_IDX_L1,
115
    ABS_MVD_GREATER0_FLAG,
116
    ABS_MVD_GREATER1_FLAG,
117
    ABS_MVD_MINUS2,
118
    MVD_SIGN_FLAG,
119
    MVP_LX_FLAG,
120
    NO_RESIDUAL_DATA_FLAG,
121
    SPLIT_TRANSFORM_FLAG,
122
    CBF_LUMA,
123
    CBF_CB_CR,
124
    TRANSFORM_SKIP_FLAG,
125
    EXPLICIT_RDPCM_FLAG,
126
    EXPLICIT_RDPCM_DIR_FLAG,
127
    LAST_SIGNIFICANT_COEFF_X_PREFIX,
128
    LAST_SIGNIFICANT_COEFF_Y_PREFIX,
129
    LAST_SIGNIFICANT_COEFF_X_SUFFIX,
130
    LAST_SIGNIFICANT_COEFF_Y_SUFFIX,
131
    SIGNIFICANT_COEFF_GROUP_FLAG,
132
    SIGNIFICANT_COEFF_FLAG,
133
    COEFF_ABS_LEVEL_GREATER1_FLAG,
134
    COEFF_ABS_LEVEL_GREATER2_FLAG,
135
    COEFF_ABS_LEVEL_REMAINING,
136
    COEFF_SIGN_FLAG,
137
    LOG2_RES_SCALE_ABS,
138
    RES_SCALE_SIGN_FLAG,
139
    CU_CHROMA_QP_OFFSET_FLAG,
140
    CU_CHROMA_QP_OFFSET_IDX,
141
};
142
143
enum PartMode {
144
    PART_2Nx2N = 0,
145
    PART_2NxN  = 1,
146
    PART_Nx2N  = 2,
147
    PART_NxN   = 3,
148
    PART_2NxnU = 4,
149
    PART_2NxnD = 5,
150
    PART_nLx2N = 6,
151
    PART_nRx2N = 7,
152
};
153
154
enum PredMode {
155
    MODE_INTER = 0,
156
    MODE_INTRA,
157
    MODE_SKIP,
158
};
159
160
enum InterPredIdc {
161
    PRED_L0 = 0,
162
    PRED_L1,
163
    PRED_BI,
164
};
165
166
enum PredFlag {
167
    PF_INTRA = 0,
168
    PF_L0,
169
    PF_L1,
170
    PF_BI,
171
};
172
173
enum IntraPredMode {
174
    INTRA_PLANAR = 0,
175
    INTRA_DC,
176
    INTRA_ANGULAR_2,
177
    INTRA_ANGULAR_3,
178
    INTRA_ANGULAR_4,
179
    INTRA_ANGULAR_5,
180
    INTRA_ANGULAR_6,
181
    INTRA_ANGULAR_7,
182
    INTRA_ANGULAR_8,
183
    INTRA_ANGULAR_9,
184
    INTRA_ANGULAR_10,
185
    INTRA_ANGULAR_11,
186
    INTRA_ANGULAR_12,
187
    INTRA_ANGULAR_13,
188
    INTRA_ANGULAR_14,
189
    INTRA_ANGULAR_15,
190
    INTRA_ANGULAR_16,
191
    INTRA_ANGULAR_17,
192
    INTRA_ANGULAR_18,
193
    INTRA_ANGULAR_19,
194
    INTRA_ANGULAR_20,
195
    INTRA_ANGULAR_21,
196
    INTRA_ANGULAR_22,
197
    INTRA_ANGULAR_23,
198
    INTRA_ANGULAR_24,
199
    INTRA_ANGULAR_25,
200
    INTRA_ANGULAR_26,
201
    INTRA_ANGULAR_27,
202
    INTRA_ANGULAR_28,
203
    INTRA_ANGULAR_29,
204
    INTRA_ANGULAR_30,
205
    INTRA_ANGULAR_31,
206
    INTRA_ANGULAR_32,
207
    INTRA_ANGULAR_33,
208
    INTRA_ANGULAR_34,
209
};
210
211
enum SAOType {
212
    SAO_NOT_APPLIED = 0,
213
    SAO_BAND,
214
    SAO_EDGE,
215
    SAO_APPLIED
216
};
217
218
enum SAOEOClass {
219
    SAO_EO_HORIZ = 0,
220
    SAO_EO_VERT,
221
    SAO_EO_135D,
222
    SAO_EO_45D,
223
};
224
225
enum ScanType {
226
    SCAN_DIAG = 0,
227
    SCAN_HORIZ,
228
    SCAN_VERT,
229
};
230
231
typedef struct LongTermRPS {
232
    int     poc[32];
233
    uint8_t poc_msb_present[32];
234
    uint8_t used[32];
235
    uint8_t nb_refs;
236
} LongTermRPS;
237
238
typedef struct RefPicList {
239
    struct HEVCFrame *ref[HEVC_MAX_REFS];
240
    int list[HEVC_MAX_REFS];
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
259
    int pic_order_cnt_lsb;
260
261
    uint8_t first_slice_in_pic_flag;
262
    uint8_t dependent_slice_segment_flag;
263
    uint8_t pic_output_flag;
264
    uint8_t colour_plane_id;
265
266
    ///< RPS coded in the slice header itself is stored here
267
    int short_term_ref_pic_set_sps_flag;
268
    int short_term_ref_pic_set_size;
269
    ShortTermRPS slice_rps;
270
    const ShortTermRPS *short_term_rps;
271
    int long_term_ref_pic_set_size;
272
    LongTermRPS long_term_rps;
273
    unsigned int list_entry_lx[2][32];
274
275
    uint8_t rpl_modification_flag[2];
276
    uint8_t no_output_of_prior_pics_flag;
277
    uint8_t slice_temporal_mvp_enabled_flag;
278
279
    unsigned int nb_refs[2];
280
281
    uint8_t slice_sample_adaptive_offset_flag[3];
282
    uint8_t mvd_l1_zero_flag;
283
284
    uint8_t cabac_init_flag;
285
    uint8_t disable_deblocking_filter_flag; ///< slice_header_disable_deblocking_filter_flag
286
    uint8_t slice_loop_filter_across_slices_enabled_flag;
287
    uint8_t collocated_list;
288
289
    unsigned int collocated_ref_idx;
290
291
    int slice_qp_delta;
292
    int slice_cb_qp_offset;
293
    int slice_cr_qp_offset;
294
295
    uint8_t cu_chroma_qp_offset_enabled_flag;
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
302
    unsigned *entry_point_offset;
303
    int * offset;
304
    int * size;
305
    int num_entry_point_offsets;
306
307
    int8_t slice_qp;
308
309
    uint8_t luma_log2_weight_denom;
310
    int16_t chroma_log2_weight_denom;
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
323
    int slice_ctb_addr_rs;
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
336
    uint8_t cu_transquant_bypass_flag;
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 {
345
    DECLARE_ALIGNED(4, Mv, mv)[2];
346
    int8_t ref_idx[2];
347
    int8_t pred_flag;
348
} MvField;
349
350
typedef struct NeighbourAvailable {
351
    int cand_bottom_left;
352
    int cand_left;
353
    int cand_up;
354
    int cand_up_left;
355
    int cand_up_right;
356
    int cand_up_right_sap;
357
} NeighbourAvailable;
358
359
typedef struct PredictionUnit {
360
    int mpm_idx;
361
    int rem_intra_luma_pred_mode;
362
    uint8_t intra_pred_mode[4];
363
    Mv mvd;
364
    uint8_t merge_flag;
365
    uint8_t intra_pred_mode_c[4];
366
    uint8_t chroma_mode_c[4];
367
} PredictionUnit;
368
369
typedef struct TransformUnit {
370
    int cu_qp_delta;
371
372
    int res_scale_val;
373
374
    // Inferred parameters;
375
    int intra_pred_mode;
376
    int intra_pred_mode_c;
377
    int chroma_mode_c;
378
    uint8_t is_cu_qp_delta_coded;
379
    uint8_t is_cu_chroma_qp_offset_coded;
380
    int8_t  cu_qp_offset_cb;
381
    int8_t  cu_qp_offset_cr;
382
    uint8_t cross_pf;
383
} TransformUnit;
384
385
typedef struct DBParams {
386
    int beta_offset;
387
    int tc_offset;
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 {
396
    AVFrame *frame;
397
    ThreadFrame tf;
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
424
typedef struct HEVCLocalContext {
425
    uint8_t cabac_state[HEVC_CONTEXTS];
426
427
    uint8_t stat_coeff[4];
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
467
typedef struct HEVCContext {
468
    const AVClass *c;  // needed by private avoptions
469
    AVCodecContext *avctx;
470
471
    struct HEVCContext  *sList[MAX_NB_THREADS];
472
473
    HEVCLocalContext    *HEVClcList[MAX_NB_THREADS];
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
484
    /** 1 if the independent slice segment header was successfully parsed */
485
    uint8_t slice_initialized;
486
487
    AVFrame *frame;
488
    AVFrame *output_frame;
489
    uint8_t *sao_pixel_buffer_h[3];
490
    uint8_t *sao_pixel_buffer_v[3];
491
492
    HEVCParamSets ps;
493
    HEVCSEI sei;
494
    struct AVMD5 *md5_ctx;
495
496
    AVBufferPool *tab_mvf_pool;
497
    AVBufferPool *rpl_tab_pool;
498
499
    ///< candidate references for the current frame
500
    RefPicList rps[5];
501
502
    SliceHeader sh;
503
    SAOParams *sao;
504
    DBParams *deblock;
505
    enum HEVCNALUnitType nal_unit_type;
506
    int temporal_id;  ///< temporal_id_plus1 - 1
507
    HEVCFrame *ref;
508
    HEVCFrame DPB[32];
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;
516
    int bs_height;
517
    int overlap;
518
519
    int is_decoded;
520
    int no_rasl_output_flag;
521
522
    HEVCPredContext hpc;
523
    HEVCDSPContext hevcdsp;
524
    VideoDSPContext vdsp;
525
    BswapDSPContext bdsp;
526
    int8_t *qp_y_tab;
527
    uint8_t *horizontal_bs;
528
    uint8_t *vertical_bs;
529
530
    int32_t *tab_slice_address;
531
532
    //  CU
533
    uint8_t *skip_flag;
534
    uint8_t *tab_ct_depth;
535
    // PU
536
    uint8_t *tab_ipm;
537
538
    uint8_t *cbf_luma; // cbf_luma of colocated TU
539
    uint8_t *is_pcm;
540
541
    // CTB-level flags affecting loop filter operation
542
    uint8_t *filter_slice_edges;
543
544
    /** used on BE to byteswap the lines for checksumming */
545
    uint8_t *checksum_buf;
546
    int      checksum_buf_size;
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
555
    int enable_parallel_tiles;
556
    atomic_int wpp_err;
557
558
    const uint8_t *data;
559
560
    H2645Packet pkt;
561
    // type of the first VCL NAL of the current frame
562
    enum HEVCNALUnitType first_nal_type;
563
564
    uint8_t context_initialized;
565
    int is_nalff;           ///< this flag is != 0 if bitstream is encapsulated
566
                            ///< as a format defined in 14496-15
567
    int apply_defdispwin;
568
569
    int nal_length_size;    ///< Number of bytes used for nal length (1, 2 or 4)
570
    int nuh_layer_id;
571
} HEVCContext;
572
573
/**
574
 * Mark all frames in DPB as unused for reference.
575
 */
576
void ff_hevc_clear_refs(HEVCContext *s);
577
578
/**
579
 * Drop all frames currently in DPB.
580
 */
581
void ff_hevc_flush_dpb(HEVCContext *s);
582
583
RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *frame,
584
                                 int x0, int y0);
585
586
/**
587
 * Construct the reference picture sets for the current frame.
588
 */
589
int ff_hevc_frame_rps(HEVCContext *s);
590
591
/**
592
 * Construct the reference picture list(s) for the current slice.
593
 */
594
int ff_hevc_slice_rpl(HEVCContext *s);
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);
598
int ff_hevc_sao_merge_flag_decode(HEVCContext *s);
599
int ff_hevc_sao_type_idx_decode(HEVCContext *s);
600
int ff_hevc_sao_band_position_decode(HEVCContext *s);
601
int ff_hevc_sao_offset_abs_decode(HEVCContext *s);
602
int ff_hevc_sao_offset_sign_decode(HEVCContext *s);
603
int ff_hevc_sao_eo_class_decode(HEVCContext *s);
604
int ff_hevc_end_of_slice_flag_decode(HEVCContext *s);
605
int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s);
606
int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0,
607
                             int x_cb, int y_cb);
608
int ff_hevc_pred_mode_decode(HEVCContext *s);
609
int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth,
610
                                          int x0, int y0);
611
int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size);
612
int ff_hevc_pcm_flag_decode(HEVCContext *s);
613
int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s);
614
int ff_hevc_mpm_idx_decode(HEVCContext *s);
615
int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s);
616
int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s);
617
int ff_hevc_merge_idx_decode(HEVCContext *s);
618
int ff_hevc_merge_flag_decode(HEVCContext *s);
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);
621
int ff_hevc_mvp_lx_flag_decode(HEVCContext *s);
622
int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s);
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);
626
int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx);
627
int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx);
628
629
/**
630
 * Get the number of candidate references for the current frame.
631
 */
632
int ff_hevc_frame_nb_refs(const HEVCContext *s);
633
634
int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc);
635
636
1020
static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
637
{
638
1020
    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
1020
    default: break;
649
    }
650
1020
    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
 */
657
int ff_hevc_output_frame(HEVCContext *s, AVFrame *frame, int flush);
658
659
void ff_hevc_bump_frame(HEVCContext *s);
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);
676
int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s);
677
int ff_hevc_cu_qp_delta_abs(HEVCContext *s);
678
int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s);
679
int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s);
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 */