h264.c File Reference

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

#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include "internal.h"
#include "cabac.h"
#include "cabac_functions.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "avcodec.h"
#include "mpegvideo.h"
#include "h264.h"
#include "h264data.h"
#include "h264chroma.h"
#include "h264_mvpred.h"
#include "golomb.h"
#include "mathops.h"
#include "rectangle.h"
#include "svq3.h"
#include "thread.h"
#include "vdpau_internal.h"
#include "libavutil/avassert.h"
#include <assert.h>
#include "h264_mb_template.c"
Include dependency graph for h264.c:

Go to the source code of this file.

Macros

#define UNCHECKED_BITSTREAM_READER   1
 
#define STARTCODE_TEST
 
#define IN_RANGE(a, b, size)   (((a) >= (b)) && ((a) < ((b) + (size))))
 
#define REBASE_PICTURE(pic, new_ctx, old_ctx)
 
#define copy_fields(to, from, start_field, end_field)
 
#define XCHG(a, b, xchg)
 
#define BITS   8
 
#define SIMPLE   1
 
#define BITS   16
 
#define SIMPLE   0
 
#define T(x)   (x >> 2) | ((x << 2) & 0xF)
 
#define T(x)   (x >> 3) | ((x & 7) << 3)
 

Functions

int avpriv_h264_has_num_reorder_frames (AVCodecContext *avctx)
 
