annotate h264pred.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents afee30fe8c26
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
1 /*
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
2 * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
4 *
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
5 * This file is part of FFmpeg.
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
6 *
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
11 *
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
15 * Lesser General Public License for more details.
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
16 *
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
20 */
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
21
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
22 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 10623
diff changeset
23 * @file
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
24 * H.264 / AVC / MPEG4 prediction functions.
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
25 * @author Michael Niedermayer <michaelni@gmx.at>
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
26 */
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
27
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7532
diff changeset
28 #ifndef AVCODEC_H264PRED_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7532
diff changeset
29 #define AVCODEC_H264PRED_H
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
30
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6036
diff changeset
31 #include "libavutil/common.h"
8547
b9880fc0afaf Add missing headers to allow 'make checkheaders' to pass.
diego
parents: 8349
diff changeset
32 #include "dsputil.h"
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
33
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
34 /**
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
35 * Prediction types
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
36 */
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
37 //@{
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
38 #define VERT_PRED 0
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
39 #define HOR_PRED 1
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
40 #define DC_PRED 2
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
41 #define DIAG_DOWN_LEFT_PRED 3
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
42 #define DIAG_DOWN_RIGHT_PRED 4
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
43 #define VERT_RIGHT_PRED 5
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
44 #define HOR_DOWN_PRED 6
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
45 #define VERT_LEFT_PRED 7
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
46 #define HOR_UP_PRED 8
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
47
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
48 #define LEFT_DC_PRED 9
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
49 #define TOP_DC_PRED 10
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
50 #define DC_128_PRED 11
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
51
11918
823f332655e8 Add intra prediction functions for VP8.
rbultje
parents: 11916
diff changeset
52 #define TM_VP8_PRED 9 ///< "True Motion", used instead of plane
823f332655e8 Add intra prediction functions for VP8.
rbultje
parents: 11916
diff changeset
53
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
54 #define DIAG_DOWN_LEFT_PRED_RV40_NODOWN 12
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
55 #define HOR_UP_PRED_RV40_NODOWN 13
6036
ce3b68242317 Correct spatial prediction mode in RV30/40 for vertical left direction
kostya
parents: 5830
diff changeset
56 #define VERT_LEFT_PRED_RV40_NODOWN 14
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
57
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
58 #define DC_PRED8x8 0
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
59 #define HOR_PRED8x8 1
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
60 #define VERT_PRED8x8 2
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
61 #define PLANE_PRED8x8 3
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
62
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
63 #define LEFT_DC_PRED8x8 4
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
64 #define TOP_DC_PRED8x8 5
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
65 #define DC_128_PRED8x8 6
7532
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
66
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
67 #define ALZHEIMER_DC_L0T_PRED8x8 7
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
68 #define ALZHEIMER_DC_0LT_PRED8x8 8
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
69 #define ALZHEIMER_DC_L00_PRED8x8 9
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
70 #define ALZHEIMER_DC_0L0_PRED8x8 10
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
71 //@}
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
72
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
73 /**
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
74 * Context for storing H.264 prediction functions
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
75 */
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
76 typedef struct H264PredContext{
11916
73f4fd490f2a Make "topright" argument to pred4x4() const.
rbultje
parents: 11644
diff changeset
77 void (*pred4x4 [9+3+3])(uint8_t *src, const uint8_t *topright, int stride);//FIXME move to dsp?
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
78 void (*pred8x8l [9+3])(uint8_t *src, int topleft, int topright, int stride);
7532
c4de4b187b4f Support MBAFF + constrained intra prediction.
michael
parents: 6763
diff changeset
79 void (*pred8x8 [4+3+4])(uint8_t *src, int stride);
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
80 void (*pred16x16[4+3])(uint8_t *src, int stride);
8349
920ded20b469 Horizontal and vertical prediction functions needed for new lossless mode
michael
parents: 7760
diff changeset
81
920ded20b469 Horizontal and vertical prediction functions needed for new lossless mode
michael
parents: 7760
diff changeset
82 void (*pred4x4_add [2])(uint8_t *pix/*align 4*/, const DCTELEM *block/*align 16*/, int stride);
920ded20b469 Horizontal and vertical prediction functions needed for new lossless mode
michael
parents: 7760
diff changeset
83 void (*pred8x8l_add [2])(uint8_t *pix/*align 8*/, const DCTELEM *block/*align 16*/, int stride);
920ded20b469 Horizontal and vertical prediction functions needed for new lossless mode
michael
parents: 7760
diff changeset
84 void (*pred8x8_add [3])(uint8_t *pix/*align 8*/, const int *block_offset, const DCTELEM *block/*align 16*/, int stride);
920ded20b469 Horizontal and vertical prediction functions needed for new lossless mode
michael
parents: 7760
diff changeset
85 void (*pred16x16_add[3])(uint8_t *pix/*align 16*/, const int *block_offset, const DCTELEM *block/*align 16*/, int stride);
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
86 }H264PredContext;
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
87
5638
4a26dc4ca11d Move H.264 intra prediction functions into their own context
kostya
parents: 5231
diff changeset
88 void ff_h264_pred_init(H264PredContext *h, int codec_id);
10623
f52d07b169b4 ARM: NEON optimised H264 16x16, 8x8 pred
mru
parents: 8718
diff changeset
89 void ff_h264_pred_init_arm(H264PredContext *h, int codec_id);
11951
afee30fe8c26 16x16 and 8x8c x86 SIMD intra pred functions for VP8 and H.264
darkshikari
parents: 11918
diff changeset
90 void ff_h264_pred_init_x86(H264PredContext *h, int codec_id);
4975
9a6a0818e93f split h264.c to move parser in its own file
aurel
parents:
diff changeset
91
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7532
diff changeset
92 #endif /* AVCODEC_H264PRED_H */