1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder 3cabdff1aSopenharmony_ci * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> 4cabdff1aSopenharmony_ci * 5cabdff1aSopenharmony_ci * This file is part of FFmpeg. 6cabdff1aSopenharmony_ci * 7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 11cabdff1aSopenharmony_ci * 12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15cabdff1aSopenharmony_ci * Lesser General Public License for more details. 16cabdff1aSopenharmony_ci * 17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20cabdff1aSopenharmony_ci */ 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci/** 23cabdff1aSopenharmony_ci * @file 24cabdff1aSopenharmony_ci * H.264 / AVC / MPEG-4 prediction functions. 25cabdff1aSopenharmony_ci * @author Michael Niedermayer <michaelni@gmx.at> 26cabdff1aSopenharmony_ci */ 27cabdff1aSopenharmony_ci 28cabdff1aSopenharmony_ci#ifndef AVCODEC_H264PRED_H 29cabdff1aSopenharmony_ci#define AVCODEC_H264PRED_H 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci#include <stddef.h> 32cabdff1aSopenharmony_ci#include <stdint.h> 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_ci/** 35cabdff1aSopenharmony_ci * Prediction types 36cabdff1aSopenharmony_ci */ 37cabdff1aSopenharmony_ci//@{ 38cabdff1aSopenharmony_ci#define VERT_PRED 0 39cabdff1aSopenharmony_ci#define HOR_PRED 1 40cabdff1aSopenharmony_ci#define DC_PRED 2 41cabdff1aSopenharmony_ci#define DIAG_DOWN_LEFT_PRED 3 42cabdff1aSopenharmony_ci#define DIAG_DOWN_RIGHT_PRED 4 43cabdff1aSopenharmony_ci#define VERT_RIGHT_PRED 5 44cabdff1aSopenharmony_ci#define HOR_DOWN_PRED 6 45cabdff1aSopenharmony_ci#define VERT_LEFT_PRED 7 46cabdff1aSopenharmony_ci#define HOR_UP_PRED 8 47cabdff1aSopenharmony_ci 48cabdff1aSopenharmony_ci// DC edge (not for VP8) 49cabdff1aSopenharmony_ci#define LEFT_DC_PRED 9 50cabdff1aSopenharmony_ci#define TOP_DC_PRED 10 51cabdff1aSopenharmony_ci#define DC_128_PRED 11 52cabdff1aSopenharmony_ci 53cabdff1aSopenharmony_ci// RV40 specific 54cabdff1aSopenharmony_ci#define DIAG_DOWN_LEFT_PRED_RV40_NODOWN 12 55cabdff1aSopenharmony_ci#define HOR_UP_PRED_RV40_NODOWN 13 56cabdff1aSopenharmony_ci#define VERT_LEFT_PRED_RV40_NODOWN 14 57cabdff1aSopenharmony_ci 58cabdff1aSopenharmony_ci// VP8 specific 59cabdff1aSopenharmony_ci#define TM_VP8_PRED 9 ///< "True Motion", used instead of plane 60cabdff1aSopenharmony_ci#define VERT_VP8_PRED 10 ///< for VP8, #VERT_PRED is the average of 61cabdff1aSopenharmony_ci ///< (left col+cur col x2+right col) / 4; 62cabdff1aSopenharmony_ci ///< this is the "unaveraged" one 63cabdff1aSopenharmony_ci#define HOR_VP8_PRED 14 ///< unaveraged version of #HOR_PRED, see 64cabdff1aSopenharmony_ci ///< #VERT_VP8_PRED for details 65cabdff1aSopenharmony_ci#define DC_127_PRED 12 66cabdff1aSopenharmony_ci#define DC_129_PRED 13 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_ci#define DC_PRED8x8 0 69cabdff1aSopenharmony_ci#define HOR_PRED8x8 1 70cabdff1aSopenharmony_ci#define VERT_PRED8x8 2 71cabdff1aSopenharmony_ci#define PLANE_PRED8x8 3 72cabdff1aSopenharmony_ci 73cabdff1aSopenharmony_ci// DC edge 74cabdff1aSopenharmony_ci#define LEFT_DC_PRED8x8 4 75cabdff1aSopenharmony_ci#define TOP_DC_PRED8x8 5 76cabdff1aSopenharmony_ci#define DC_128_PRED8x8 6 77cabdff1aSopenharmony_ci 78cabdff1aSopenharmony_ci// H.264/SVQ3 (8x8) specific 79cabdff1aSopenharmony_ci#define ALZHEIMER_DC_L0T_PRED8x8 7 80cabdff1aSopenharmony_ci#define ALZHEIMER_DC_0LT_PRED8x8 8 81cabdff1aSopenharmony_ci#define ALZHEIMER_DC_L00_PRED8x8 9 82cabdff1aSopenharmony_ci#define ALZHEIMER_DC_0L0_PRED8x8 10 83cabdff1aSopenharmony_ci 84cabdff1aSopenharmony_ci// VP8 specific 85cabdff1aSopenharmony_ci#define DC_127_PRED8x8 7 86cabdff1aSopenharmony_ci#define DC_129_PRED8x8 8 87cabdff1aSopenharmony_ci//@} 88cabdff1aSopenharmony_ci 89cabdff1aSopenharmony_ci#define PART_NOT_AVAILABLE -2 90cabdff1aSopenharmony_ci 91cabdff1aSopenharmony_ci/** 92cabdff1aSopenharmony_ci * Context for storing H.264 prediction functions 93cabdff1aSopenharmony_ci */ 94cabdff1aSopenharmony_citypedef struct H264PredContext { 95cabdff1aSopenharmony_ci void(*pred4x4[9 + 3 + 3])(uint8_t *src, const uint8_t *topright, 96cabdff1aSopenharmony_ci ptrdiff_t stride); 97cabdff1aSopenharmony_ci void(*pred8x8l[9 + 3])(uint8_t *src, int topleft, int topright, 98cabdff1aSopenharmony_ci ptrdiff_t stride); 99cabdff1aSopenharmony_ci void(*pred8x8[4 + 3 + 4])(uint8_t *src, ptrdiff_t stride); 100cabdff1aSopenharmony_ci void(*pred16x16[4 + 3 + 2])(uint8_t *src, ptrdiff_t stride); 101cabdff1aSopenharmony_ci 102cabdff1aSopenharmony_ci void(*pred4x4_add[2])(uint8_t *pix /*align 4*/, 103cabdff1aSopenharmony_ci int16_t *block /*align 16*/, ptrdiff_t stride); 104cabdff1aSopenharmony_ci void(*pred8x8l_add[2])(uint8_t *pix /*align 8*/, 105cabdff1aSopenharmony_ci int16_t *block /*align 16*/, ptrdiff_t stride); 106cabdff1aSopenharmony_ci void(*pred8x8l_filter_add[2])(uint8_t *pix /*align 8*/, 107cabdff1aSopenharmony_ci int16_t *block /*align 16*/, int topleft, int topright, ptrdiff_t stride); 108cabdff1aSopenharmony_ci void(*pred8x8_add[3])(uint8_t *pix /*align 8*/, 109cabdff1aSopenharmony_ci const int *block_offset, 110cabdff1aSopenharmony_ci int16_t *block /*align 16*/, ptrdiff_t stride); 111cabdff1aSopenharmony_ci void(*pred16x16_add[3])(uint8_t *pix /*align 16*/, 112cabdff1aSopenharmony_ci const int *block_offset, 113cabdff1aSopenharmony_ci int16_t *block /*align 16*/, ptrdiff_t stride); 114cabdff1aSopenharmony_ci} H264PredContext; 115cabdff1aSopenharmony_ci 116cabdff1aSopenharmony_civoid ff_h264_pred_init(H264PredContext *h, int codec_id, 117cabdff1aSopenharmony_ci const int bit_depth, const int chroma_format_idc); 118cabdff1aSopenharmony_civoid ff_h264_pred_init_aarch64(H264PredContext *h, int codec_id, 119cabdff1aSopenharmony_ci const int bit_depth, 120cabdff1aSopenharmony_ci const int chroma_format_idc); 121cabdff1aSopenharmony_civoid ff_h264_pred_init_arm(H264PredContext *h, int codec_id, 122cabdff1aSopenharmony_ci const int bit_depth, const int chroma_format_idc); 123cabdff1aSopenharmony_civoid ff_h264_pred_init_x86(H264PredContext *h, int codec_id, 124cabdff1aSopenharmony_ci const int bit_depth, const int chroma_format_idc); 125cabdff1aSopenharmony_civoid ff_h264_pred_init_mips(H264PredContext *h, int codec_id, 126cabdff1aSopenharmony_ci const int bit_depth, const int chroma_format_idc); 127cabdff1aSopenharmony_civoid ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, 128cabdff1aSopenharmony_ci const int bit_depth, const int chroma_format_idc); 129cabdff1aSopenharmony_ci 130cabdff1aSopenharmony_ci#endif /* AVCODEC_H264PRED_H */ 131