static void h264_er_decode_mb (void *opaque, int ref, int mv_dir, int mv_type, int(*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped)
 
void ff_h264_draw_horiz_band (H264Context *h, int y, int height)
 
static void unref_picture (H264Context *h, Picture *pic)
 
static void release_unused_pictures (H264Context *h, int remove_current)
 
static int ref_picture (H264Context *h, Picture *dst, Picture *src)
 
static int alloc_scratch_buffers (H264Context *h, int linesize)
 
static int init_table_pools (H264Context *h)
 
static int alloc_picture (H264Context *h, Picture *pic)
 
static int pic_is_unused (H264Context *h, Picture *pic)
 
static int find_unused_picture (H264Context *h)
 
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. More...
 
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. More...
 
const uint8_tff_h264_decode_nal (H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length)
 Decode a network abstraction layer unit. More...
 
static int decode_rbsp_trailing (H264Context *h, const uint8_t *src)
 Identify the exact end of the bitstream. More...
 
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. More...
 
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 prefetch_motion (H264Context *h, int list, int pixel_shift, int chroma_idc)
 
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. More...
 
static void clone_tables (H264Context *dst, H264Context *src, int i)
 Mimic alloc_tables(), but for every context thread. More...
 
static int context_init (H264Context *h)
 Init context Allocate buffers which are not shared amongst multiple threads. More...
 
static int decode_nal_units (H264Context *h, const uint8_t *buf, int buf_size, int parse_extradata)
 
int ff_h264_decode_extradata (H264Context *h, const uint8_t *buf, int size)
 
av_cold int ff_h264_decode_init (AVCodecContext *avctx)
 
static void copy_picture_range (Picture **to, Picture **from, int count, H264Context *new_base, H264Context *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 h264_slice_header_init (H264Context *, int)
 
static int h264_set_parameter_from_sps (H264Context *h)
 
static int decode_update_thread_context (AVCodecContext *dst, const AVCodecContext *src)
 
static int 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. More...
 
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 (int16_t *mb, int high_bit_depth, int index)
 
static av_always_inline void dctcoef_set (int16_t *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)
 
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. More...
 
static void idr (H264Context *h)
 instantaneous decoder refresh. More...
 
static void flush_change (H264Context *h)
 
static void flush_dpb (AVCodecContext *avctx)
 
static int init_poc (H264Context *h)
 
static void init_scan_tables (H264Context *h)
 initialize scan tables More...
 
static int field_end (H264Context *h, int in_setup)
 
static int clone_slice (H264Context *dst, H264Context *src)
 Replicate H264 "master" context to thread contexts. More...
 
int ff_h264_get_profile (SPS *sps)
 Compute profile from profile_idc and constraint_set?_flags. More...
 
static enum AVPixelFormat get_pixel_format (H264Context *h, int force_callback)
 
static int init_dimensions (H264Context *h)
 
static int decode_slice_header (H264Context *h, H264Context *h0)
 Decode a slice header. More...
 
int ff_h264_get_slice_type (const H264Context *h)
 Reconstruct bitstream slice_type. More...
 
static av_always_inline void fill_filter_caches_inter (H264Context *h, 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. More...
 
static void er_add_slice (H264Context *h, int startx, int starty, int endx, int endy, int status)
 
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. More...
 
static int get_consumed_bytes (int pos, int buf_size)
 Return the number of bytes consumed for building the current frame. More...
 
static int output_frame (H264Context *h, AVFrame *dst, AVFrame *src)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, 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. More...
 
static av_cold int h264_decode_end (AVCodecContext *avctx)
 

Variables

const uint16_t ff_h264_mb_sizes [4] = { 256, 384, 512, 768 }
 
static const uint8_t rem6 [QP_MAX_NUM+1]
 
static const uint8_t div6 [QP_MAX_NUM+1]
 
static enum AVPixelFormat h264_hwaccel_pixfmt_list_420 []
 
static enum AVPixelFormat h264_hwaccel_pixfmt_list_jpeg_420 []
 
static const AVProfile profiles []
 
static const AVOption h264_options []
 
static const AVClass h264_class
 
static const AVClass h264_vdpau_class
 
AVCodec ff_h264_decoder
 

Detailed Description

H.264 / AVC / MPEG4 part10 codec.

Author
Michael Niedermayer micha.nosp@m.elni.nosp@m.@gmx..nosp@m.at

Definition in file h264.c.

Macro Definition Documentation

#define BITS   8

Definition at line 2462 of file h264.c.

#define BITS   16

Definition at line 2462 of file h264.c.

#define copy_fields (   to,
  from,
  start_field,
  end_field 
)
Value:
memcpy(&to->start_field, &from->start_field, \
(char *)&to->end_field - (char *)&to->start_field)
const char * from
FFmpeg Automated Testing Environment ************************************Table of Contents *****************FFmpeg Automated Testing Environment Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass target exec to configure or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script tests fate sh from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at doc fate_config sh template Create a configuration that suits your based on the configuration template The slot configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern< arch >< os >< compiler >< compiler version > The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the fate_recv variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ssh command with one or more v options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory FATE makefile targets and variables *************************************Makefile can be set to
Definition: fate.txt:142

Definition at line 1588 of file h264.c.

Referenced by decode_update_thread_context().

#define IN_RANGE (   a,
  b,
  size 
)    (((a) >= (b)) && ((a) < ((b) + (size))))

Definition at line 1537 of file h264.c.

Referenced by copy_picture_range().

#define REBASE_PICTURE (   pic,
  new_ctx,
  old_ctx 
)
Value:
((pic && pic >= old_ctx->DPB && \
pic < old_ctx->DPB + MAX_PICTURE_COUNT) ? \
&new_ctx->DPB[pic - old_ctx->DPB] : NULL)
#define MAX_PICTURE_COUNT
Definition: mpegvideo.h:66
NULL
Definition: eval.c:55

Definition at line 1539 of file h264.c.

Referenced by copy_picture_range(), decode_update_thread_context(), and ff_mpeg_update_thread_context().

#define SIMPLE   1

Definition at line 2466 of file h264.c.

Referenced by hl_decode_mb(), and hl_decode_mb_444().

#define SIMPLE   0

Definition at line 2466 of file h264.c.

#define STARTCODE_TEST
Value:
if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \
if (src[i + 2] != 3) { \
/* startcode, so we must be past the end */ \
length = i; \
} \
break; \
}
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
AVS_Value src
Definition: avisynth_c.h:523
synthesis window for stochastic i
const char int length
Definition: avisynth_c.h:668

