FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
h264_refs.c File Reference

H.264 / AVC / MPEG4 part10 reference picture handling. More...

#include <inttypes.h>
#include "libavutil/avassert.h"
#include "internal.h"
#include "avcodec.h"
#include "h264.h"
#include "golomb.h"
#include "mpegutils.h"
#include <assert.h>

Go to the source code of this file.

Functions

static void pic_as_field (H264Ref *pic, const int parity)
 
static void ref_from_h264pic (H264Ref *dst, H264Picture *src)
 
static int split_field_copy (H264Ref *dest, H264Picture *src, int parity, int id_add)
 
static int build_def_list (H264Ref *def, int def_len, H264Picture **in, int len, int is_long, int sel)
 
static int add_sorted (H264Picture **sorted, H264Picture **src, int len, int limit, int dir)
 
int ff_h264_fill_default_ref_list (H264Context *h, H264SliceContext *sl)
 Fill the default_ref_list.
 
static void print_short_term (H264Context *h)
 print short term list
 
static void print_long_term (H264Context *h)
 print long term list
 
static int pic_num_extract (H264Context *h, int pic_num, int *structure)
 Extract structure information about the picture described by pic_num in the current decoding context (frame or field).
 
int ff_h264_decode_ref_pic_list_reordering (H264Context *h, H264SliceContext *sl)
 
void ff_h264_fill_mbaff_ref_list (H264Context *h, H264SliceContext *sl)
 
static int unreference_pic (H264Context *h, H264Picture *pic, int refmask)
 Mark a picture as no longer needed for reference.
 
static H264Picturefind_short (H264Context *h, int frame_num, int *idx)
 Find a H264Picture in the short term reference list by frame number.
 
static void remove_short_at_index (H264Context *h, int i)
 Remove a picture from the short term reference list by its index in that list.
 
static H264Pictureremove_short (H264Context *h, int frame_num, int ref_mask)
 
static H264Pictureremove_long (H264Context *h, int i, int ref_mask)
 Remove a picture from the long term reference list by its index in that list.
 
void ff_h264_remove_all_refs (H264Context *h)
 
static int check_opcodes (MMCO *mmco1, MMCO *mmco2, int n_mmcos)
 
int ff_generate_sliding_window_mmcos (H264Context *h, int first_slice)
 
int ff_h264_execute_ref_pic_marking (H264Context *h, MMCO *mmco, int mmco_count)
 Execute the reference picture marking (memory management control operations).
 
int ff_h264_decode_ref_pic_marking (H264Context *h, GetBitContext *gb, int first_slice)
 

Detailed Description

H.264 / AVC / MPEG4 part10 reference picture handling.

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

Definition in file h264_refs.c.

Function Documentation

static void pic_as_field ( H264Ref pic,
const int  parity 
)
static

Definition at line 39 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_list_reordering(), and split_field_copy().

static void ref_from_h264pic ( H264Ref dst,
H264Picture src 
)
static

Definition at line 51 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_list_reordering(), and split_field_copy().

static int split_field_copy ( H264Ref dest,
H264Picture src,
int  parity,
int  id_add 
)
static

Definition at line 61 of file h264_refs.c.

Referenced by build_def_list().

static int build_def_list ( H264Ref def,
int  def_len,
H264Picture **  in,
int  len,
int  is_long,
int  sel 
)
static

Definition at line 77 of file h264_refs.c.

Referenced by ff_h264_fill_default_ref_list().

static int add_sorted ( H264Picture **  sorted,
H264Picture **  src,
int  len,
int  limit,
int  dir 
)
static

Definition at line 103 of file h264_refs.c.

Referenced by ff_h264_fill_default_ref_list().

int ff_h264_fill_default_ref_list ( H264Context h,
H264SliceContext sl 
)

Fill the default_ref_list.

Definition at line 125 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header().

static void print_short_term ( H264Context h)
static

print short term list

Definition at line 519 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_list_reordering(), and ff_h264_execute_ref_pic_marking().

static void print_long_term ( H264Context h)
static

