FFmpeg
Loading...
Searching...
No Matches
h264dec.h File Reference

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

#include "libavutil/mem_internal.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 "mpegutils.h"
#include "threadframe.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 ALLOW_INTERLACE
 
#define FMO   0
 
#define MAX_SLICES   32
 The maximum number of slices supported by the decoder.
 
#define MB_MBAFF(h)
 
#define MB_FIELD(sl)
 
#define FRAME_MBAFF(h)
 
#define FIELD_PICTURE(h)
 
#define LEFT_MBS   2
 
#define LTOP   0
 
#define LBOT   1
 
#define LEFT(i)
 
#define FIELD_OR_MBAFF_PICTURE(h)
 
#define CABAC(h)
 
#define CHROMA(h)
 
#define CHROMA422(h)
 
#define CHROMA444(h)
 
#define IS_REF0(a)
 
#define IS_8x8DCT(a)
 
#define IS_SUB_8X8(a)
 
#define IS_SUB_8X4(a)
 
#define IS_SUB_4X8(a)
 
#define IS_SUB_4X4(a)
 
#define IS_DIR(a, part, list)
 
#define USES_LIST(a, list)
 
#define DELAYED_PIC_REF   (1 << 2)
 H264Picture.reference has this flag set, when the picture is held for delayed output.
 
#define LIST_NOT_USED   -1
 
#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 FRAME_RECOVERED_HEURISTIC   (1 << 2)
 Recovery point detected by heuristic.
 
#define LUMA_DC_BLOCK_INDEX   48
 
#define CHROMA_DC_BLOCK_INDEX   49
 

Functions

int ff_h264_get_slice_type (const H264SliceContext *sl)
 Reconstruct bitstream slice_type.
 
int ff_h264_alloc_tables (H264Context *h)
 Allocate tables.
 
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.
 
int ff_h264_decode_mb_cabac (const H264Context *h, H264SliceContext *sl)
 Decode a CABAC coded macroblock.
 
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 int get_chroma_qp (const PPS *pps, int t, int qscale)
 Get the chroma qp.
 
static int ff_h264_skip_all_pixels (const AVCodecContext *avctx)
 
int ff_h264_field_end (H264Context *h, H264SliceContext *sl, int in_setup)
 
int ff_h264_ref_picture (H264Picture *dst, const H264Picture *src)
 
int ff_h264_replace_picture (H264Picture *dst, const H264Picture *src)
 
void ff_h264_unref_picture (H264Picture *pic)
 
void ff_h264_slice_context_init (H264Context *h, H264SliceContext *sl)
 Init slice context.
 
void ff_h264_draw_horiz_band (const H264Context *h, H264SliceContext *sl, int y, int height)
 
int ff_h264_queue_decode_slice (H264Context *h, const H2645NAL *nal, H264SliceContext **queued)
 Submit a slice for decoding.
 
int ff_h264_attach_slice_partition (const H264Context *h, H264SliceContext *sl, const H2645NAL *nal)
 Attach a slice data partition B or C to the slice started by partition A.
 
int ff_h264_execute_decode_slices (H264Context *h)
 Call decode_slice() for each context.
 
int ff_h264_update_thread_context (AVCodecContext *dst, const AVCodecContext *src)
 
int ff_h264_update_thread_context_for_user (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, const 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

Definition in file h264dec.h.

Macro Definition Documentation

◆ H264_MAX_PICTURE_COUNT

◆ ALLOW_INTERLACE

#define ALLOW_INTERLACE

Definition at line 51 of file h264dec.h.

◆ FMO

#define FMO   0

Definition at line 53 of file h264dec.h.

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

◆ MAX_SLICES

#define MAX_SLICES   32

The maximum number of slices supported by the decoder.

must be a power of 2

Definition at line 59 of file h264dec.h.

◆ MB_MBAFF

#define MB_MBAFF ( h)

◆ MB_FIELD

◆ FRAME_MBAFF

◆ FIELD_PICTURE

◆ LEFT_MBS

#define LEFT_MBS   2

◆ LTOP

◆ LBOT

#define LBOT   1

Definition at line 68 of file h264dec.h.

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

◆ LEFT

#define LEFT ( i)
Value:
(i)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63

Definition at line 69 of file h264dec.h.

◆ FIELD_OR_MBAFF_PICTURE

#define FIELD_OR_MBAFF_PICTURE ( h)
Value:
#define FIELD_PICTURE(h)
Definition h264dec.h:65
#define FRAME_MBAFF(h)
Definition h264dec.h:64

Definition at line 82 of file h264dec.h.

Referenced by decode_slice(), ff_h264_execute_decode_slices(), fill_slice_long(), h264_export_frame_props(), h264_slice_init(), and vaapi_h264_decode_slice().

◆ CABAC

#define CABAC ( h)
Value:
(h)->ps.pps->cabac

Definition at line 85 of file h264dec.h.

◆ CHROMA

◆ CHROMA422

#define CHROMA422 ( h)

◆ CHROMA444

◆ IS_REF0

#define IS_REF0 ( a)
Value:
#define MB_TYPE_REF0
Definition h264_parse.h:36
int a

Definition at line 92 of file h264dec.h.

Referenced by ff_h264_decode_mb_cavlc().

◆ IS_8x8DCT

◆ IS_SUB_8X8

#define IS_SUB_8X8 ( a)

◆ IS_SUB_8X4

#define IS_SUB_8X4 ( a)
Value:
#define MB_TYPE_16x8
Definition mpegutils.h:42

Definition at line 95 of file h264dec.h.

Referenced by await_references(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), and hl_motion().

◆ IS_SUB_4X8

#define IS_SUB_4X8 ( a)
Value:
#define MB_TYPE_8x16
Definition mpegutils.h:43

Definition at line 96 of file h264dec.h.

Referenced by await_references(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), and hl_motion().

◆ IS_SUB_4X4

#define IS_SUB_4X4 ( a)
Value:
#define MB_TYPE_8x8
Definition mpegutils.h:44

Definition at line 97 of file h264dec.h.

Referenced by await_references(), and hl_motion().

◆ IS_DIR

#define IS_DIR ( a,
part,
list )
Value:
((a) & (MB_TYPE_P0L0 << ((part) + 2 * (list))))
#define MB_TYPE_P0L0
Definition mpegutils.h:53