Referenced by ff_h264_decode_nal().

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

Referenced by init_scan_tables().

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

Definition at line 28 of file h264.c.

#define XCHG (   a,
  b,
  xchg 
)
Value:
if (pixel_shift) { \
if (xchg) { \
AV_SWAP64(b + 0, a + 0); \
AV_SWAP64(b + 8, a + 8); \
} else { \
} \
} else if (xchg) \
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
#define b
Definition: input.c:42
#define AV_COPY64(d, s)
Definition: intreadwrite.h:582
#define AV_SWAP64(a, b)
Definition: intreadwrite.h:596
#define AV_COPY128(d, s)
Definition: intreadwrite.h:586

Referenced by xchg_mb_border().

Function Documentation

static int alloc_picture ( H264Context h,
Picture pic 
)
static

Definition at line 338 of file h264.c.

Referenced by h264_frame_start().

static int alloc_scratch_buffers ( H264Context h,
int  linesize 
)
static

Definition at line 286 of file h264.c.

Referenced by decode_slice_header().

int avpriv_h264_has_num_reorder_frames ( AVCodecContext avctx)

Definition at line 106 of file h264.c.

Referenced by ff_samples_to_time_base(), and has_decode_delay_been_guessed().

static void await_references ( H264Context h)
static

Wait until all reference frames are available for MC operations.

Parameters
hthe H264 context

Definition at line 701 of file h264.c.

Referenced by hl_motion().

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

Definition at line 2070 of file h264.c.

Referenced by loop_filter().

static int clone_slice ( H264Context dst,
H264Context src 
)
static

Replicate H264 "master" context to thread contexts.

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

Referenced by h264_slice_header_init().

static int context_init ( H264Context h)
static

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

Definition at line 1326 of file h264.c.

Referenced by decode_update_thread_context(), and h264_slice_header_init().

static void copy_parameter_set ( void **  to,
void **  from,
int  count,
int  size 
)
static

Definition at line 1559 of file h264.c.

Referenced by decode_update_thread_context().

static void copy_picture_range ( Picture **  to,
Picture **  from,
int  count,
H264Context new_base,
H264Context old_base 
)
static

Definition at line 1544 of file h264.c.

Referenced by decode_update_thread_context().

static av_always_inline int dctcoef_get ( int16_t *  mb,
int  high_bit_depth,
int  index 
)
static

Definition at line 2254 of file h264.c.

Referenced by hl_decode_mb(), hl_decode_mb_idct_luma(), and hl_decode_mb_predict_luma().

static av_always_inline void dctcoef_set ( int16_t *  mb,
int  high_bit_depth,
int  index,
int  value 
)
static

Definition at line 2263 of file h264.c.

Referenced by hl_decode_mb_predict_luma().

static void decode_finish_row ( H264Context h)
static

Draw edges and report progress for the last MB row.

Definition at line 4223 of file h264.c.

Referenced by decode_slice().

