FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | 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.

Data Structures

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. More...
 
#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. More...
 
#define LUMA_DC_BLOCK_INDEX   48
 
#define CHROMA_DC_BLOCK_INDEX   49
 
#define SLICE_SINGLETHREAD   1
 
#define SLICE_SKIPED   2
 

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. More...
 

Functions

int ff_h264_get_slice_type (const H264SliceContext *sl)
 Reconstruct bitstream slice_type. More...
 
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). More...
 
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)
 
int ff_h264_decode_init (AVCodecContext *avctx)
 
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)
 
static av_always_inline uint32_t pack16to32 (unsigned a, unsigned b)
 
static av_always_inline uint16_t pack8to16 (unsigned a, unsigned b)
 
static av_always_inline int get_chroma_qp (const PPS *pps, int t, int qscale)
 Get the chroma qp. More...
 
static av_always_inline int pred_intra_mode (const H264Context *h, H264SliceContext *sl, int n)
 Get the predicted intra4x4 prediction mode. More...
 
static av_always_inline void write_back_intra_pred_mode (const H264Context *h, H264SliceContext *sl)
 
static av_always_inline void write_back_non_zero_count (const H264Context *h, H264SliceContext *sl)
 
static av_always_inline void write_back_motion_list (const H264Context *h, H264SliceContext *sl, int b_stride, int b_xy, int b8_xy, int mb_type, int list)
 
static av_always_inline void write_back_motion (const H264Context *h, H264SliceContext *sl, int mb_type)
 
static av_always_inline int get_dct8x8_allowed (const H264Context *h, H264SliceContext *sl)
 
static int find_start_code (const uint8_t *buf, int buf_size, int buf_index, int next_avc)
 
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. More...
 
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)
 Decode a slice header. More...
 
int ff_h264_execute_decode_slices (H264Context *h, unsigned context_count)
 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]
 
static const uint8_t scan8 [16 *3+3]
 

Detailed Description

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

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

Definition in file h264dec.h.

Macro Definition Documentation

#define H264_MAX_PICTURE_COUNT   36
#define MAX_MMCO_COUNT   66

Definition at line 54 of file h264dec.h.

Referenced by ff_h264_decode_ref_pic_marking(), and scan_mmco_reset().

#define MAX_DELAYED_PIC_COUNT   16
#define ALLOW_INTERLACE

Definition at line 60 of file h264dec.h.

#define FMO   0

Definition at line 62 of file h264dec.h.

Referenced by ff_h264_alloc_tables(), fill_decode_neighbors(), and write_back_motion_list().

#define MAX_SLICES   32

The maximum number of slices supported by the decoder.

must be a power of 2

Definition at line 68 of file h264dec.h.

#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

Definition at line 75 of file h264dec.h.

Referenced by fill_decode_caches(), fill_decode_neighbors(), and fill_filter_caches().

#define LTOP   0
#define LBOT   1

Definition at line 77 of file h264dec.h.

Referenced by fill_decode_caches(), fill_decode_neighbors(), and fill_filter_caches().

#define LEFT (   i)    (i)

Definition at line 78 of file h264dec.h.

#define FIELD_OR_MBAFF_PICTURE (   h)    (FRAME_MBAFF(h) || FIELD_PICTURE(h))
#define CABAC (   h)    (h)->ps.pps->cabac

Definition at line 94 of file h264dec.h.

Referenced by write_back_motion(), and write_back_motion_list().

#define CHROMA (   h)    ((h)->ps.sps->chroma_format_idc)

Definition at line 97 of file h264dec.h.

#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

Definition at line 101 of file h264dec.h.

#define MB_TYPE_8x8DCT   0x01000000

Definition at line 102 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

#define IS_REF0 (   a)    ((a) & MB_TYPE_REF0)

Definition at line 103 of file h264dec.h.

Referenced by ff_h264_decode_mb_cavlc().

#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.

Definition at line 533 of file h264dec.h.

Referenced by h264_field_start().

#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.

Definition at line 538 of file h264dec.h.

Referenced by decode_postinit(), and ff_h264_execute_ref_pic_marking().

#define LUMA_DC_BLOCK_INDEX   48
#define CHROMA_DC_BLOCK_INDEX   49
#define SLICE_SINGLETHREAD   1

Definition at line 849 of file h264dec.h.

Referenced by decode_nal_units(), and ff_h264_decode_slice_header().

#define SLICE_SKIPED   2

Definition at line 850 of file h264dec.h.

Referenced by decode_nal_units(), and ff_h264_decode_slice_header().

Enumeration Type Documentation

enum MMCOOpcode

Memory management control operation opcode.

Enumerator
MMCO_END 
MMCO_SHORT2UNUSED 
MMCO_LONG2UNUSED 
MMCO_SHORT2LONG 
MMCO_SET_MAX_LONG 
MMCO_RESET 
MMCO_LONG 

