FFmpeg
|
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 |
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... | |
Variables | |
const uint16_t | ff_h264_mb_sizes [4] |
static const uint8_t | scan8 [16 *3+3] |
H.264 / AVC / MPEG-4 part10 codec.
Definition in file h264dec.h.
#define H264_MAX_PICTURE_COUNT 36 |
Definition at line 52 of file h264dec.h.
Referenced by copy_picture_range(), ff_h264_update_thread_context(), find_unused_picture(), flush_dpb(), h264_decode_end(), h264_init_context(), and release_unused_pictures().
#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 |
Definition at line 56 of file h264dec.h.
Referenced by ff_h264_decode_seq_parameter_set(), ff_h264_execute_ref_pic_marking(), ff_h264_update_thread_context(), h264_init_context(), h264_select_output_frame(), and idr().
#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 |
Definition at line 71 of file h264dec.h.
Referenced by await_references(), backup_mb_border(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), fill_filter_caches_inter(), and xchg_mb_border().
#define MB_FIELD | ( | sl | ) | (sl)->mb_field_decoding_flag |
Definition at line 72 of file h264dec.h.
Referenced by decode_cabac_mb_skip(), decode_cabac_residual_internal(), decode_mb_skip(), fetch_diagonal_mv(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_filter_mb(), fill_decode_caches(), fill_decode_neighbors(), fill_filter_caches(), get_lowest_part_y(), hl_decode_mb(), hl_decode_mb_444(), loop_filter(), mc_dir_part(), mc_part_std(), mc_part_weighted(), and xchg_mb_border().
Definition at line 73 of file h264dec.h.
Referenced by backup_mb_border(), decode_cabac_mb_skip(), decode_finish_row(), decode_slice(), fetch_diagonal_mv(), ff_h264_build_ref_list(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_direct_dist_scale_factor(), ff_h264_direct_ref_list_init(), ff_h264_filter_mb(), ff_h264_filter_mb_fast(), fill_decode_caches(), fill_decode_neighbors(), fill_filter_caches(), filter_mb_dir(), h264_slice_init(), hl_decode_mb(), hl_decode_mb_444(), implicit_weight_table(), loop_filter(), pred_spatial_direct_motion(), pred_temp_direct_motion(), and xchg_mb_border().
#define FIELD_PICTURE | ( | h | ) | ((h)->picture_structure != PICT_FRAME) |
Definition at line 74 of file h264dec.h.
Referenced by await_references(), decode_cabac_mb_skip(), decode_finish_row(), decode_nal_units(), ff_h264_build_ref_list(), ff_h264_decode_ref_pic_marking(), ff_h264_direct_dist_scale_factor(), ff_h264_queue_decode_slice(), generate_sliding_window_mmcos(), h264_field_start(), h264_filter_mb_fast_internal(), h264_initialise_ref_list(), nvdec_h264_start_frame(), and pic_num_extract().
#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 |
Definition at line 76 of file h264dec.h.
Referenced by decode_cabac_intra_mb_type(), decode_cabac_mb_chroma_pre_mode(), ff_h264_decode_mb_cabac(), ff_h264_filter_mb(), fill_decode_caches(), fill_decode_neighbors(), fill_filter_caches(), fill_filter_caches_inter(), filter_mb_dir(), h264_filter_mb_fast_internal(), and pred_pskip_motion().
#define LBOT 1 |
Definition at line 77 of file h264dec.h.
Referenced by fill_decode_caches(), fill_decode_neighbors(), and fill_filter_caches().
#define FIELD_OR_MBAFF_PICTURE | ( | h | ) | (FRAME_MBAFF(h) || FIELD_PICTURE(h)) |
Definition at line 91 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().
Definition at line 94 of file h264dec.h.
Referenced by write_back_motion(), and write_back_motion_list().
Definition at line 98 of file h264dec.h.
Referenced by backup_mb_border(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_filter_mb(), fill_decode_caches(), filter_mb_dir(), get_pixel_format(), h264_filter_mb_fast_internal(), and hl_decode_mb().
Definition at line 99 of file h264dec.h.
Referenced by backup_mb_border(), decode_cabac_residual_nondc(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_filter_mb(), ff_h264_hl_decode_mb(), fill_decode_caches(), filter_mb_dir(), get_pixel_format(), h264_filter_mb_fast_internal(), and loop_filter().
#define MB_TYPE_REF0 MB_TYPE_ACPRED |
#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) |
Definition at line 104 of file h264dec.h.
Referenced by decode_cabac_luma_residual(), decode_luma_residual(), ff_h264_decode_mb_cabac(), ff_h264_filter_mb(), fill_decode_caches(), fill_filter_caches(), filter_mb_dir(), h264_filter_mb_fast_internal(), hl_decode_mb_idct_luma(), and hl_decode_mb_predict_luma().
#define LIST_NOT_USED -1 |
Definition at line 390 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), fill_decode_caches(), fill_filter_caches_inter(), pred_pskip_motion(), and write_back_motion().
#define PART_NOT_AVAILABLE -2 |
Definition at line 391 of file h264dec.h.
Referenced by fetch_diagonal_mv(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_slice_context_init(), fill_decode_caches(), pred_motion(), pred_pskip_motion(), pred_spatial_direct_motion(), svq3_decode_frame(), svq3_decode_mb(), svq3_fetch_diagonal_mv(), and svq3_pred_motion().
#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 517 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 522 of file h264dec.h.
Referenced by ff_h264_execute_ref_pic_marking(), and h264_select_output_frame().
#define LUMA_DC_BLOCK_INDEX 48 |
Definition at line 640 of file h264dec.h.
Referenced by decode_cabac_luma_residual(), decode_cabac_residual_internal(), decode_luma_residual(), decode_residual(), get_cabac_cbf_ctx(), and hl_decode_mb_predict_luma().
#define CHROMA_DC_BLOCK_INDEX 49 |
Definition at line 641 of file h264dec.h.
Referenced by decode_cabac_residual_internal(), ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), get_cabac_cbf_ctx(), and hl_decode_mb().
enum MMCOOpcode |
int ff_h264_get_slice_type | ( | const H264SliceContext * | sl | ) |
Reconstruct bitstream slice_type.
Definition at line 2203 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 180 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 h264_slice_init().
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 608 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 832 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().
Definition at line 327 of file h264_cavlc.c.
Referenced by h264_decode_init().
int ff_h264_decode_mb_cavlc | ( | const H264Context * | h, |
H264SliceContext * | sl | ||
) |
Decode a macroblock.
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.
Decode a CABAC coded macroblock.
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 62 of file h264_direct.c.
Referenced by h264_slice_init().
void ff_h264_direct_ref_list_init | ( | const H264Context *const | h, |
H264SliceContext * | sl | ||
) |
Definition at line 121 of file h264_direct.c.
Referenced by h264_slice_init().
void ff_h264_pred_direct_motion | ( | const H264Context *const | h, |
H264SliceContext * | sl, | ||
int * | mb_type | ||
) |
Definition at line 721 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 |
Definition at line 660 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), fill_filter_caches_inter(), h264_er_decode_mb(), pred_pskip_motion(), pred_spatial_direct_motion(), pred_temp_direct_motion(), and svq3_mc_dir().
|
static |
Definition at line 669 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac().
|
static |
Get the chroma qp.
Definition at line 681 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), ff_h264_filter_mb(), filter_mb_dir(), h264_filter_mb_fast_internal(), h264_slice_header_parse(), and loop_filter().
|
static |
Get the predicted intra4x4 prediction mode.
Definition at line 689 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().
|
static |
Definition at line 705 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().
|
static |
Definition at line 717 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().
|
static |
Definition at line 741 of file h264dec.h.
Referenced by write_back_motion().
|
static |
Definition at line 777 of file h264dec.h.
Referenced by decode_mb_skip(), ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().
|
static |
Definition at line 804 of file h264dec.h.
Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().
|
inlinestatic |
Definition at line 816 of file h264dec.h.
Referenced by parse_nal_units().
int ff_h264_field_end | ( | H264Context * | h, |
H264SliceContext * | sl, | ||
int | in_setup | ||
) |
Definition at line 154 of file h264_picture.c.
Referenced by ff_h264_queue_decode_slice(), and h264_decode_frame().
int ff_h264_ref_picture | ( | H264Context * | h, |
H264Picture * | dst, | ||
H264Picture * | src | ||
) |
Definition at line 66 of file h264_picture.c.
Referenced by ff_h264_remove_all_refs(), ff_h264_update_thread_context(), and h264_frame_start().
void ff_h264_unref_picture | ( | H264Context * | h, |
H264Picture * | pic | ||
) |
Definition at line 45 of file h264_picture.c.
Referenced by alloc_picture(), ff_h264_flush_change(), ff_h264_ref_picture(), ff_h264_remove_all_refs(), ff_h264_update_thread_context(), flush_dpb(), h264_decode_end(), h264_decode_frame(), h264_frame_start(), and release_unused_pictures().
int ff_h264_slice_context_init | ( | H264Context * | h, |
H264SliceContext * | sl | ||
) |
Init context Allocate buffers which are not shared amongst multiple threads.
Definition at line 238 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 | ||
) |
Definition at line 102 of file h264dec.c.
Referenced by decode_finish_row(), dxva2_h264_end_frame(), vaapi_h264_end_frame(), and vdpau_h264_end_frame().
int ff_h264_decode_slice_header | ( | H264Context * | h, |
H264SliceContext * | sl, | ||
const H2645NAL * | nal | ||
) |
int ff_h264_queue_decode_slice | ( | H264Context * | h, |
const H2645NAL * | nal | ||
) |
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.
Definition at line 2078 of file h264_slice.c.
Referenced by decode_nal_units().
int ff_h264_execute_decode_slices | ( | H264Context * | h | ) |
Call decode_slice() for each context.
h | h264 master context |
Definition at line 2789 of file h264_slice.c.
Referenced by decode_nal_units(), and ff_h264_queue_decode_slice().
int ff_h264_update_thread_context | ( | AVCodecContext * | dst, |
const AVCodecContext * | src | ||
) |
Definition at line 288 of file h264_slice.c.
void ff_h264_flush_change | ( | H264Context * | h | ) |
Definition at line 483 of file h264dec.c.
Referenced by flush_dpb(), h264_decode_init(), and h264_init_ps().
void ff_h264_free_tables | ( | H264Context * | h | ) |
Definition at line 137 of file h264dec.c.
Referenced by ff_h264_alloc_tables(), flush_dpb(), h264_decode_end(), and h264_slice_header_init().
void ff_h264_set_erpic | ( | ERPicture * | dst, |
H264Picture * | src | ||
) |
Definition at line 131 of file h264_picture.c.
Referenced by decode_nal_units(), and h264_frame_start().
const uint16_t ff_h264_mb_sizes[4] |
Definition at line 58 of file h264dec.c.
Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), and hl_decode_mb().
|
static |
Definition at line 644 of file h264dec.h.
Referenced by check_idct_multiple(), 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().