static int decode_frame ( AVCodecContext avctx,
void data,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 4864 of file h264.c.

static int decode_init_thread_copy ( AVCodecContext avctx)
static

Definition at line 1574 of file h264.c.

static int decode_nal_units ( H264Context h,
const uint8_t buf,
int  buf_size,
int  parse_extradata 
)
static

< thread context

< number of NALs that need decoding before the next frame thread starts

Definition at line 4485 of file h264.c.

Referenced by context_init(), decode_frame(), and ff_h264_decode_extradata().

static void decode_postinit ( H264Context h,
int  setup_finished 
)
static

Run setup operations that must be run after slice header decoding.

This includes finding the next displayed frame.

Parameters
hh264 master context
setup_finishedenough NALs have been read that we can call ff_thread_finish_setup()

Definition at line 1891 of file h264.c.

Referenced by decode_frame(), and decode_nal_units().

static int 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 630 of file h264.c.

Referenced by decode_nal_units().

static int decode_slice ( struct AVCodecContext avctx,
void arg 
)
static

Definition at line 4265 of file h264.c.

Referenced by execute_decode_slices().

static int decode_slice_header ( H264Context h,
H264Context h0 
)
static

Decode a slice header.

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

Parameters
hh264context
h0h264 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 3201 of file h264.c.

Referenced by decode_nal_units().

static int decode_update_thread_context ( AVCodecContext dst,
const AVCodecContext src 
)
static

Definition at line 1596 of file h264.c.

static void er_add_slice ( H264Context h,
int  startx,
int  starty,
int  endx,
int  endy,
int  status 
)
static

Definition at line 4254 of file h264.c.

Referenced by decode_slice().

static int execute_decode_slices ( H264Context h,
int  context_count 
)
static

Call decode_slice() for each context.

Parameters
hh264 master context
context_countnumber of contexts to execute

Definition at line 4446 of file h264.c.

Referenced by decode_nal_units().

int ff_h264_alloc_tables ( H264Context h)

Allocate tables.

needs width/height

Definition at line 1235 of file h264.c.

Referenced by decode_update_thread_context(), h264_slice_header_init(), 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 426 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 473 of file h264.c.

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

int ff_h264_decode_extradata ( H264Context h,
const uint8_t buf,
int  size 
)

Definition at line 1398 of file h264.c.

Referenced by decode_frame(), ff_h264_decode_init(), and h264_parse().

av_cold int ff_h264_decode_init ( AVCodecContext avctx)

Definition at line 1455 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
consumedis the number of bytes used as input
lengthis the length of the array
dst_lengthis 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 514 of file h264.c.

Referenced by decode_nal_units(), and parse_nal_units().

void ff_h264_draw_horiz_band ( H264Context h,
int  y,
int  height 
)
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 4978 of file h264.c.

Referenced by close(), ff_h264_decode_init(), 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

Parameters
spsSPS
Returns
profile as defined by FF_PROFILE_H264_*

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

Referenced by fill_slice_long(), and vaapi_h264_decode_slice().

void ff_h264_hl_decode_mb ( H264Context h)

Definition at line 2469 of file h264.c.

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

static int field_end ( H264Context h,
int  in_setup 
)
static

Definition at line 2804 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 skipped

Definition at line 3996 of file h264.c.

Referenced by loop_filter().

static av_always_inline void fill_filter_caches_inter ( H264Context h,
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

Definition at line 3912 of file h264.c.

Referenced by fill_filter_caches().

static int find_unused_picture ( H264Context h)
static

Definition at line 403 of file h264.c.

Referenced by h264_frame_start().

static void flush_change ( H264Context h)
static

Definition at line 2632 of file h264.c.

Referenced by decode_slice_header(), and flush_dpb().

static void flush_dpb ( AVCodecContext avctx)
static

Definition at line 2661 of file h264.c.

static void free_tables ( H264Context h,
int  free_rbsp 
)
static

Definition at line 1100 of file h264.c.

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

static int get_consumed_bytes ( int  pos,
int  buf_size 
)
static

Return the number of bytes consumed for building the current frame.

Definition at line 4834 of file h264.c.

Referenced by decode_frame().

static int get_lowest_part_list_y ( H264Context h,
Picture pic,
int  n,
int  height,
int  y_offset,
int  list 
)
inlinestatic

Definition at line 645 of file h264.c.

Referenced by get_lowest_part_y().

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 
)
inlinestatic

Definition at line 658 of file h264.c.

Referenced by await_references().

static enum AVPixelFormat get_pixel_format ( H264Context h,
int  force_callback 
)
static

Definition at line 2972 of file h264.c.

Referenced by decode_slice_header().

static av_cold int h264_decode_end ( AVCodecContext avctx)
static

Definition at line 4991 of file h264.c.

static void h264_er_decode_mb ( void opaque,
int  ref,
int  mv_dir,
int  mv_type,
int(*)  mv[2][4][2],
int  mb_x,
int  mb_y,
int  mb_intra,
int  mb_skipped 
)
static

Definition at line 112 of file h264.c.

Referenced by context_init().

static int h264_frame_start ( H264Context h)
static

Definition at line 1795 of file h264.c.

Referenced by decode_slice_header().

static int h264_set_parameter_from_sps ( H264Context h)
static

Definition at line 2917 of file h264.c.

Referenced by decode_slice_header(), and decode_update_thread_context().

static int h264_slice_header_init ( H264Context h,
int  reinit 
)
static

Definition at line 3089 of file h264.c.

Referenced by decode_slice_header(), and decode_update_thread_context().

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

Definition at line 2387 of file h264.c.

Referenced by hl_decode_mb(), and hl_decode_mb_444().

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

Definition at line 2272 of file h264.c.

Referenced by hl_decode_mb(), and hl_decode_mb_444().

static void idr ( H264Context h)
static

instantaneous decoder refresh.

Definition at line 2619 of file h264.c.

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

static void implicit_weight_table ( H264Context h,
int  field 
)
static

Initialize implicit_weight table.

Parameters
field0/1 initialize the weight for interlaced MBAFF -1 initializes the rest

Definition at line 2555 of file h264.c.

Referenced by decode_slice_header().

static void init_dequant4_coeff_table ( H264Context h)
static

Definition at line 1192 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant8_coeff_table ( H264Context h)
static

Definition at line 1165 of file h264.c.

Referenced by init_dequant_tables().

static void init_dequant_tables ( H264Context h)
static

Definition at line 1218 of file h264.c.

Referenced by decode_slice_header(), and ff_h264_alloc_tables().

static int init_dimensions ( H264Context h)
static

Definition at line 3054 of file h264.c.

Referenced by decode_slice_header().

static int init_poc ( H264Context h)
static

Definition at line 2690 of file h264.c.

Referenced by decode_slice_header().

static void init_scan_tables ( H264Context h)
static

initialize scan tables

Definition at line 2770 of file h264.c.

Referenced by h264_slice_header_init().

static int init_table_pools ( H264Context h)
static

Definition at line 311 of file h264.c.

Referenced by alloc_picture().

static void loop_filter ( H264Context h,
int  start_x,
int  end_x 
)
static

Definition at line 4141 of file h264.c.

Referenced by decode_slice(), and xmv_read_extradata().

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

Definition at line 809 of file h264.c.

Referenced by mc_part_std(), and mc_part_weighted().

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

Definition at line 922 of file h264.c.

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

Definition at line 969 of file h264.c.

Referenced by mc_part().

static int output_frame ( H264Context h,
AVFrame dst,
AVFrame src 
)
static

Definition at line 4844 of file h264.c.

Referenced by decode_frame().

static int pic_is_unused ( H264Context h,
Picture pic 
)
inlinestatic

Definition at line 394 of file h264.c.

Referenced by find_unused_picture().

static int pred_weight_table ( H264Context h)
static

Definition at line 2488 of file h264.c.

Referenced by decode_slice_header().

static void predict_field_decoding_flag ( H264Context h)
static

Definition at line 4210 of file h264.c.

Referenced by decode_slice().

static av_always_inline void prefetch_motion ( H264Context h,
int  list,
int  pixel_shift,
int  chroma_idc 
)
static

Definition at line 1076 of file h264.c.

Referenced by hl_motion().

static int ref_picture ( H264Context h,
Picture dst,
Picture src 
)
static
static void release_unused_pictures ( H264Context h,
int  remove_current 
)
static

Definition at line 212 of file h264.c.

Referenced by decode_slice_header(), and h264_frame_start().

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

Definition at line 2166 of file h264.c.

Referenced by hl_decode_mb(), and hl_decode_mb_444().

Variable Documentation

const uint8_t div6[QP_MAX_NUM+1]
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, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10,
10,10,10,11,11,11,11,11,11,12,12,12,12,12,12,13,13,13, 13, 13, 13,
14,14,14,14,
}

