annotate libavcodec/avcodec.h @ 10:4d1f82230449

preprocessed source from newer mercurial ver.
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Tue, 13 Aug 2013 13:12:57 +0200
parents
children
rev   line source
nengel@2 1 #ifndef AVCODEC_AVCODEC_H
nengel@2 2 #define AVCODEC_AVCODEC_H
nengel@2 3
nengel@2 4 #include <errno.h>
nengel@2 5 #include <stdint.h>
nengel@2 6 #include "config.h"
nengel@2 7
nengel@2 8 #include "libavutil/mem.h"
nengel@2 9
nengel@2 10 #define MAX_SPS_COUNT 32
nengel@2 11 #define MAX_PPS_COUNT 256
nengel@2 12
nengel@2 13
nengel@2 14 #ifndef CABAC
nengel@2 15 #define CABAC h->pps.cabac
nengel@2 16 #endif
nengel@2 17
nengel@2 18 #define EXTENDED_SAR 255
nengel@2 19
nengel@2 20 #define MB_TYPE_REF0 MB_TYPE_ACPRED //dirty but it fits in 16 bit
nengel@2 21 #define MB_TYPE_8x8DCT 0x01000000
nengel@2 22 #define IS_REF0(a) ((a) & MB_TYPE_REF0)
nengel@2 23 #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
nengel@2 24
nengel@2 25 #define LIST_NOT_USED -1
nengel@2 26 #define PART_NOT_AVAILABLE -2
nengel@2 27
nengel@2 28 /* dct code */
nengel@2 29 typedef short DCTELEM;
nengel@2 30
nengel@2 31 /**
nengel@2 32 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
nengel@2 33 * This is mainly needed because some optimized bitstream readers read
nengel@2 34 * 32 or 64 bit at once and could read over the end.<br>
nengel@2 35 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
nengel@2 36 * MPEG bitstreams could cause overread and segfault.
nengel@2 37 */
nengel@2 38 #define FF_INPUT_BUFFER_PADDING_SIZE 8
nengel@2 39
nengel@2 40 enum AVColorPrimaries{
nengel@2 41 AVCOL_PRI_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
nengel@2 42 AVCOL_PRI_UNSPECIFIED=2,
nengel@2 43 AVCOL_PRI_BT470M =4,
nengel@2 44 AVCOL_PRI_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
nengel@2 45 AVCOL_PRI_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
nengel@2 46 AVCOL_PRI_SMPTE240M =7, ///< functionally identical to above
nengel@2 47 AVCOL_PRI_FILM =8,
nengel@2 48 AVCOL_PRI_NB , ///< Not part of ABI
nengel@2 49 };
nengel@2 50
nengel@2 51 enum AVColorTransferCharacteristic{
nengel@2 52 AVCOL_TRC_BT709 =1, ///< also ITU-R BT1361
nengel@2 53 AVCOL_TRC_UNSPECIFIED=2,
nengel@2 54 AVCOL_TRC_GAMMA22 =4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
nengel@2 55 AVCOL_TRC_GAMMA28 =5, ///< also ITU-R BT470BG
nengel@2 56 AVCOL_TRC_NB , ///< Not part of ABI
nengel@2 57 };
nengel@2 58
nengel@2 59 enum AVColorSpace{
nengel@2 60 AVCOL_SPC_RGB =0,
nengel@2 61 AVCOL_SPC_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
nengel@2 62 AVCOL_SPC_UNSPECIFIED=2,
nengel@2 63 AVCOL_SPC_FCC =4,
nengel@2 64 AVCOL_SPC_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
nengel@2 65 AVCOL_SPC_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
nengel@2 66 AVCOL_SPC_SMPTE240M =7,
nengel@2 67 AVCOL_SPC_NB , ///< Not part of ABI
nengel@2 68 };
nengel@2 69
nengel@2 70 enum AVColorRange{
nengel@2 71 AVCOL_RANGE_UNSPECIFIED=0,
nengel@2 72 AVCOL_RANGE_MPEG =1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
nengel@2 73 AVCOL_RANGE_JPEG =2, ///< the normal 2^n-1 "JPEG" YUV ranges
nengel@2 74 AVCOL_RANGE_NB , ///< Not part of ABI
nengel@2 75 };
nengel@2 76
nengel@2 77 #define MAX_MMCO_COUNT 66
nengel@2 78 /**
nengel@2 79 * Memory management control operation opcode.
nengel@2 80 */
nengel@2 81 typedef enum MMCOOpcode{
nengel@2 82 MMCO_END=0,
nengel@2 83 MMCO_SHORT2UNUSED,
nengel@2 84 MMCO_LONG2UNUSED,
nengel@2 85 MMCO_SHORT2LONG,
nengel@2 86 MMCO_SET_MAX_LONG,
nengel@2 87 MMCO_RESET,
nengel@2 88 MMCO_LONG,
nengel@2 89 } MMCOOpcode;
nengel@2 90
nengel@2 91 /* NAL unit types */
nengel@2 92 enum {
nengel@2 93 NAL_SLICE=1,
nengel@2 94 NAL_DPA,
nengel@2 95 NAL_DPB,
nengel@2 96 NAL_DPC,
nengel@2 97 NAL_IDR_SLICE,
nengel@2 98 NAL_SEI,
nengel@2 99 NAL_SPS,
nengel@2 100 NAL_PPS,
nengel@2 101 NAL_AUD,
nengel@2 102 NAL_END_SEQUENCE,
nengel@2 103 NAL_END_STREAM,
nengel@2 104 NAL_FILLER_DATA,
nengel@2 105 NAL_SPS_EXT,
nengel@2 106 NAL_AUXILIARY_SLICE=19
nengel@2 107 };
nengel@2 108
nengel@2 109 /**
nengel@2 110 * SEI message types
nengel@2 111 */
nengel@2 112 typedef enum {
nengel@2 113 SEI_BUFFERING_PERIOD = 0, ///< buffering period (H.264, D.1.1)
nengel@2 114 SEI_TYPE_PIC_TIMING = 1, ///< picture timing
nengel@2 115 SEI_TYPE_USER_DATA_UNREGISTERED = 5, ///< unregistered user data
nengel@2 116 SEI_TYPE_RECOVERY_POINT = 6 ///< recovery point (frame # to decoder sync)
nengel@2 117 } SEI_Type;
nengel@2 118
nengel@2 119 /**
nengel@2 120 * pic_struct in picture timing SEI message
nengel@2 121 */
nengel@2 122 typedef enum {
nengel@2 123 SEI_PIC_STRUCT_FRAME = 0, ///< 0: %frame
nengel@2 124 SEI_PIC_STRUCT_TOP_FIELD = 1, ///< 1: top field
nengel@2 125 SEI_PIC_STRUCT_BOTTOM_FIELD = 2, ///< 2: bottom field
nengel@2 126 SEI_PIC_STRUCT_TOP_BOTTOM = 3, ///< 3: top field, bottom field, in that order
nengel@2 127 SEI_PIC_STRUCT_BOTTOM_TOP = 4, ///< 4: bottom field, top field, in that order
nengel@2 128 SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, ///< 5: top field, bottom field, top field repeated, in that order
nengel@2 129 SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, ///< 6: bottom field, top field, bottom field repeated, in that order
nengel@2 130 SEI_PIC_STRUCT_FRAME_DOUBLING = 7, ///< 7: %frame doubling
nengel@2 131 SEI_PIC_STRUCT_FRAME_TRIPLING = 8 ///< 8: %frame tripling
nengel@2 132 } SEI_PicStructType;
nengel@2 133
nengel@2 134 #define FF_MAX_B_FRAMES 16
nengel@2 135
nengel@2 136
nengel@2 137 //The following defines may change, don't expect compatibility if you use them.
nengel@2 138 #define MB_TYPE_INTRA4x4 0x0001
nengel@2 139 #define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
nengel@2 140 #define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific
nengel@2 141 #define MB_TYPE_16x16 0x0008
nengel@2 142 #define MB_TYPE_16x8 0x0010
nengel@2 143 #define MB_TYPE_8x16 0x0020
nengel@2 144 #define MB_TYPE_8x8 0x0040
nengel@2 145 #define MB_TYPE_INTERLACED 0x0080
nengel@2 146 #define MB_TYPE_DIRECT2 0x0100 //FIXME
nengel@2 147 #define MB_TYPE_ACPRED 0x0200
nengel@2 148 #define MB_TYPE_GMC 0x0400
nengel@2 149 #define MB_TYPE_SKIP 0x0800
nengel@2 150 #define MB_TYPE_P0L0 0x1000
nengel@2 151 #define MB_TYPE_P1L0 0x2000
nengel@2 152 #define MB_TYPE_P0L1 0x4000
nengel@2 153 #define MB_TYPE_P1L1 0x8000
nengel@2 154 #define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
nengel@2 155 #define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
nengel@2 156 #define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
nengel@2 157 #define MB_TYPE_QUANT 0x00010000
nengel@2 158 #define MB_TYPE_CBP 0x00020000
nengel@2 159 //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
nengel@2 160
nengel@2 161 #define FF_BUFFER_TYPE_INTERNAL 1
nengel@2 162 #define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user)
nengel@2 163 #define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
nengel@2 164 #define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
nengel@2 165
nengel@2 166
nengel@2 167 #define FF_I_TYPE 1 ///< Intra
nengel@2 168 #define FF_P_TYPE 2 ///< Predicted
nengel@2 169 #define FF_B_TYPE 3 ///< Bi-dir predicted
nengel@2 170 #define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4
nengel@2 171 #define FF_SI_TYPE 5 ///< Switching Intra
nengel@2 172 #define FF_SP_TYPE 6 ///< Switching Predicted
nengel@2 173 #define FF_BI_TYPE 7
nengel@2 174
nengel@2 175 #define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
nengel@2 176 #define IS_INTRA4x4(a) ((a)&MB_TYPE_INTRA4x4)
nengel@2 177 #define IS_INTRA16x16(a) ((a)&MB_TYPE_INTRA16x16)
nengel@2 178 #define IS_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
nengel@2 179 #define IS_INTRA(a) ((a)&7)
nengel@2 180 #define IS_INTER(a) ((a)&(MB_TYPE_16x16|MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8))
nengel@2 181 #define IS_SKIP(a) ((a)&MB_TYPE_SKIP)
nengel@2 182 #define IS_INTRA_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
nengel@2 183 #define IS_INTERLACED(a) ((a)&MB_TYPE_INTERLACED)
nengel@2 184 #define IS_DIRECT(a) ((a)&MB_TYPE_DIRECT2)
nengel@2 185 #define IS_GMC(a) ((a)&MB_TYPE_GMC)
nengel@2 186 #define IS_16X16(a) ((a)&MB_TYPE_16x16)
nengel@2 187 #define IS_16X8(a) ((a)&MB_TYPE_16x8)
nengel@2 188 #define IS_8X16(a) ((a)&MB_TYPE_8x16)
nengel@2 189 #define IS_8X8(a) ((a)&MB_TYPE_8x8)
nengel@2 190 #define IS_SUB_8X8(a) ((a)&MB_TYPE_16x16) //note reused
nengel@2 191 #define IS_SUB_8X4(a) ((a)&MB_TYPE_16x8) //note reused
nengel@2 192 #define IS_SUB_4X8(a) ((a)&MB_TYPE_8x16) //note reused
nengel@2 193 #define IS_SUB_4X4(a) ((a)&MB_TYPE_8x8) //note reused
nengel@2 194 #define IS_ACPRED(a) ((a)&MB_TYPE_ACPRED)
nengel@2 195 #define IS_QUANT(a) ((a)&MB_TYPE_QUANT)
nengel@2 196 #define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0<<((part)+2*(list))))
nengel@2 197 #define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0|MB_TYPE_P1L0)<<(2*(list)))) ///< does this mb use listX, note does not work if subMBs
nengel@2 198 #define HAS_CBP(a) ((a)&MB_TYPE_CBP)
nengel@2 199
nengel@2 200
nengel@2 201 #define FF_MM_FORCE 0x80000000 /* Force usage of selected flags (OR) */
nengel@2 202 /* lower 16 bits - CPU features */
nengel@2 203 #define FF_MM_MMX 0x0001 ///< standard MMX
nengel@2 204 #define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW
nengel@2 205 #define FF_MM_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
nengel@2 206 #define FF_MM_SSE 0x0008 ///< SSE functions
nengel@2 207 #define FF_MM_SSE2 0x0010 ///< PIV SSE2 functions
nengel@2 208 #define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt
nengel@2 209 #define FF_MM_SSE3 0x0040 ///< Prescott SSE3 functions
nengel@2 210 #define FF_MM_SSSE3 0x0080 ///< Conroe SSSE3 functions
nengel@2 211 #define FF_MM_SSE4 0x0100 ///< Penryn SSE4.1 functions
nengel@2 212 #define FF_MM_SSE42 0x0200 ///< Nehalem SSE4.2 functions
nengel@2 213 #define FF_MM_IWMMXT 0x0100 ///< XScale IWMMXT
nengel@2 214 #define FF_MM_ALTIVEC 0x0001 ///< standard AltiVec
nengel@2 215
nengel@2 216
nengel@2 217 /**
nengel@2 218 * Sequence parameter set
nengel@2 219 */
nengel@2 220 typedef struct SPS{
nengel@2 221
nengel@2 222 int profile_idc;
nengel@2 223 int level_idc;
nengel@2 224 int chroma_format_idc;
nengel@2 225 int transform_bypass; ///< qpprime_y_zero_transform_bypass_flag
nengel@2 226 int log2_max_frame_num; ///< log2_max_frame_num_minus4 + 4
nengel@2 227 int poc_type; ///< pic_order_cnt_type
nengel@2 228 int log2_max_poc_lsb; ///< log2_max_pic_order_cnt_lsb_minus4
nengel@2 229 int delta_pic_order_always_zero_flag;
nengel@2 230 int offset_for_non_ref_pic;
nengel@2 231 int offset_for_top_to_bottom_field;
nengel@2 232 int poc_cycle_length; ///< num_ref_frames_in_pic_order_cnt_cycle
nengel@2 233 int ref_frame_count; ///< num_ref_frames
nengel@2 234 int gaps_in_frame_num_allowed_flag;
nengel@2 235 int mb_width; ///< pic_width_in_mbs_minus1 + 1
nengel@2 236 int mb_height; ///< pic_height_in_map_units_minus1 + 1
nengel@2 237 int frame_mbs_only_flag;
nengel@2 238 int mb_aff; ///<mb_adaptive_frame_field_flag
nengel@2 239 int direct_8x8_inference_flag;
nengel@2 240 int crop; ///< frame_cropping_flag
nengel@2 241 unsigned int crop_left; ///< frame_cropping_rect_left_offset
nengel@2 242 unsigned int crop_right; ///< frame_cropping_rect_right_offset
nengel@2 243 unsigned int crop_top; ///< frame_cropping_rect_top_offset
nengel@2 244 unsigned int crop_bottom; ///< frame_cropping_rect_bottom_offset
nengel@2 245 int vui_parameters_present_flag;
nengel@2 246 int num,den;
nengel@2 247
nengel@2 248 int video_signal_type_present_flag;
nengel@2 249 int full_range;
nengel@2 250 int colour_description_present_flag;
nengel@2 251 enum AVColorPrimaries color_primaries;
nengel@2 252 enum AVColorTransferCharacteristic color_trc;
nengel@2 253 enum AVColorSpace colorspace;
nengel@2 254 int timing_info_present_flag;
nengel@2 255 uint32_t num_units_in_tick;
nengel@2 256 uint32_t time_scale;
nengel@2 257 int fixed_frame_rate_flag;
nengel@2 258 short offset_for_ref_frame[256]; //FIXME dyn aloc?
nengel@2 259 int bitstream_restriction_flag;
nengel@2 260 int num_reorder_frames;
nengel@2 261 int scaling_matrix_present;
nengel@2 262 uint8_t scaling_matrix4[6][16];
nengel@2 263 uint8_t scaling_matrix8[2][64];
nengel@2 264 int nal_hrd_parameters_present_flag;
nengel@2 265 int vcl_hrd_parameters_present_flag;
nengel@2 266 int pic_struct_present_flag;
nengel@2 267 int time_offset_length;
nengel@2 268 int cpb_cnt; ///< See H.264 E.1.2
nengel@2 269 int initial_cpb_removal_delay_length; ///< initial_cpb_removal_delay_length_minus1 +1
nengel@2 270 int cpb_removal_delay_length; ///< cpb_removal_delay_length_minus1 + 1
nengel@2 271 int dpb_output_delay_length; ///< dpb_output_delay_length_minus1 + 1
nengel@2 272 int bit_depth_luma; ///< bit_depth_luma_minus8 + 8
nengel@2 273 int bit_depth_chroma; ///< bit_depth_chroma_minus8 + 8
nengel@2 274 int residual_color_transform_flag; ///< residual_colour_transform_flag
nengel@2 275 }SPS;
nengel@2 276
nengel@2 277 /**
nengel@2 278 * Picture parameter set
nengel@2 279 */
nengel@2 280 typedef struct PPS{
nengel@2 281 unsigned int sps_id;
nengel@2 282 int cabac; ///< entropy_coding_mode_flag
nengel@2 283 int pic_order_present; ///< pic_order_present_flag
nengel@2 284 int slice_group_count; ///< num_slice_groups_minus1 + 1
nengel@2 285 int mb_slice_group_map_type;
nengel@2 286 unsigned int ref_count[2]; ///< num_ref_idx_l0/1_active_minus1 + 1
nengel@2 287 int weighted_pred; ///< weighted_pred_flag
nengel@2 288 int weighted_bipred_idc;
nengel@2 289 int init_qp; ///< pic_init_qp_minus26 + 26
nengel@2 290 int init_qs; ///< pic_init_qs_minus26 + 26
nengel@2 291 int chroma_qp_index_offset[2];
nengel@2 292 int deblocking_filter_parameters_present; ///< deblocking_filter_parameters_present_flag
nengel@2 293 int constrained_intra_pred; ///< constrained_intra_pred_flag
nengel@2 294 int redundant_pic_cnt_present; ///< redundant_pic_cnt_present_flag
nengel@2 295 int transform_8x8_mode; ///< transform_8x8_mode_flag
nengel@2 296 uint8_t scaling_matrix4[6][16];
nengel@2 297 uint8_t scaling_matrix8[2][64];
nengel@2 298 uint8_t chroma_qp_table[2][64]; ///< pre-scaled (with chroma_qp_index_offset) version of qp_table
nengel@2 299 int chroma_qp_diff;
nengel@2 300 }PPS;
nengel@2 301
nengel@2 302 typedef struct TopBorder{
nengel@2 303 uint8_t unfiltered_y[16];
nengel@2 304 uint8_t unfiltered_cb[8];
nengel@2 305 uint8_t unfiltered_cr[8];
nengel@2 306
nengel@2 307 uint8_t top_borders_y[16*4];
nengel@2 308 uint8_t top_borders_cb[8*2];
nengel@2 309 uint8_t top_borders_cr[8*2];
nengel@2 310 }TopBorder;
nengel@2 311
nengel@2 312 typedef struct LeftBorder{
nengel@2 313 uint8_t unfiltered_y[17];
nengel@2 314 uint8_t unfiltered_cb[9];
nengel@2 315 uint8_t unfiltered_cr[9];
nengel@2 316 }LeftBorder;
nengel@2 317
nengel@2 318 typedef struct H264Mb {
nengel@2 319 //variables copied in after cabac decoding
nengel@2 320 int16_t mb_x, mb_y;
nengel@2 321 int32_t mb_type;
nengel@2 322
nengel@2 323 uint16_t cbp; // coded block pattern, idct, deblock
nengel@2 324 int8_t qscale_mb_xy; // qp, deblock
nengel@2 325 int8_t qscale_left_mb_xy; //not required
nengel@2 326 int8_t qscale_top_mb_xy;
nengel@2 327
nengel@2 328 DECLARE_ALIGNED(8, uint16_t, sub_mb_type[4]);
nengel@2 329 DECLARE_ALIGNED(8, uint8_t, non_zero_count[24]); //idct deblock
nengel@2 330 DECLARE_ALIGNED(16, int16_t, mb[16*24]); //coeffs, idct
nengel@2 331
nengel@2 332 union{
nengel@2 333 struct {
nengel@2 334 DECLARE_ALIGNED(8, int8_t, ref_index[2][4]); //mc, deblock
nengel@2 335 DECLARE_ALIGNED(16, int16_t, mvd[2][16][2]); //mc, deblock
nengel@2 336 };
nengel@2 337 struct {
nengel@2 338 DECLARE_ALIGNED(8, int8_t, intra4x4_pred_mode[16]); //intra, deblock
nengel@2 339 int8_t chroma_pred_mode; //intra
nengel@2 340 int8_t intra16x16_pred_mode; //intra, deblock
nengel@2 341 };
nengel@2 342 };
nengel@2 343
nengel@2 344 #if OMPSS
nengel@2 345 DECLARE_ALIGNED(8, uint8_t, top_border[16+ 2*8]);
nengel@2 346 DECLARE_ALIGNED(8, uint8_t, top_border_next[8]);
nengel@2 347 DECLARE_ALIGNED(8, uint8_t, left_border[17+2*9]);
nengel@2 348 int8_t intra4x4_pred_mode_left[4];
nengel@2 349 #endif
nengel@2 350
nengel@2 351 } H264Mb;
nengel@2 352
nengel@2 353 typedef struct RawFrame {
nengel@2 354 uint8_t *data;
nengel@2 355 int size;
nengel@2 356 unsigned int data_size;
nengel@2 357 int64_t pos; ///< byte position in stream, -1 if unknown
nengel@2 358 int state;
nengel@2 359 } RawFrame;
nengel@2 360
nengel@2 361 typedef struct PictureInfo{
nengel@2 362 int ref_poc[2][16]; ///< h264 POCs of the frames used as reference
nengel@2 363 int ref_count[2]; ///< number of entries in ref_poc
nengel@2 364 int poc; ///< h264 frame POC
nengel@2 365 int frame_num; ///< h264 frame_num (raw frame_num from slice header)
nengel@2 366 int pic_id;
nengel@2 367 int long_ref;
nengel@2 368 int cpn; ///coded picture number
nengel@2 369 int slice_type_nos;
nengel@2 370 // int key_frame;
nengel@2 371 // int mmco_reset; ///< h264 MMCO_RESET set this 1. Reordering code must not mix pictures before and after MMCO_RESET.
nengel@2 372
nengel@2 373 int reference; //Set to 4 for delayed, non-reference frames. 1-3 for reference. FIXME
nengel@2 374
nengel@2 375 }PictureInfo;
nengel@2 376
nengel@2 377 typedef struct DecodedPicture{
nengel@2 378 int16_t (*motion_val[2])[2];
nengel@2 379 int16_t (*motion_val_base[2])[2];
nengel@2 380
nengel@2 381 /**
nengel@2 382 * motion reference frame index
nengel@2 383 * the order in which these are stored can depend on the codec.
nengel@2 384 * - encoding: Set by user.
nengel@2 385 * - decoding: Set by libavcodec.
nengel@2 386 */
nengel@2 387 int8_t *ref_index[2];
nengel@2 388 uint32_t *mb_type; //mb_type_base + mb_width + 2
nengel@2 389 uint32_t *mb_type_base;
nengel@2 390
nengel@2 391 int8_t *intra4x4_pred_mode;
nengel@2 392 int8_t *non_zero_count;
nengel@2 393
nengel@2 394 uint8_t *data[3]; //point to first pixel in the frame
nengel@2 395 int linesize[3];
nengel@2 396 uint8_t *base[3]; //base of picture planes
nengel@2 397
nengel@2 398 int cpn; /// coded picture number
nengel@2 399 int poc; ///< h264 frame POC
nengel@2 400 int reference; // 0 -> free, 1 -> needs to be displayed, 2 -> needed for reference, 3 -> 1 && 2
nengel@2 401 int key_frame;
nengel@2 402 int mmco_reset; ///< h264 MMCO_RESET set this 1. Reordering code must not mix pictures before and after MMCO_RESET.
nengel@2 403
nengel@2 404 } DecodedPicture;
nengel@2 405
nengel@2 406
nengel@2 407 #endif /* AVCODEC_AVCODEC_H */