Definition at line 109 of file h264dec.h.

Function Documentation

int ff_h264_get_slice_type ( const H264SliceContext sl)

Reconstruct bitstream slice_type.

Definition at line 2001 of file h264_slice.c.

Referenced by fill_slice_long(), and vaapi_h264_decode_slice().

int ff_h264_alloc_tables ( H264Context h)

Allocate tables.

needs width/height

Definition at line 182 of file h264dec.c.

Referenced by h264_slice_header_init().

int ff_h264_decode_ref_pic_list_reordering ( H264SliceContext sl,
void logctx 
)

Definition at line 421 of file h264_refs.c.

Referenced by h264_slice_header_parse().

int ff_h264_build_ref_list ( H264Context h,
H264SliceContext sl 
)

Definition at line 299 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header().

void ff_h264_remove_all_refs ( H264Context h)

Definition at line 563 of file h264_refs.c.

Referenced by h264_decode_end(), and idr().

int ff_h264_execute_ref_pic_marking ( H264Context h)

Execute the reference picture marking (memory management control operations).

Definition at line 609 of file h264_refs.c.

Referenced by ff_h264_field_end(), ff_h264_update_thread_context(), and h264_field_start().

int ff_h264_decode_ref_pic_marking ( H264SliceContext sl,
GetBitContext gb,
const H2645NAL nal,
void logctx 
)

Definition at line 824 of file h264_refs.c.

Referenced by h264_slice_header_parse().

void ff_h264_hl_decode_mb ( const H264Context h,
H264SliceContext sl 
)

Definition at line 799 of file h264_mb.c.

Referenced by decode_slice(), and h264_er_decode_mb().

int ff_h264_decode_init ( AVCodecContext avctx)

Definition at line 394 of file h264dec.c.

void ff_h264_decode_init_vlc ( void  )

Definition at line 327 of file h264_cavlc.c.

Referenced by ff_h264_decode_init().

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

Definition at line 702 of file h264_cavlc.c.

Referenced by decode_slice().

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

Definition at line 1914 of file h264_cabac.c.

Referenced by decode_slice().

void ff_h264_init_cabac_states ( const H264Context h,
H264SliceContext sl 
)

Definition at line 1263 of file h264_cabac.c.

Referenced by decode_slice().

void ff_h264_direct_dist_scale_factor ( const H264Context *const  h,
H264SliceContext sl 
)

Definition at line 52 of file h264_direct.c.

Referenced by ff_h264_decode_slice_header().

void ff_h264_direct_ref_list_init ( const H264Context *const  h,
H264SliceContext sl 
)

Definition at line 111 of file h264_direct.c.

Referenced by ff_h264_decode_slice_header().

void ff_h264_pred_direct_motion ( const H264Context *const  h,
H264SliceContext sl,
int *  mb_type 
)

Definition at line 707 of file h264_direct.c.

Referenced by decode_mb_skip(), ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

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 
)

Definition at line 418 of file h264_loopfilter.c.

Referenced by loop_filter().

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 
)

Definition at line 718 of file h264_loopfilter.c.

Referenced by ff_h264_filter_mb_fast(), and loop_filter().

static av_always_inline uint32_t pack16to32 ( unsigned  a,
unsigned  b 
)
static
static av_always_inline uint16_t pack8to16 ( unsigned  a,
unsigned  b 
)
static

Definition at line 681 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac().

static av_always_inline int get_chroma_qp ( const PPS pps,
int  t,
int  qscale 
)
static
static av_always_inline int pred_intra_mode ( const H264Context h,
H264SliceContext sl,
int  n 
)
static

Get the predicted intra4x4 prediction mode.

Definition at line 701 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

static av_always_inline void write_back_intra_pred_mode ( const H264Context h,
H264SliceContext sl 
)
static

Definition at line 717 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

static av_always_inline void write_back_non_zero_count ( const H264Context h,
H264SliceContext sl 
)
static

Definition at line 729 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

static av_always_inline void write_back_motion_list ( const H264Context h,
H264SliceContext sl,
int  b_stride,
int  b_xy,
int  b8_xy,
int  mb_type,
int  list 
)
static

Definition at line 753 of file h264dec.h.

Referenced by write_back_motion().

static av_always_inline void write_back_motion ( const H264Context h,
H264SliceContext sl,
int  mb_type 
)
static

Definition at line 789 of file h264dec.h.

Referenced by decode_mb_skip(), ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

static av_always_inline int get_dct8x8_allowed ( const H264Context h,
H264SliceContext sl 
)
static

Definition at line 816 of file h264dec.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

static int find_start_code ( const uint8_t buf,
int  buf_size,
int  buf_index,
int  next_avc 
)
inlinestatic

Definition at line 828 of file h264dec.h.

Referenced by parse_nal_units().

int ff_h264_field_end ( H264Context h,
H264SliceContext sl,
int  in_setup 
)

Definition at line 153 of file h264_picture.c.

