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 33 typedef 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 56 typedef 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 63 typedef 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