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