libavcodec/h264.c File Reference

H.264 / AVC / MPEG4 part10 codec. More...

#include "libavutil/imgutils.h"
#include "internal.h"
#include "dsputil.h"
#include "avcodec.h"
#include "mpegvideo.h"
#include "h264.h"
#include "h264data.h"
#include "h264_mvpred.h"
#include "golomb.h"
#include "mathops.h"
#include "rectangle.h"
#include "vdpau_internal.h"
#include "libavutil/avassert.h"
#include "cabac.h"
#include <assert.h>

Go to the source code of this file.

Defines

#define RS   0
#define XCHG(a, b, xchg)
#define T(x)   (x>>2) | ((x<<2) & 0xF)
#define T(x)   (x>>3) | ((x&7)<<3)

Functions

void ff_h264_write_back_intra_pred_mode (H264Context *h)
int ff_h264_check_intra4x4_pred_mode (H264Context *h)
 checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.
int ff_h264_check_intra_pred_mode (H264Context *h, int mode)
 checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.
const uint8_t * ff_h264_decode_nal (H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length)
 Decode a network abstraction layer unit.
static int ff_h264_decode_rbsp_trailing (H264Context *h, const uint8_t *src)
 Identify the exact end of the bitstream.
static void chroma_dc_dequant_idct_c (DCTELEM *block, int qmul)
static void mc_dir_part (H264Context *h, Picture *pic, int n, int square, int chroma_height, int delta, int list, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int src_x_offset, int src_y_offset, qpel_mc_func *qpix_op, h264_chroma_mc_func chroma_op)
static void mc_part_std (H264Context *h, int n, int square, int chroma_height, int delta, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int x_offset, int y_offset, qpel_mc_func *qpix_put, h264_chroma_mc_func chroma_put, qpel_mc_func *qpix_avg, h264_chroma_mc_func chroma_avg, int list0, int list1)
static void mc_part_weighted (H264Context *h, int n, int square, int chroma_height, int delta, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int x_offset, int y_offset, qpel_mc_func *qpix_put, h264_chroma_mc_func chroma_put, h264_weight_func luma_weight_op, h264_weight_func chroma_weight_op, h264_biweight_func luma_weight_avg, h264_biweight_func chroma_weight_avg, int list0, int list1)
static void mc_part (H264Context *h, int n, int square, int chroma_height, int delta, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int x_offset, int y_offset, qpel_mc_func *qpix_put, h264_chroma_mc_func chroma_put, qpel_mc_func *qpix_avg, h264_chroma_mc_func chroma_avg, h264_weight_func *weight_op, h264_biweight_func *weight_avg, int list0, int list1)
static void prefetch_motion (H264Context *h, int list)
static void hl_motion (H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, qpel_mc_func(*qpix_put)[16], h264_chroma_mc_func(*chroma_put), qpel_mc_func(*qpix_avg)[16], h264_chroma_mc_func(*chroma_avg), h264_weight_func *weight_op, h264_biweight_func *weight_avg)
static void free_tables (H264Context *h, int free_rbsp)
static void init_dequant8_coeff_table (H264Context *h)
static void init_dequant4_coeff_table (H264Context *h)
static void init_dequant_tables (H264Context *h)
int ff_h264_alloc_tables (H264Context *h)
 Allocate tables.
static void clone_tables (H264Context *dst, H264Context *src, int i)
 Mimic alloc_tables(), but for every context thread.
static int context_init (H264Context *h)
 Init context Allocate buffers which are not shared amongst multiple threads.
static int decode_nal_units (H264Context *h, const uint8_t *buf, int buf_size)
static av_cold void common_init (H264Context *h)
int ff_h264_decode_extradata (H264Context *h)
av_cold int ff_h264_decode_init (AVCodecContext *avctx)
int ff_h264_frame_start (H264Context *h)
static void backup_mb_border (H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int simple)
static void xchg_mb_border (H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int xchg, int simple)
static av_always_inline void hl_decode_mb_internal (H264Context *h, int simple)
static void hl_decode_mb_simple (H264Context *h)
 Process a macroblock; this case avoids checks for expensive uncommon cases.