print long term list

Definition at line 535 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_list_reordering(), and ff_h264_execute_ref_pic_marking().

static int pic_num_extract ( H264Context h,
int  pic_num,
int *  structure 
)
static

Extract structure information about the picture described by pic_num in the current decoding context (frame or field).

Note that pic_num is picture number without wrapping (so, 0<=pic_num<max_pic_num).

Parameters
pic_numpicture number for which to extract structure information
structureone of PICT_XXX describing structure of picture with pic_num
Returns
frame number (short term) or long term index of picture described by pic_num

Definition at line 207 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_list_reordering(), and ff_h264_execute_ref_pic_marking().

int ff_h264_decode_ref_pic_list_reordering ( H264Context h,
H264SliceContext sl 
)

Definition at line 220 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header().

void ff_h264_fill_mbaff_ref_list ( H264Context h,
H264SliceContext sl 
)

Definition at line 351 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header().

static int unreference_pic ( H264Context h,
H264Picture pic,
int  refmask 
)
inlinestatic

Mark a picture as no longer needed for reference.

The refmask argument allows unreferencing of individual fields or the whole frame. If the picture becomes entirely unreferenced, but is being held for display purposes, it is marked as such.

Parameters
refmaskmask of fields to unreference; the mask is bitwise anded with the reference marking of pic
Returns
non-zero if pic becomes entirely unreferenced (except possibly for display purposes) zero if one of the fields remains in reference

Definition at line 394 of file h264_refs.c.

Referenced by ff_h264_remove_all_refs(), remove_long(), and remove_short().

static H264Picture* find_short ( H264Context h,
int  frame_num,
int *  idx 
)
static

Find a H264Picture in the short term reference list by frame number.

Parameters
frame_numframe number to search for
idxthe index into h->short_ref where returned picture is found undefined if no picture found.
Returns
pointer to the found picture, or NULL if no pic with the provided frame number is found

Definition at line 417 of file h264_refs.c.

Referenced by ff_h264_execute_ref_pic_marking(), and remove_short().

static void remove_short_at_index ( H264Context h,
int  i 
)
static

Remove a picture from the short term reference list by its index in that list.

This does no checking on the provided index; it is assumed to be valid. Other list entries are shifted down.

Parameters
iindex into h->short_ref of picture to remove.

Definition at line 439 of file h264_refs.c.

Referenced by ff_h264_execute_ref_pic_marking(), and remove_short().

static H264Picture* remove_short ( H264Context h,
int  frame_num,
int  ref_mask 
)
static
Returns
the removed picture or NULL if an error occurs

Definition at line 452 of file h264_refs.c.

Referenced by ff_h264_execute_ref_pic_marking().

static H264Picture* remove_long ( H264Context h,
int  i,
int  ref_mask 
)
static

Remove a picture from the long term reference list by its index in that list.

Returns
the removed picture or NULL if an error occurs

Definition at line 474 of file h264_refs.c.

Referenced by ff_h264_execute_ref_pic_marking(), and ff_h264_remove_all_refs().

void ff_h264_remove_all_refs ( H264Context h)

Definition at line 491 of file h264_refs.c.

Referenced by h264_decode_end(), and idr().

static int check_opcodes ( MMCO mmco1,
MMCO mmco2,
int  n_mmcos 
)
static
int ff_generate_sliding_window_mmcos ( H264Context h,
int  first_slice 
)

Definition at line 565 of file h264_refs.c.

Referenced by ff_h264_decode_ref_pic_marking(), and ff_h264_decode_slice_header().

int ff_h264_execute_ref_pic_marking ( H264Context h,
MMCO mmco,
int  mmco_count 
)

Execute the reference picture marking (memory management control operations).

Definition at line 597 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header(), ff_h264_field_end(), and ff_h264_update_thread_context().

int ff_h264_decode_ref_pic_marking ( H264Context h,
GetBitContext gb,
int  first_slice 
)

Definition at line 798 of file h264_refs.c.

Referenced by ff_h264_decode_slice_header().