H.264 / AVC / MPEG4 part10 codec. More...
#include "libavutil/imgutils.h"
#include "internal.h"
#include "cabac.h"
#include "cabac_functions.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 "thread.h"
#include "vdpau_internal.h"
#include "libavutil/avassert.h"
#include <assert.h>
Go to the source code of this file.
Macros | |
#define | RS 0 |
#define | IN_RANGE(a, b, size) (((a) >= (b)) && ((a) < ((b)+(size)))) |
#define | copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field) |
#define | XCHG(a, b, xchg) |
#define | hl_decode_mb_simple(sh, bits) |
Process a macroblock; this case avoids checks for expensive uncommon cases. | |
#define | T(x) (x>>2) | ((x<<2) & 0xF) |
#define | T(x) (x>>3) | ((x&7)<<3) |
Functions | |
int | ff_h264_check_intra4x4_pred_mode (H264Context *h) |
Check if the top & left blocks are available if needed and change the dc mode so it only uses the available blocks. | |
int | ff_h264_check_intra_pred_mode (H264Context *h, int mode, int is_chroma) |
Check if the top & left blocks are available if needed and change 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 int | get_lowest_part_list_y (H264Context *h, Picture *pic, int n, int height, int y_offset, int list) |
static void | get_lowest_part_y (H264Context *h, int refs[2][48], int n, int height, int y_offset, int list0, int list1, int *nrefs) |
static void | await_references (H264Context *h) |
Wait until all reference frames are available for MC operations. | |
static av_always_inline void | mc_dir_part (H264Context *h, Picture *pic, int n, int square, int 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, int pixel_shift, int chroma_idc) |
static av_always_inline void | mc_part_std (H264Context *h, int n, int square, int 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, int pixel_shift, int chroma_idc) |
static av_always_inline void | mc_part_weighted (H264Context *h, int n, int square, int 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, int pixel_shift, int chroma_idc) |
static av_always_inline void | mc_part (H264Context *h, int n, int square, int 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, int pixel_shift, int chroma_idc) |
static av_always_inline void | prefetch_motion (H264Context *h, int list, int pixel_shift, int chroma_idc) |
static av_always_inline 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, int pixel_shift, int chroma_idc) |
static av_always_inline void | hl_motion_420 (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, int pixel_shift) |
static av_always_inline void | hl_motion_422 (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, int pixel_shift) |
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) |
static void | copy_picture_range (Picture **to, Picture **from, int count, MpegEncContext *new_base, MpegEncContext *old_base) |
static void | copy_parameter_set (void **to, void **from, int count, int size) |
static int | decode_init_thread_copy (AVCodecContext *avctx) |
static int | decode_update_thread_context (AVCodecContext *dst, const AVCodecContext *src) |
int | ff_h264_frame_start (H264Context *h) |
static void | decode_postinit (H264Context *h, int setup_finished) |
Run setup operations that must be run after slice header decoding. | |
static av_always_inline 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 av_always_inline 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 chroma444, int simple, int pixel_shift) |
static av_always_inline int | dctcoef_get (DCTELEM *mb, int high_bit_depth, int index) |
static av_always_inline void | dctcoef_set (DCTELEM *mb, int high_bit_depth, int index, int value) |
static av_always_inline void | hl_decode_mb_predict_luma (H264Context *h, int mb_type, int is_h264, int simple, int transform_bypass, int pixel_shift, int *block_offset, int linesize, uint8_t *dest_y, int p) |
static av_always_inline void | hl_decode_mb_idct_luma (H264Context *h, int mb_type, int is_h264, int simple, int transform_bypass, int pixel_shift, int *block_offset, int linesize, uint8_t *dest_y, int p) |
static av_always_inline void | hl_decode_mb_internal (H264Context *h, int simple, int pixel_shift) |
static av_always_inline void | hl_decode_mb_444_internal (H264Context *h, int simple, int pixel_shift) |
hl_decode_mb_simple (0, 8) | |
Process a macroblock; this handles edge cases, such as interlacing. | |
static void av_noinline | hl_decode_mb_444_complex (H264Context *h) |
static void av_noinline | hl_decode_mb_444_simple (H264Context *h) |
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 int | field_end (H264Context *h, int in_setup) |
static void | clone_slice (H264Context *dst, H264Context *src) |
Replicate H264 "master" context to thread contexts. | |
int | ff_h264_get_profile (SPS *sps) |
Compute profile from profile_idc and constraint_set?_flags. | |
static int | h264_set_parameter_from_sps (H264Context *h) |
static int | decode_slice_header (H264Context *h, H264Context *h0) |
Decode a slice header. | |
int | ff_h264_get_slice_type (const H264Context *h) |
Reconstruct bitstream slice_type. | |
static av_always_inline void | fill_filter_caches_inter (H264Context *h, MpegEncContext *const s, int mb_type, int top_xy, int left_xy[LEFT_MBS], int top_type, int left_type[LEFT_MBS], int mb_xy, int list) |
static int | fill_filter_caches (H264Context *h, int mb_type) |
static void | loop_filter (H264Context *h, int start_x, int end_x) |
static void | predict_field_decoding_flag (H264Context *h) |
static void | decode_finish_row (H264Context *h) |
Draw edges and report progress for the last MB row. | |
static int | decode_slice (struct AVCodecContext *avctx, void *arg) |
static int | 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) |
Return 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 [QP_MAX_NUM+1] |
static const uint8_t | div6 [QP_MAX_NUM+1] |
static enum PixelFormat | hwaccel_pixfmt_list_h264_jpeg_420 [] |
static const AVProfile | profiles [] |
AVCodec | ff_h264_decoder |
H.264 / AVC / MPEG4 part10 codec.
Definition in file h264.c.
#define copy_fields | ( | to, | |
from, | |||
start_field, | |||
end_field | |||
) | memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field) |
Definition at line 1186 of file h264.c.
Referenced by decode_update_thread_context(), update_context_from_user(), and vp3_update_thread_context().
#define hl_decode_mb_simple | ( | sh, | |
bits | |||
) |
Process a macroblock; this case avoids checks for expensive uncommon cases.
Definition at line 1150 of file h264.c.
Referenced by copy_picture_range().
#define RS 0 |
Referenced by ff_h264_decode_nal().
#define T | ( | x | ) | (x>>2) | ((x<<2) & 0xF) |
#define T | ( | x | ) | (x>>3) | ((x&7)<<3) |
#define XCHG | ( | a, | |
b, | |||
xchg | |||
) |
|
static |
Wait until all reference frames are available for MC operations.
h | the H264 context |
Definition at line 293 of file h264.c.
Referenced by hl_motion().
|
static |
Definition at line 1547 of file h264.c.
Referenced by loop_filter().
|
static |
Replicate H264 "master" context to thread contexts.
Definition at line 2575 of file h264.c.
Referenced by decode_slice_header().
|
static |
Mimic alloc_tables(), but for every context thread.
Definition at line 991 of file h264.c.
Referenced by decode_slice_header().
|
static |
Definition at line 1027 of file h264.c.
Referenced by ff_h264_decode_init().
|
static |
Init context Allocate buffers which are not shared amongst multiple threads.
Definition at line 1013 of file h264.c.
Referenced by decode_slice_header(), and decode_update_thread_context().
Definition at line 1163 of file h264.c.
Referenced by decode_update_thread_context().
|
static |
Definition at line 1151 of file h264.c.
Referenced by decode_update_thread_context().
|
static |
Definition at line 1728 of file h264.c.
Referenced by hl_decode_mb_idct_luma(), hl_decode_mb_internal(), and hl_decode_mb_predict_luma().
|
static |
Definition at line 1735 of file h264.c.
Referenced by hl_decode_mb_predict_luma().
|
static |
Draw edges and report progress for the last MB row.
Definition at line 3700 of file h264.c.
Referenced by decode_slice().
|
static |
|
static |
|
static |
< thread context
< number of NALs that need decoding before the next frame thread starts
Definition at line 3912 of file h264.c.
Referenced by decode_frame(), and ff_h264_decode_extradata().
|
static |
Run setup operations that must be run after slice header decoding.
This includes finding the next displayed frame.
h | h264 master context |
setup_finished | enough NALs have been read that we can call ff_thread_finish_setup() |
Definition at line 1347 of file h264.c.
Referenced by decode_frame(), and decode_nal_units().
|
static |
Definition at line 3731 of file h264.c.
Referenced by execute_decode_slices().
|
static |
Decode a slice header.
This will also call MPV_common_init() and frame_start() as needed.
h | h264context |
h0 | h264 master context (differs from 'h' when doing sliced based parallel decoding) |
Definition at line 2681 of file h264.c.
Referenced by decode_nal_units().
|
static |
|
static |
Call decode_slice() for each context.
h | h264 master context |
context_count | number of contexts to execute |
Definition at line 3872 of file h264.c.
Referenced by decode_nal_units().
int ff_h264_alloc_tables | ( | H264Context * | h | ) |
Allocate tables.
needs width/height
Definition at line 944 of file h264.c.
Referenced by decode_slice_header(), decode_update_thread_context(), and svq3_decode_init().
int ff_h264_check_intra4x4_pred_mode | ( | H264Context * | h | ) |
Check if the top & left blocks are available if needed and change 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 68 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, | ||
int | is_chroma | ||
) |
Check if the top & left blocks are available if needed and change 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 108 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 | ) |
int ff_h264_decode_extradata | ( | H264Context * | h | ) |
Definition at line 1046 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 1098 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.
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? |
Definition at line 140 of file h264.c.
Referenced by decode_nal_units(), and parse_nal_units().
|
static |
Identify the exact end of the bitstream.
Definition at line 230 of file h264.c.
Referenced by decode_nal_units().
int ff_h264_frame_start | ( | H264Context * | h | ) |
Definition at line 1279 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 4367 of file h264.c.
Referenced by close(), ff_h264_decode_end(), and svq3_decode_end().
int ff_h264_get_profile | ( | SPS * | sps | ) |
Compute profile from profile_idc and constraint_set?_flags.
compute profile from sps
sps | SPS |
Definition at line 2606 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 3406 of file h264.c.
Referenced by decode_slice(), and fill_slice_long().
void ff_h264_hl_decode_mb | ( | H264Context * | h | ) |
Definition at line 2226 of file h264.c.
Referenced by decode_mb(), decode_slice(), and svq3_decode_frame().
|
static |
Definition at line 2518 of file h264.c.
Referenced by decode_frame(), and decode_slice_header().
|
static |
Definition at line 3498 of file h264.c.
Referenced by loop_filter().
|
static |
Definition at line 3418 of file h264.c.
Referenced by fill_filter_caches().
|
static |
Definition at line 2384 of file h264.c.
Referenced by decode_slice_header().
|
static |
Definition at line 842 of file h264.c.
Referenced by decode_slice_header(), ff_h264_alloc_tables(), and ff_h264_free_context().
|
static |
Return the number of bytes consumed for building the current frame.
Definition at line 4188 of file h264.c.
Referenced by decode_frame().
|
inlinestatic |
Definition at line 243 of file h264.c.
Referenced by get_lowest_part_y().
|
inlinestatic |
Definition at line 253 of file h264.c.
Referenced by await_references().
|
static |
Definition at line 2626 of file h264.c.
Referenced by decode_nal_units(), and decode_slice_header().
|
static |
Definition at line 2218 of file h264.c.
Referenced by ff_h264_hl_decode_mb().
|
static |
Definition at line 2105 of file h264.c.
Referenced by hl_decode_mb_444_complex(), and hl_decode_mb_444_simple().
|
static |
Definition at line 2222 of file h264.c.
Referenced by ff_h264_hl_decode_mb().
|
static |
Definition at line 1845 of file h264.c.
Referenced by hl_decode_mb_444_internal(), and hl_decode_mb_internal().
|
static |
Definition at line 1895 of file h264.c.
Referenced by hl_decode_mb_simple().
|
static |
Definition at line 1742 of file h264.c.
Referenced by hl_decode_mb_444_internal(), and hl_decode_mb_internal().
hl_decode_mb_simple | ( | 0 | , |
8 | |||
) |
|
static |
Definition at line 718 of file h264.c.
Referenced by hl_decode_mb_444_internal(), hl_motion_420(), and hl_motion_422().
|
static |
Definition at line 821 of file h264.c.
Referenced by hl_decode_mb_internal().
|
static |
Definition at line 832 of file h264.c.
Referenced by hl_decode_mb_internal().
|
static |
instantaneous decoder refresh.
Definition at line 2375 of file h264.c.
Referenced by decode_nal_units(), flush_dpb(), and h264_probe().
|
static |
Initialize implicit_weight table.
field | 0/1 initialize the weight for interlaced MBAFF -1 initializes the rest |
Definition at line 2311 of file h264.c.
Referenced by decode_slice_header().
|
static |
Definition at line 902 of file h264.c.
Referenced by init_dequant_tables().
|
static |
Definition at line 876 of file h264.c.
Referenced by init_dequant_tables().
|
static |
Definition at line 927 of file h264.c.
Referenced by decode_slice_header(), and ff_h264_alloc_tables().
|
static |
Definition at line 2404 of file h264.c.
Referenced by decode_slice_header().
|
static |
|
static |
Definition at line 3625 of file h264.c.
Referenced by decode_slice(), and xmv_read_extradata().
|
static |
Definition at line 445 of file h264.c.
Referenced by mc_part_std(), and mc_part_weighted().
|
static |
Definition at line 674 of file h264.c.
Referenced by hl_motion().
|
static |
|
static |
|
static |
Definition at line 2245 of file h264.c.
Referenced by decode_slice_header().
|
static |
Definition at line 3686 of file h264.c.
Referenced by decode_slice().
|
static |
Definition at line 696 of file h264.c.
Referenced by hl_motion().
|
static |
Definition at line 1643 of file h264.c.
Referenced by hl_decode_mb_444_internal(), and hl_decode_mb_internal().
|
static |
Definition at line 52 of file h264.c.
Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().
AVCodec ff_h264_decoder |
|
static |
Definition at line 56 of file h264.c.
Referenced by decode_slice_header().
|
static |
|
static |
Definition at line 48 of file h264.c.
Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().