static void av_noinline hl_decode_mb_complex (H264Context *h)
 Process a macroblock; this handles edge cases, such as interlacing.
void ff_h264_hl_decode_mb (H264Context *h)
static int pred_weight_table (H264Context *h)
static void implicit_weight_table (H264Context *h, int field)
 Initialize implicit_weight table.
static void idr (H264Context *h)
 instantaneous decoder refresh.
static void flush_dpb (AVCodecContext *avctx)
static int init_poc (H264Context *h)
static void init_scan_tables (H264Context *h)
 initialize scan tables
static void field_end (H264Context *h)
static void clone_slice (H264Context *dst, H264Context *src)
 Replicate H264 "master" context to thread contexts.
int ff_h264_get_profile (SPS *sps)
 computes profile from profile_idc and constraint_set?_flags
static int decode_slice_header (H264Context *h, H264Context *h0)
 decodes a slice header.
int ff_h264_get_slice_type (const H264Context *h)
 Reconstruct bitstream slice_type.
static int fill_filter_caches (H264Context *h, int mb_type)
static void loop_filter (H264Context *h)
static void predict_field_decoding_flag (H264Context *h)
static int decode_slice (struct AVCodecContext *avctx, void *arg)
static void execute_decode_slices (H264Context *h, int context_count)
 Call decode_slice() for each context.
static int get_consumed_bytes (MpegEncContext *s, int pos, int buf_size)
 returns the number of bytes consumed for building the current frame
static int decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
av_cold void ff_h264_free_context (H264Context *h)
 Free any data that may have been allocated in the H264 context like SPS, PPS etc.
av_cold int ff_h264_decode_end (AVCodecContext *avctx)

Variables

static const uint8_t rem6 [52]
static const uint8_t div6 [52]
static enum PixelFormat hwaccel_pixfmt_list_h264_jpeg_420 []
static const AVProfile profiles []
AVCodec ff_h264_decoder


Detailed Description

H.264 / AVC / MPEG4 part10 codec.

Author:
Michael Niedermayer <michaelni@gmx.at>

Definition in file h264.c.


Define Documentation

#define RS   0

Referenced by ff_h264_decode_nal().

#define T (  )     (x>>3) | ((x&7)<<3)

#define T (  )     (x>>2) | ((x<<2) & 0xF)

#define XCHG ( a,
b,
xchg   ) 

Value:

if (xchg) AV_SWAP64(b,a);\
else      AV_COPY64(b,a);

Referenced by xchg_mb_border().


Function Documentation

static void backup_mb_border ( H264Context h,
uint8_t *  src_y,
uint8_t *  src_cb,
uint8_t *  src_cr,
int  linesize,
int  uvlinesize,
int  simple 
) [inline, static]

Definition at line 969 of file h264.c.

Referenced by filter_mb_row(), filter_mb_row_simple(), and loop_filter().

static void chroma_dc_dequant_idct_c ( DCTELEM block,
int  qmul 
) [static]

Definition at line 295 of file h264.c.

Referenced by hl_decode_mb_internal().

static void clone_slice ( H264Context dst,
H264Context src 
) [static]

Replicate H264 "master" context to thread contexts.

Definition at line 1656 of file h264.c.

Referenced by decode_slice_header().

static void clone_tables ( H264Context dst,
H264Context src,
int  i 
) [static]

Mimic alloc_tables(), but for every context thread.

Definition at line 763 of file h264.c.

Referenced by decode_slice_header().

static av_cold void common_init ( H264Context h  )  [static]

Definition at line 799 of file h264.c.

static int context_init ( H264Context h  )  [static]

Init context Allocate buffers which are not shared amongst multiple threads.

Definition at line 785 of file h264.c.

Referenced by decode_slice_header().

static int decode_frame ( AVCodecContext avctx,
void *  data,
int *  data_size,
AVPacket avpkt 
) [static]

Definition at line 2964 of file h264.c.

