FFmpeg
Classes | Macros | Typedefs | Enumerations | Functions | Variables
h264dec.h File Reference

H.264 / AVC / MPEG-4 part10 codec. More...

#include "libavutil/buffer.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/thread.h"
#include "cabac.h"
#include "error_resilience.h"
#include "h264_parse.h"
#include "h264_ps.h"
#include "h264_sei.h"
#include "h2645_parse.h"
#include "h264chroma.h"
#include "h264dsp.h"
#include "h264pred.h"
#include "h264qpel.h"
#include "internal.h"
#include "mpegutils.h"
#include "parser.h"
#include "qpeldsp.h"
#include "rectangle.h"
#include "videodsp.h"

Go to the source code of this file.

Classes

struct  MMCO
 Memory management control operation. More...
 
struct  H264Picture
 
struct  H264Ref
 
struct  H264SliceContext
 
struct  H264Context
 H264Context. More...
 

Macros

#define H264_MAX_PICTURE_COUNT   36
 
#define MAX_MMCO_COUNT   66
 
#define MAX_DELAYED_PIC_COUNT   16
 
#define ALLOW_INTERLACE
 
#define FMO   0
 
#define MAX_SLICES   32
 The maximum number of slices supported by the decoder. More...
 
#define MB_MBAFF(h)   (h)->mb_mbaff
 
#define MB_FIELD(sl)   (sl)->mb_field_decoding_flag
 
#define FRAME_MBAFF(h)   (h)->mb_aff_frame
 
#define FIELD_PICTURE(h)   ((h)->picture_structure != PICT_FRAME)
 
#define LEFT_MBS   2
 
#define LTOP   0
 
#define LBOT   1
 
#define LEFT(i)   (i)
 
#define FIELD_OR_MBAFF_PICTURE(h)   (FRAME_MBAFF(h) || FIELD_PICTURE(h))
 
#define CABAC(h)   (h)->ps.pps->cabac
 
#define CHROMA(h)   ((h)->ps.sps->chroma_format_idc)
 
#define CHROMA422(h)   ((h)->ps.sps->chroma_format_idc == 2)
 
#define CHROMA444(h)   ((h)->ps.sps->chroma_format_idc == 3)
 
#define MB_TYPE_REF0   MB_TYPE_ACPRED
 
#define MB_TYPE_8x8DCT   0x01000000
 
#define IS_REF0(a)   ((a) & MB_TYPE_REF0)
 
#define IS_8x8DCT(a)   ((a) & MB_TYPE_8x8DCT)
 
#define LIST_NOT_USED   -1
 
#define PART_NOT_AVAILABLE   -2
 
#define FRAME_RECOVERED_IDR   (1 << 0)
 We have seen an IDR, so all the following frames in coded order are correctly decodable.
 
#define FRAME_RECOVERED_SEI   (1 << 1)
 Sufficient number of frames have been decoded since a SEI recovery point, so all the following frames in presentation order are correct.
 
#define LUMA_DC_BLOCK_INDEX   48
 
#define CHROMA_DC_BLOCK_INDEX   49
 

Typedefs

typedef enum MMCOOpcode MMCOOpcode
 Memory management control operation opcode.
 
typedef struct MMCO MMCO
 Memory management control operation.
 
typedef struct H264Picture H264Picture
 
typedef struct H264Ref H264Ref
 
typedef struct H264SliceContext H264SliceContext
 
typedef struct H264Context H264Context
 H264Context.
 

Enumerations

enum  MMCOOpcode {
  MMCO_END = 0, MMCO_SHORT2UNUSED, MMCO_LONG2UNUSED, MMCO_SHORT2LONG,
  MMCO_SET_MAX_LONG, MMCO_RESET, MMCO_LONG
}
 Memory management control operation opcode.
 

Functions

int ff_h264_get_slice_type (const H264SliceContext *sl)
 Reconstruct bitstream slice_type.
 
int ff_h264_alloc_tables (H264Context *h)
 Allocate tables. More...
 
int ff_h264_decode_ref_pic_list_reordering (H264SliceContext *sl, void *logctx)
 
