xref: /third_party/ffmpeg/libavcodec/av1dec.h (revision cabdff1a)
1/*
2 * AV1 video decoder
3 * *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVCODEC_AV1DEC_H
22#define AVCODEC_AV1DEC_H
23
24#include <stdint.h>
25
26#include "libavutil/buffer.h"
27#include "libavutil/frame.h"
28#include "libavutil/pixfmt.h"
29#include "avcodec.h"
30#include "cbs.h"
31#include "cbs_av1.h"
32
33typedef struct AV1Frame {
34    AVFrame *f;
35
36    AVBufferRef *hwaccel_priv_buf;
37    void *hwaccel_picture_private;
38
39    AVBufferRef *header_ref;
40    AV1RawFrameHeader *raw_frame_header;
41
42    int temporal_id;
43    int spatial_id;
44
45    uint8_t gm_invalid[AV1_NUM_REF_FRAMES];
46    uint8_t gm_type[AV1_NUM_REF_FRAMES];
47    int32_t gm_params[AV1_NUM_REF_FRAMES][6];
48
49    uint8_t skip_mode_frame_idx[2];
50
51    AV1RawFilmGrainParams film_grain;
52
53    uint8_t coded_lossless;
54} AV1Frame;
55
56typedef struct TileGroupInfo {
57    uint32_t tile_offset;
58    uint32_t tile_size;
59    uint16_t tile_row;
60    uint16_t tile_column;
61} TileGroupInfo;
62
63typedef struct AV1DecContext {
64    const AVClass *class;
65    AVCodecContext *avctx;
66
67    enum AVPixelFormat pix_fmt;
68    CodedBitstreamContext *cbc;
69    CodedBitstreamFragment current_obu;
70
71    AVBufferRef *seq_ref;
72    AV1RawSequenceHeader *raw_seq;
73    AVBufferRef *header_ref;
74    AV1RawFrameHeader *raw_frame_header;
75    TileGroupInfo *tile_group_info;
76    uint16_t tile_num;
77    uint16_t tg_start;
78    uint16_t tg_end;
79
80    int operating_point_idc;
81
82    AV1Frame ref[AV1_NUM_REF_FRAMES];
83    AV1Frame cur_frame;
84
85    // AVOptions
86    int operating_point;
87} AV1DecContext;
88
89#endif /* AVCODEC_AV1DEC_H */
90