static int decode_nal_units ( H264Context h,
const uint8_t *  buf,
int  buf_size 
) [static]

< thread context

Definition at line 2742 of file h264.c.

Referenced by decode_frame(), and ff_h264_decode_extradata().

static int decode_slice ( struct AVCodecContext avctx,
void *  arg 
) [static]

Definition at line 2524 of file h264.c.

static int decode_slice_header ( H264Context h,
H264Context h0 
) [static]

decodes a slice header.

This will also call MPV_common_init() and frame_start() as needed.

Parameters:
h h264context
h0 h264 master context (differs from 'h' when doing sliced based parallel decoding)
Returns:
0 if okay, <0 if an error occurred, 1 if decoding must not be multithreaded

Definition at line 1716 of file h264.c.

static void execute_decode_slices ( H264Context h,
int  context_count 
) [static]

Call decode_slice() for each context.

Parameters:
h h264 master context
context_count number of contexts to execute

Definition at line 2708 of file h264.c.

Referenced by decode_nal_units().

int ff_h264_alloc_tables ( H264Context h  ) 

Allocate tables.

needs width/height

Definition at line 716 of file h264.c.

Referenced by decode_slice_header(), and svq3_decode_init().

int ff_h264_check_intra4x4_pred_mode ( H264Context h  ) 

checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.

Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks.

Definition at line 74 of file h264.c.

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

int ff_h264_check_intra_pred_mode ( H264Context h,
int  mode 
)

checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.

Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks.

Definition at line 113 of file h264.c.

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

av_cold int ff_h264_decode_end ( AVCodecContext avctx  ) 

Definition at line 3375 of file h264.c.

int ff_h264_decode_extradata ( H264Context h  ) 

Definition at line 819 of file h264.c.

Referenced by ff_h264_decode_init(), and h264_parse().

av_cold int ff_h264_decode_init ( AVCodecContext avctx  ) 

Definition at line 867 of file h264.c.

Referenced by svq3_decode_init().

const uint8_t* ff_h264_decode_nal ( H264Context h,
const uint8_t *  src,
int *  dst_length,
int *  consumed,
int  length 
)

Decode a network abstraction layer unit.

Parameters:
consumed is the number of bytes used as input
length is the length of the array
dst_length is the number of decoded bytes FIXME here or a decode rbsp tailing?
Returns:
decoded bytes, might be src+1 if no escapes

Definition at line 145 of file h264.c.

Referenced by decode_nal_units(), and parse_nal_units().

static int ff_h264_decode_rbsp_trailing ( H264Context h,
const uint8_t *  src 
) [static]

Identify the exact end of the bitstream.

Returns:
the length of the trailing, or 0 if damaged

Definition at line 239 of file h264.c.

Referenced by decode_nal_units().

int ff_h264_frame_start ( H264Context h  ) 

Definition at line 913 of file h264.c.

Referenced by decode_slice_header(), and svq3_decode_frame().

av_cold void ff_h264_free_context ( H264Context h  ) 

Free any data that may have been allocated in the H264 context like SPS, PPS etc.

Definition at line 3362 of file h264.c.

Referenced by close(), and ff_h264_decode_end().

int ff_h264_get_profile ( SPS sps  ) 

computes profile from profile_idc and constraint_set?_flags

compute profile from sps

Parameters:
sps SPS
Returns:
profile as defined by FF_PROFILE_H264_*

Definition at line 1687 of file h264.c.

Referenced by decode_slice_header(), and parse_nal_units().

int ff_h264_get_slice_type ( const H264Context h  ) 

Reconstruct bitstream slice_type.

Definition at line 2226 of file h264.c.

Referenced by decode_slice(), and fill_slice_long().

void ff_h264_hl_decode_mb ( H264Context h  ) 

Definition at line 1330 of file h264.c.

Referenced by decode_mb(), decode_slice(), and svq3_decode_frame().

void ff_h264_write_back_intra_pred_mode ( H264Context h  ) 

Definition at line 62 of file h264.c.

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

static void field_end ( H264Context h  )  [static]

Definition at line 1606 of file h264.c.