Definition at line 98 of file h264dec.h.

Referenced by await_references(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), and hl_motion().

◆ USES_LIST

#define USES_LIST ( a,
list )
Value:
((a) & ((MB_TYPE_P0L0 | MB_TYPE_P1L0) << (2 * (list))))
#define MB_TYPE_P1L0
Definition mpegutils.h:54

Definition at line 101 of file h264dec.h.

Referenced by fill_decode_caches(), fill_filter_caches_inter(), hl_decode_mb(), hl_decode_mb_444(), hl_motion(), pred_pskip_motion(), and write_back_motion().

◆ DELAYED_PIC_REF

#define DELAYED_PIC_REF   (1 << 2)

H264Picture.reference has this flag set, when the picture is held for delayed output.

Definition at line 149 of file h264dec.h.

◆ LIST_NOT_USED

◆ FRAME_RECOVERED_IDR

#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 531 of file h264dec.h.

Referenced by h264_field_start().

◆ FRAME_RECOVERED_SEI

#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 536 of file h264dec.h.

Referenced by h264_field_start(), h264_select_output_frame(), and send_next_delayed_frame().

◆ FRAME_RECOVERED_HEURISTIC

#define FRAME_RECOVERED_HEURISTIC   (1 << 2)

Recovery point detected by heuristic.

Definition at line 540 of file h264dec.h.

Referenced by ff_h264_execute_ref_pic_marking().

◆ LUMA_DC_BLOCK_INDEX

◆ CHROMA_DC_BLOCK_INDEX

#define CHROMA_DC_BLOCK_INDEX   49

Function Documentation

◆ ff_h264_get_slice_type()

int ff_h264_get_slice_type ( const H264SliceContext * sl)

Reconstruct bitstream slice_type.

Definition at line 2296 of file h264_slice.c.

Referenced by fill_slice_long(), and vaapi_h264_decode_slice().

◆ ff_h264_alloc_tables()

int ff_h264_alloc_tables ( H264Context * h)

Allocate tables.

needs width/height

Definition at line 187 of file h264dec.c.

Referenced by h264_slice_header_init().

◆ ff_h264_decode_ref_pic_list_reordering()

int ff_h264_decode_ref_pic_list_reordering ( H264SliceContext * sl,
void * logctx )

Definition at line 431 of file h264_refs.c.

Referenced by h264_slice_header_parse().

◆ ff_h264_build_ref_list()

int ff_h264_build_ref_list ( H264Context * h,
H264SliceContext * sl )

Definition at line 292 of file h264_refs.c.

Referenced by h264_slice_init().

◆ ff_h264_remove_all_refs()

void ff_h264_remove_all_refs ( H264Context * h)

Definition at line 568 of file h264_refs.c.

Referenced by h264_decode_end(), and idr().

◆ ff_h264_execute_ref_pic_marking()

int ff_h264_execute_ref_pic_marking ( H264Context * h)

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

Definition at line 610 of file h264_refs.c.

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

◆ ff_h264_decode_ref_pic_marking()

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

Definition at line 832 of file h264_refs.c.

Referenced by h264_slice_header_parse().

◆ ff_h264_hl_decode_mb()

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

Definition at line 800 of file h264_mb.c.

Referenced by decode_slice(), and h264_er_decode_mb().

