libavcodec/h264.c File Reference

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

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

Go to the source code of this file.

Defines

#define RS   0
#define stride   16
#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)
 Decodes a network abstraction layer unit.
int ff_h264_decode_rbsp_trailing (H264Context *h, const uint8_t *src)
 identifies the exact end of the bitstream
static void h264_luma_dc_dequant_idct_c (DCTELEM *block, int qp, int qmul)
 IDCT transforms the 16 dc values and dequantizes them.
static void chroma_dc_dequant_idct_c (DCTELEM *block, int qp, 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)
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)
 allocates 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)
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)
 Replicates H264 "master" context to thread contexts.
static int decode_slice_header (H264Context *h, H264Context *h0)
 decodes a slice header.
int ff_h264_get_slice_type (const H264Context *h)
 reconstructs 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)
 frees 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]
AVCodec 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 stride   16

#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 986 of file h264.c.

Referenced by loop_filter().

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

Definition at line 323 of file h264.c.

Referenced by hl_decode_mb_internal().

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

Replicates H264 "master" context to thread contexts.

Definition at line 1679 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 791 of file h264.c.

Referenced by decode_slice_header().

static av_cold void common_init ( H264Context h  )  [static]

Definition at line 827 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 813 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 2953 of file h264.c.

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

< thread context

Definition at line 2726 of file h264.c.

Referenced by decode_frame(), and ff_h264_decode_init().

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

Definition at line 2508 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 1712 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 2692 of file h264.c.

Referenced by decode_nal_units().

int ff_h264_alloc_tables ( H264Context h  ) 

allocates tables.

needs width/height

Definition at line 744 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.

Definition at line 66 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.

Definition at line 105 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 3358 of file h264.c.

av_cold int ff_h264_decode_init ( AVCodecContext avctx  ) 

Definition at line 847 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 
)

Decodes 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 137 of file h264.c.

Referenced by decode_nal_units(), and parse_nal_units().

int ff_h264_decode_rbsp_trailing ( H264Context h,
const uint8_t *  src 
)

identifies the exact end of the bitstream

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

Definition at line 227 of file h264.c.

Referenced by decode_nal_units().

int ff_h264_frame_start ( H264Context h  ) 

Definition at line 930 of file h264.c.

Referenced by decode_slice_header(), and svq3_decode_frame().

av_cold void ff_h264_free_context ( H264Context h  ) 

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

Definition at line 3345 of file h264.c.

Referenced by close(), and ff_h264_decode_end().

int ff_h264_get_slice_type ( const H264Context h  ) 

reconstructs bitstream slice_type.

Definition at line 2210 of file h264.c.

Referenced by decode_slice(), and fill_slice_long().

void ff_h264_hl_decode_mb ( H264Context h  ) 

Definition at line 1340 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 54 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 1629 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 2226 of file h264.c.

Referenced by loop_filter().

static void flush_dpb ( AVCodecContext avctx  )  [static]

Definition at line 1485 of file h264.c.

Referenced by decode_slice_header().

static void free_tables ( H264Context h  )  [static]

Definition at line 648 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 2946 of file h264.c.

static void h264_luma_dc_dequant_idct_c ( DCTELEM block,
int  qp,
int  qmul 
) [static]

IDCT transforms the 16 dc values and dequantizes them.

Parameters:
qp quantization parameter

Definition at line 244 of file h264.c.

Referenced by hl_decode_mb_internal().

static void av_noinline hl_decode_mb_complex ( H264Context h  )  [static]

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

Definition at line 1336 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 1081 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 1329 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 560 of file h264.c.

Referenced by hl_decode_mb_internal().

static void idr ( H264Context h  )  [static]

instantaneous decoder refresh.

Definition at line 1476 of file h264.c.

Referenced by decode_nal_units(), and flush_dpb().

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 1416 of file h264.c.

Referenced by decode_slice_header().

static void init_dequant4_coeff_table ( H264Context h  )  [static]

Definition at line 702 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant8_coeff_table ( H264Context h  )  [static]

Definition at line 679 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant_tables ( H264Context h  )  [static]

Definition at line 727 of file h264.c.

Referenced by decode_slice_header(), and ff_h264_alloc_tables().

static int init_poc ( H264Context h  )  [static]

Definition at line 1503 of file h264.c.

Referenced by decode_slice_header().

static void init_scan_tables ( H264Context h  )  [static]

initialize scan tables

Definition at line 1584 of file h264.c.

Referenced by decode_slice_header().

static void loop_filter ( H264Context h  )  [static]

Definition at line 2438 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 367 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 526 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 425 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 459 of file h264.c.

Referenced by mc_part().

static int pred_weight_table ( H264Context h  )  [static]

Definition at line 1351 of file h264.c.

Referenced by decode_slice_header().

static void predict_field_decoding_flag ( H264Context h  )  [static]

Definition at line 2497 of file h264.c.

Referenced by decode_slice().

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

Definition at line 544 of file h264.c.

Referenced by hl_motion(), and MPV_motion_internal().

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 1022 of file h264.c.

Referenced by hl_decode_mb_internal().


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 50 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().

Initial value:

 {
    "h264",
    AVMEDIA_TYPE_VIDEO,
    CODEC_ID_H264,
    sizeof(H264Context),
    ff_h264_decode_init,
    NULL,
    ff_h264_decode_end,
    decode_frame,
     CODEC_CAP_DR1 | CODEC_CAP_DELAY,
    .flush= flush_dpb,
    .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
    .pix_fmts= ff_hwaccel_pixfmt_list_420,
}

Definition at line 3373 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 46 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().


Generated on Fri Oct 26 02:36:52 2012 for FFmpeg by  doxygen 1.5.8