Referenced by decode_frame(), and decode_slice_header().

static int fill_filter_caches ( H264Context h,
int  mb_type 
) [static]

Returns:
non zero if the loop filter can be skiped

Definition at line 2242 of file h264.c.

Referenced by loop_filter().

static void flush_dpb ( AVCodecContext avctx  )  [static]

Definition at line 1474 of file h264.c.

Referenced by decode_slice_header().

static void free_tables ( H264Context h,
int  free_rbsp 
) [static]

Definition at line 620 of file h264.c.

Referenced by decode_slice_header(), ff_h264_alloc_tables(), and ff_h264_free_context().

static int get_consumed_bytes ( MpegEncContext s,
int  pos,
int  buf_size 
) [static]

returns the number of bytes consumed for building the current frame

Definition at line 2957 of file h264.c.

static void av_noinline hl_decode_mb_complex ( H264Context h  )  [static]

Process a macroblock; this handles edge cases, such as interlacing.

Definition at line 1326 of file h264.c.

Referenced by ff_h264_hl_decode_mb().

static av_always_inline void hl_decode_mb_internal ( H264Context h,
int  simple 
) [static]

Definition at line 1064 of file h264.c.

Referenced by hl_decode_mb_complex(), and hl_decode_mb_simple().

static void hl_decode_mb_simple ( H264Context h  )  [static]

Process a macroblock; this case avoids checks for expensive uncommon cases.

Definition at line 1319 of file h264.c.

Referenced by ff_h264_hl_decode_mb().

static void hl_motion ( H264Context h,
uint8_t *  dest_y,
uint8_t *  dest_cb,
uint8_t *  dest_cr,
qpel_mc_func(*)  qpix_put[16],
h264_chroma_mc_func chroma_put,
qpel_mc_func(*)  qpix_avg[16],
h264_chroma_mc_func chroma_avg,
h264_weight_func weight_op,
h264_biweight_func weight_avg 
) [static]

Definition at line 532 of file h264.c.

Referenced by hl_decode_mb_internal().

static void idr ( H264Context h  )  [static]

instantaneous decoder refresh.

Definition at line 1465 of file h264.c.

Referenced by decode_nal_units(), flush_dpb(), and h264_probe().

static void implicit_weight_table ( H264Context h,
int  field 
) [static]

Initialize implicit_weight table.

Parameters:
field 0/1 initialize the weight for interlaced MBAFF -1 initializes the rest

Definition at line 1407 of file h264.c.

Referenced by decode_slice_header().

static void init_dequant4_coeff_table ( H264Context h  )  [static]

Definition at line 675 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant8_coeff_table ( H264Context h  )  [static]

Definition at line 653 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant_tables ( H264Context h  )  [static]

Definition at line 699 of file h264.c.

Referenced by decode_slice_header(), and ff_h264_alloc_tables().

static int init_poc ( H264Context h  )  [static]

Definition at line 1492 of file h264.c.

Referenced by decode_slice_header().

static void init_scan_tables ( H264Context h  )  [static]

initialize scan tables

Definition at line 1573 of file h264.c.

Referenced by decode_slice_header().

static void loop_filter ( H264Context h  )  [static]

Definition at line 2454 of file h264.c.

Referenced by decode_slice().

static void mc_dir_part ( H264Context h,
Picture pic,
int  n,
int  square,
int  chroma_height,
int  delta,
int  list,
uint8_t *  dest_y,
uint8_t *  dest_cb,
uint8_t *  dest_cr,
int  src_x_offset,
int  src_y_offset,
qpel_mc_func qpix_op,
h264_chroma_mc_func  chroma_op 
) [inline, static]

Definition at line 339 of file h264.c.

static void mc_part ( H264Context h,
int  n,
int  square,
int  chroma_height,
int  delta,
uint8_t *  dest_y,
uint8_t *  dest_cb,
uint8_t *  dest_cr,
int  x_offset,
int  y_offset,
qpel_mc_func qpix_put,
h264_chroma_mc_func  chroma_put,
qpel_mc_func qpix_avg,
h264_chroma_mc_func  chroma_avg,
h264_weight_func weight_op,
h264_biweight_func weight_avg,
int  list0,
int  list1 
) [inline, static]