int ff_h264_build_ref_list (H264Context *h, H264SliceContext *sl)
 
void ff_h264_remove_all_refs (H264Context *h)
 
int ff_h264_execute_ref_pic_marking (H264Context *h)
 Execute the reference picture marking (memory management control operations).
 
int ff_h264_decode_ref_pic_marking (H264SliceContext *sl, GetBitContext *gb, const H2645NAL *nal, void *logctx)
 
void ff_h264_hl_decode_mb (const H264Context *h, H264SliceContext *sl)
 
void ff_h264_decode_init_vlc (void)
 
int ff_h264_decode_mb_cavlc (const H264Context *h, H264SliceContext *sl)
 Decode a macroblock. More...
 
int ff_h264_decode_mb_cabac (const H264Context *h, H264SliceContext *sl)
 Decode a CABAC coded macroblock. More...
 
void ff_h264_init_cabac_states (const H264Context *h, H264SliceContext *sl)
 
void ff_h264_direct_dist_scale_factor (const H264Context *const h, H264SliceContext *sl)
 
void ff_h264_direct_ref_list_init (const H264Context *const h, H264SliceContext *sl)
 
void ff_h264_pred_direct_motion (const H264Context *const h, H264SliceContext *sl, int *mb_type)
 
void ff_h264_filter_mb_fast (const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
 
void ff_h264_filter_mb (const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
 
int ff_h264_field_end (H264Context *h, H264SliceContext *sl, int in_setup)
 
int ff_h264_ref_picture (H264Context *h, H264Picture *dst, H264Picture *src)
 
void ff_h264_unref_picture (H264Context *h, H264Picture *pic)
 
int ff_h264_slice_context_init (H264Context *h, H264SliceContext *sl)
 Init context Allocate buffers which are not shared amongst multiple threads.
 
void ff_h264_draw_horiz_band (const H264Context *h, H264SliceContext *sl, int y, int height)
 
int ff_h264_decode_slice_header (H264Context *h, H264SliceContext *sl, const H2645NAL *nal)
 
int ff_h264_queue_decode_slice (H264Context *h, const H2645NAL *nal)
 Submit a slice for decoding. More...
 
int ff_h264_execute_decode_slices (H264Context *h)
 Call decode_slice() for each context. More...
 
int ff_h264_update_thread_context (AVCodecContext *dst, const AVCodecContext *src)
 
void ff_h264_flush_change (H264Context *h)
 
void ff_h264_free_tables (H264Context *h)
 
void ff_h264_set_erpic (ERPicture *dst, H264Picture *src)
 

Variables

const uint16_t ff_h264_mb_sizes [4]
 

Detailed Description

H.264 / AVC / MPEG-4 part10 codec.

Author
Michael Niedermayer micha.nosp@m.elni.nosp@m.@gmx..nosp@m.at

Macro Definition Documentation

§ MAX_SLICES

#define MAX_SLICES   32

The maximum number of slices supported by the decoder.

must be a power of 2

Function Documentation

§ ff_h264_alloc_tables()

int ff_h264_alloc_tables ( H264Context h)

Allocate tables.

needs width/height

§ ff_h264_decode_mb_cabac()

int ff_h264_decode_mb_cabac ( const H264Context h,
H264SliceContext sl 
)

Decode a CABAC coded macroblock.

Returns
0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error

Decode a CABAC coded macroblock.

Returns
0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed

§ ff_h264_decode_mb_cavlc()

int ff_h264_decode_mb_cavlc ( const H264Context h,
H264SliceContext sl 
)

Decode a macroblock.

Returns
0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error

§ ff_h264_execute_decode_slices()

int ff_h264_execute_decode_slices ( H264Context h)

Call decode_slice() for each context.

Parameters
hh264 master context

§ ff_h264_queue_decode_slice()

int ff_h264_queue_decode_slice ( H264Context h,
const H2645NAL nal 
)

Submit a slice for decoding.

Parse the slice header, starting a new field/frame if necessary. If any slices are queued for the previous field, they are decoded.