Definition at line 64 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().

AVCodec ff_h264_decoder
Initial value:
= {
.name = "h264",
.priv_data_size = sizeof(H264Context),
.capabilities = CODEC_CAP_DR1 |
.long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
.priv_class = &h264_class,
}
static const AVClass h264_class
Definition: h264.c:5026
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
av_cold int ff_h264_decode_init(AVCodecContext *avctx)
Definition: h264.c:1455
static int decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264.c:1596
struct H264Context H264Context
H264Context.
static int decode_init_thread_copy(AVCodecContext *avctx)
Definition: h264.c:1574
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static void flush_dpb(AVCodecContext *avctx)
Definition: h264.c:2661
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
static void flush(AVCodecContext *avctx)
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static av_cold int h264_decode_end(AVCodecContext *avctx)
Definition: h264.c:4991
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
#define CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: h264.c:4864
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
static const AVProfile profiles[]
Definition: h264.c:5003

Definition at line 5040 of file h264.c.

const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 }

Definition at line 54 of file h264.c.

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

const AVClass h264_class
static
Initial value:
= {
.class_name = "H264 Decoder",
.item_name = av_default_item_name,
.option = h264_options,
}
av_default_item_name
static const AVOption h264_options[]
Definition: h264.c:5020
LIBAVUTIL_VERSION_INT
Definition: eval.c:55