◆ ff_h264_decode_init_vlc()

void ff_h264_decode_init_vlc ( void )

Definition at line 315 of file h264_cavlc.c.

Referenced by h264_decode_init().

◆ 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

Definition at line 682 of file h264_cavlc.c.

Referenced by decode_slice().

◆ 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

Definition at line 1920 of file h264_cabac.c.

Referenced by decode_slice().

◆ ff_h264_init_cabac_states()

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

Definition at line 1262 of file h264_cabac.c.

Referenced by decode_slice().

◆ ff_h264_direct_dist_scale_factor()

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

Definition at line 61 of file h264_direct.c.

Referenced by h264_slice_init().

◆ ff_h264_direct_ref_list_init()

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

Definition at line 120 of file h264_direct.c.

Referenced by h264_slice_init().

◆ ff_h264_pred_direct_motion()

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

Definition at line 731 of file h264_direct.c.

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

◆ ff_h264_filter_mb_fast()

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 416 of file h264_loopfilter.c.

Referenced by loop_filter().

◆ ff_h264_filter_mb()

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 716 of file h264_loopfilter.c.

Referenced by ff_h264_filter_mb_fast(), and loop_filter().

◆ get_chroma_qp()

static av_always_inline int get_chroma_qp ( const PPS * pps,
int t,
int qscale )
static

◆ ff_h264_skip_all_pixels()

static int ff_h264_skip_all_pixels ( const AVCodecContext * avctx)
inlinestatic

◆ ff_h264_field_end()

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

Definition at line 189 of file h264_picture.c.

Referenced by ff_h264_queue_decode_slice(), and h264_decode_frame().

◆ ff_h264_ref_picture()

int ff_h264_ref_picture ( H264Picture * dst,
const H264Picture * src )

Definition at line 108 of file h264_picture.c.

Referenced by ff_h264_remove_all_refs(), and h264_frame_start().

◆ ff_h264_replace_picture()

int ff_h264_replace_picture ( H264Picture * dst,
const H264Picture * src )

Definition at line 135 of file h264_picture.c.

Referenced by ff_h264_update_thread_context().

◆ ff_h264_unref_picture()

◆ ff_h264_slice_context_init()

void ff_h264_slice_context_init ( H264Context * h,
H264SliceContext * sl )

Init slice context.

Definition at line 264 of file h264dec.c.

Referenced by h264_slice_header_init().

◆ ff_h264_draw_horiz_band()

void ff_h264_draw_horiz_band ( const H264Context * h,
H264SliceContext * sl,
int y,
int height )

◆ ff_h264_queue_decode_slice()

int ff_h264_queue_decode_slice ( H264Context * h,
const H2645NAL * nal,
H264SliceContext ** queued )

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.

Parameters
queuedset to the queued context, or NULL if the slice was discarded

Definition at line 2158 of file h264_slice.c.

Referenced by decode_nal_units().

◆ ff_h264_attach_slice_partition()

int ff_h264_attach_slice_partition ( const H264Context * h,
H264SliceContext * sl,
const H2645NAL * nal )

Attach a slice data partition B or C to the slice started by partition A.

Definition at line 2117 of file h264_slice.c.

Referenced by h264_attach_partitions().

◆ ff_h264_execute_decode_slices()

int ff_h264_execute_decode_slices ( H264Context * h)

Call decode_slice() for each context.

Parameters
hh264 master context

Definition at line 2878 of file h264_slice.c.

Referenced by decode_nal_units(), and ff_h264_queue_decode_slice().

◆ ff_h264_update_thread_context()

int ff_h264_update_thread_context ( AVCodecContext * dst,
const AVCodecContext * src )

Definition at line 339 of file h264_slice.c.

◆ ff_h264_update_thread_context_for_user()

int ff_h264_update_thread_context_for_user ( AVCodecContext * dst,
const AVCodecContext * src )

Definition at line 472 of file h264_slice.c.

◆ ff_h264_flush_change()

void ff_h264_flush_change ( H264Context * h)

Definition at line 451 of file h264dec.c.

Referenced by h264_decode_flush(), h264_decode_init(), and h264_init_ps().

◆ ff_h264_free_tables()

void ff_h264_free_tables ( H264Context * h)

Definition at line 142 of file h264dec.c.

Referenced by h264_decode_end(), h264_decode_flush(), and h264_slice_header_init().

◆ ff_h264_set_erpic()

void ff_h264_set_erpic ( ERPicture * dst,
const H264Picture * src )

Definition at line 166 of file h264_picture.c.

Referenced by decode_nal_units(), h264_field_start(), and h264_frame_start().

Variable Documentation

◆ ff_h264_mb_sizes

const uint16_t ff_h264_mb_sizes[4]
extern

Definition at line 60 of file h264dec.c.

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