Referenced by ff_h264_decode_slice_header(), and h264_decode_frame().

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.

Definition at line 240 of file h264dec.c.

Referenced by h264_slice_header_init().

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 
)

Decode a slice header.

This will (re)initialize the decoder and call h264_frame_start() as needed.

Parameters
hh264context
Returns
0 if okay, <0 if an error occurred

Definition at line 1763 of file h264_slice.c.

Referenced by decode_nal_units().

int ff_h264_execute_decode_slices ( H264Context h,
unsigned  context_count 
)

Call decode_slice() for each context.

Parameters
hh264 master context
context_countnumber of contexts to execute

Definition at line 2588 of file h264_slice.c.

Referenced by decode_nal_units().

int ff_h264_update_thread_context ( AVCodecContext dst,
const AVCodecContext src 
)

Definition at line 301 of file h264_slice.c.

void ff_h264_flush_change ( H264Context h)

Definition at line 609 of file h264dec.c.

Referenced by ff_h264_decode_init(), flush_dpb(), and h264_init_ps().

void ff_h264_free_tables ( H264Context h)
void ff_h264_set_erpic ( ERPicture dst,
H264Picture src 
)

Definition at line 130 of file h264_picture.c.

Referenced by decode_nal_units(), and h264_frame_start().

Variable Documentation

const uint16_t ff_h264_mb_sizes[4]

Definition at line 60 of file h264dec.c.

Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), and hl_decode_mb().

const uint8_t scan8[16 *3+3]
static
Initial value:
= {
4 + 1 * 8, 5 + 1 * 8, 4 + 2 * 8, 5 + 2 * 8,
6 + 1 * 8, 7 + 1 * 8, 6 + 2 * 8, 7 + 2 * 8,
4 + 3 * 8, 5 + 3 * 8, 4 + 4 * 8, 5 + 4 * 8,
6 + 3 * 8, 7 + 3 * 8, 6 + 4 * 8, 7 + 4 * 8,
4 + 6 * 8, 5 + 6 * 8, 4 + 7 * 8, 5 + 7 * 8,
6 + 6 * 8, 7 + 6 * 8, 6 + 7 * 8, 7 + 7 * 8,
4 + 8 * 8, 5 + 8 * 8, 4 + 9 * 8, 5 + 9 * 8,
6 + 8 * 8, 7 + 8 * 8, 6 + 9 * 8, 7 + 9 * 8,
4 + 11 * 8, 5 + 11 * 8, 4 + 12 * 8, 5 + 12 * 8,
6 + 11 * 8, 7 + 11 * 8, 6 + 12 * 8, 7 + 12 * 8,
4 + 13 * 8, 5 + 13 * 8, 4 + 14 * 8, 5 + 14 * 8,
6 + 13 * 8, 7 + 13 * 8, 6 + 14 * 8, 7 + 14 * 8,
0 + 0 * 8, 0 + 5 * 8, 0 + 10 * 8
}

Definition at line 656 of file h264dec.h.

Referenced by decode_cabac_luma_residual(), decode_cabac_mb_ref(), decode_cabac_residual_dc(), decode_cabac_residual_dc_422(), decode_cabac_residual_internal(), decode_cabac_residual_nondc(), decode_luma_residual(), decode_residual(), decode_slice(), fetch_diagonal_mv(), ff_h264_check_intra4x4_pred_mode(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_idct8_add4(), ff_h264_idct8_add4_8_mmi(), ff_h264_idct8_add4_msa(), ff_h264_idct_add16(), ff_h264_idct_add16_8_mmi(), ff_h264_idct_add16_intra_msa(), ff_h264_idct_add16_msa(), ff_h264_idct_add16intra(), ff_h264_idct_add16intra_8_mmi(), ff_h264_idct_add8(), ff_h264_idct_add8_422(), ff_h264_idct_add8_422_8_mmi(), ff_h264_idct_add8_422_msa(), ff_h264_idct_add8_8_mmi(), ff_h264_idct_add8_msa(), ff_h264_slice_context_init(), fill_decode_caches(), fill_filter_caches(), fill_filter_caches_inter(), filter_mb_dir(), get_cabac_cbf_ctx(), get_lowest_part_list_y(), get_lowest_part_y(), h264_er_decode_mb(), h264_frame_start(), hl_decode_mb(), hl_decode_mb_444(), hl_decode_mb_idct_luma(), hl_decode_mb_predict_luma(), mc_dir_part(), mc_part(), mc_part_std(), mc_part_weighted(), pred_16x8_motion(), pred_8x16_motion(), pred_intra_mode(), pred_motion(), pred_non_zero_count(), pred_pskip_motion(), pred_spatial_direct_motion(), pred_temp_direct_motion(), prefetch_motion(), svq3_decode_frame(), svq3_decode_mb(), svq3_mc_dir(), svq3_pred_motion(), and write_back_motion_list().