Definition at line 5026 of file h264.c.

Referenced by decode().

enum AVPixelFormat h264_hwaccel_pixfmt_list_420[]
static
Initial value:
= {
}
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:68

Definition at line 72 of file h264.c.

Referenced by get_pixel_format().

enum AVPixelFormat h264_hwaccel_pixfmt_list_jpeg_420[]
static
Initial value:
= {
}
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
Definition: pixfmt.h:80

Definition at line 89 of file h264.c.

Referenced by get_pixel_format().

const AVOption h264_options[]
static
Initial value:
= {
{"is_avc", "is avc", offsetof(H264Context, is_avc), FF_OPT_TYPE_INT, {.i64 = 0}, 0, 1, 0},
{"nal_length_size", "nal_length_size", offsetof(H264Context, nal_length_size), FF_OPT_TYPE_INT, {.i64 = 0}, 0, 4, 0},
{NULL}
}
H264Context.
Definition: h264.h:260
NULL
Definition: eval.c:55

Definition at line 5020 of file h264.c.

const AVClass h264_vdpau_class
static
Initial value:
= {
.class_name = "H264 VDPAU Decoder",
.item_name = av_default_item_name,
.option = h264_options,
}
av_default_item_name
static const AVOption h264_options[]
Definition: h264.c:5020
LIBAVUTIL_VERSION_INT
Definition: eval.c:55

Definition at line 5033 of file h264.c.

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" },
}
#define FF_PROFILE_H264_HIGH_10
#define FF_PROFILE_H264_HIGH_444
#define FF_PROFILE_H264_MAIN
#define FF_PROFILE_H264_EXTENDED
#define FF_PROFILE_UNKNOWN
#define FF_PROFILE_H264_HIGH_444_INTRA
#define FF_PROFILE_H264_HIGH_422_INTRA
#define FF_PROFILE_H264_HIGH_10_INTRA
#define FF_PROFILE_H264_HIGH_444_PREDICTIVE
#define FF_PROFILE_H264_CAVLC_444
#define FF_PROFILE_H264_HIGH
#define FF_PROFILE_H264_CONSTRAINED_BASELINE
#define FF_PROFILE_H264_BASELINE
#define FF_PROFILE_H264_HIGH_422

Definition at line 5003 of file h264.c.

const uint8_t rem6[QP_MAX_NUM+1]
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, 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 56 of file h264.c.

Referenced by init_dequant4_coeff_table(), and init_dequant8_coeff_table().