Definition at line 498 of file h264.c.

Referenced by hl_motion().

static void mc_part_std ( H264Context h,
int  n,
int  square,
int  chroma_height,
int  delta,
uint8_t *  dest_y,
uint8_t *  dest_cb,
uint8_t *  dest_cr,
int  x_offset,
int  y_offset,
qpel_mc_func qpix_put,
h264_chroma_mc_func  chroma_put,
qpel_mc_func qpix_avg,
h264_chroma_mc_func  chroma_avg,
int  list0,
int  list1 
) [inline, static]

Definition at line 397 of file h264.c.

static void mc_part_weighted ( H264Context h,
int  n,
int  square,
int  chroma_height,
int  delta,
uint8_t *  dest_y,
uint8_t *  dest_cb,
uint8_t *  dest_cr,
int  x_offset,
int  y_offset,
qpel_mc_func qpix_put,
h264_chroma_mc_func  chroma_put,
h264_weight_func  luma_weight_op,
h264_weight_func  chroma_weight_op,
h264_biweight_func  luma_weight_avg,
h264_biweight_func  chroma_weight_avg,
int  list0,
int  list1 
) [inline, static]

Definition at line 431 of file h264.c.

Referenced by mc_part().

static int pred_weight_table ( H264Context h  )  [static]

Definition at line 1341 of file h264.c.

Referenced by decode_slice_header().

static void predict_field_decoding_flag ( H264Context h  )  [static]

Definition at line 2513 of file h264.c.

Referenced by decode_slice().

static void prefetch_motion ( H264Context h,
int  list 
) [inline, static]

Definition at line 516 of file h264.c.

Referenced by hl_motion(), MPV_motion_internal(), and vp8_decode_frame().

static void xchg_mb_border ( H264Context h,
uint8_t *  src_y,
uint8_t *  src_cb,
uint8_t *  src_cr,
int  linesize,
int  uvlinesize,
int  xchg,
int  simple 
) [inline, static]

Definition at line 1005 of file h264.c.

Referenced by hl_decode_mb_internal(), and intra_predict().


Variable Documentation

const uint8_t div6[52] [static]

Initial value:

{
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
}

Definition at line 51 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().

Initial value:

Definition at line 3406 of file h264.c.

Initial value:

Definition at line 55 of file h264.c.

Referenced by decode_slice_header().

const AVProfile profiles[] [static]

Initial value:

 {
    { FF_PROFILE_H264_BASELINE,             "Baseline"              },
    { FF_PROFILE_H264_CONSTRAINED_BASELINE, "Constrained Baseline"  },
    { FF_PROFILE_H264_MAIN,                 "Main"                  },
    { FF_PROFILE_H264_EXTENDED,             "Extended"              },
    { FF_PROFILE_H264_HIGH,                 "High"                  },
    { FF_PROFILE_H264_HIGH_10,              "High 10"               },
    { FF_PROFILE_H264_HIGH_10_INTRA,        "High 10 Intra"         },
    { FF_PROFILE_H264_HIGH_422,             "High 4:2:2"            },
    { FF_PROFILE_H264_HIGH_422_INTRA,       "High 4:2:2 Intra"      },
    { FF_PROFILE_H264_HIGH_444,             "High 4:4:4"            },
    { FF_PROFILE_H264_HIGH_444_PREDICTIVE,  "High 4:4:4 Predictive" },
    { FF_PROFILE_H264_HIGH_444_INTRA,       "High 4:4:4 Intra"      },
    { FF_PROFILE_H264_CAVLC_444,            "CAVLC 4:4:4"           },
    { FF_PROFILE_UNKNOWN },
}

Definition at line 3389 of file h264.c.

const uint8_t rem6[52] [static]

Initial value:

{
0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
}

Definition at line 47 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().


Generated on Mon May 2 19:50:18 2011 for FFmpeg by  doxygen 1.5.6